pid管理修正

This commit is contained in:
zhangzheng
2023-12-01 22:18:10 +08:00
parent c0d24e4a49
commit 9435ca5d71
4 changed files with 17 additions and 10 deletions

View File

@@ -27,3 +27,4 @@ void task_init(task_t *task, ram_limit_t *ram, int is_knl);
task_t *task_create(ram_limit_t *lim, int is_knl); task_t *task_create(ram_limit_t *lim, int is_knl);
int task_alloc_base_ram(task_t *tk, ram_limit_t *lim, size_t size); int task_alloc_base_ram(task_t *tk, ram_limit_t *lim, size_t size);
void task_kill(task_t *tk); void task_kill(task_t *tk);
int task_set_pid(task_t *task, pid_t pid);

View File

@@ -104,6 +104,20 @@ static int task_lock_2(spinlock_t *sp0, spinlock_t *sp1, int *st0, int *st1)
} }
return TRUE; return TRUE;
} }
int task_set_pid(task_t *task, pid_t pid)
{
task_t *cur_task = thread_get_current_task();
if (cur_task->pid == 0)
{
task->pid = pid;
return 0;
}
else
{
return -EACCES;
}
}
static void task_syscall_func(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, entry_frame_t *f) static void task_syscall_func(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, entry_frame_t *f)
{ {
task_t *cur_task = thread_get_current_task(); task_t *cur_task = thread_get_current_task();
@@ -186,15 +200,7 @@ static void task_syscall_func(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t i
break; break;
case TASK_SET_PID: case TASK_SET_PID:
{ {
if (tag_task->pid == (pid_t)(-1)) tag = msg_tag_init4(0, 0, 0, task_set_pid(tag_task, f->r[0]));
{
tag_task->pid = f->r[0];
tag = msg_tag_init4(0, 0, 0, 0);
}
else
{
tag = msg_tag_init4(0, 0, 0, -EACCES);
}
} }
break; break;
case TASK_GET_PID: case TASK_GET_PID:

View File

@@ -70,6 +70,7 @@ static void knl_init_2(void)
void *sp_addr = (char *)init_task->mm_space.mm_block + app->i.stack_offset - app->i.data_offset; void *sp_addr = (char *)init_task->mm_space.mm_block + app->i.stack_offset - app->i.data_offset;
void *sp_addr_top = (char *)sp_addr + app->i.stack_size; void *sp_addr_top = (char *)sp_addr + app->i.stack_size;
task_set_pid(&init_task, 0);
thread_set_msg_bug(init_thread, (char *)(init_task->mm_space.mm_block) + app->i.ram_size); thread_set_msg_bug(init_thread, (char *)(init_task->mm_space.mm_block) + app->i.ram_size);
thread_bind(init_thread, &init_task->kobj); thread_bind(init_thread, &init_task->kobj);
thread_user_pf_set(init_thread, (void *)(KNL_TEXT + INIT_OFFSET), (void *)((umword_t)sp_addr_top - 8), thread_user_pf_set(init_thread, (void *)(KNL_TEXT + INIT_OFFSET), (void *)((umword_t)sp_addr_top - 8),

View File

@@ -61,7 +61,6 @@ int main(int argc, char *args[])
ulog_write_str(LOG_PROT, "init..\n"); ulog_write_str(LOG_PROT, "init..\n");
test(); test();
task_set_pid(TASK_THIS, 0);
env = u_get_global_env(); env = u_get_global_env();
rpc_meta_init(THREAD_MAIN, &env->ns_hd); rpc_meta_init(THREAD_MAIN, &env->ns_hd);
namespace_init(); namespace_init();