sched: implement user-mode task and thread creation
This commit is contained in:
@@ -106,7 +106,8 @@ struct thread {
|
||||
cycles_t tr_quantum_cycles, tr_quantum_target;
|
||||
cycles_t tr_total_cycles;
|
||||
|
||||
uintptr_t tr_sp, tr_bp;
|
||||
virt_addr_t tr_ip, tr_sp, tr_bp;
|
||||
virt_addr_t tr_cpu_user_sp, tr_cpu_kernel_sp;
|
||||
|
||||
struct runqueue *tr_rq;
|
||||
|
||||
@@ -114,6 +115,7 @@ struct thread {
|
||||
struct queue_entry tr_rqentry;
|
||||
|
||||
struct vm_page *tr_kstack;
|
||||
struct vm_object *tr_ustack;
|
||||
};
|
||||
|
||||
struct runqueue {
|
||||
@@ -181,6 +183,7 @@ extern void rq_remove_thread(struct runqueue *rq, struct thread *thr);
|
||||
extern struct runqueue *cpu_rq(unsigned int cpu);
|
||||
|
||||
extern struct task *task_alloc(void);
|
||||
extern struct task *task_create(struct task *parent, const char *name);
|
||||
static inline struct task *task_ref(struct task *task)
|
||||
{
|
||||
return OBJECT_CAST(struct task, t_base, object_ref(&task->t_base));
|
||||
@@ -190,6 +193,7 @@ static inline void task_unref(struct task *task)
|
||||
object_unref(&task->t_base);
|
||||
}
|
||||
extern struct task *task_from_pid(unsigned int pid);
|
||||
extern struct thread *task_create_thread(struct task *parent);
|
||||
extern struct task *kernel_task(void);
|
||||
extern struct task *idle_task(void);
|
||||
extern cycles_t default_quantum(void);
|
||||
@@ -207,7 +211,11 @@ extern void end_charge_period(void);
|
||||
DEFINE_OBJECT_LOCK_FUNCTION(task, t_base)
|
||||
|
||||
extern struct thread *thread_alloc(void);
|
||||
extern kern_status_t thread_init(struct thread *thr, uintptr_t ip);
|
||||
extern kern_status_t thread_init_kernel(struct thread *thr, virt_addr_t ip);
|
||||
extern kern_status_t thread_init_user(
|
||||
struct thread *thr,
|
||||
virt_addr_t ip,
|
||||
virt_addr_t sp);
|
||||
extern int thread_priority(struct thread *thr);
|
||||
extern void idle(void);
|
||||
extern struct thread *create_kernel_thread(void (*fn)(void));
|
||||
|
||||
Reference in New Issue
Block a user