lab5(do_exit/do_kill/do_wait)

本文介绍了ucore操作系统中进程管理的关键函数do_exit、do_kill和do_wait。do_exit使得调用进程变为僵尸,子进程由内核线程init接管。do_kill通过设置进程标志来结束指定进程,而do_wait则负责等待并回收子进程的资源。

do_exit 

调用exit的进程将成为僵尸进程,同时将为所有子进程寻找新的父进程,在ucore中将内核线程init作为新的父进程。 

在linux中会实现寻找同进程组的进程来作为新的父进程,当找不到时在使用init。

// do_exit - called by sys_exit
//   1. call exit_mmap & put_pgdir & mm_destroy to free the almost all memory space of process
//   2. set process' state as PROC_ZOMBIE, then call wakeup_proc(parent) to ask parent reclaim itself.
//   3. call scheduler to switch to other process
int
do_exit(int error_code) {
    if (current == idleproc) {
        panic("idleproc exit.\n");
    }
    if (current == initproc) {
        panic("initproc exit.\n");
    }
    
    struct mm_struct *mm = current->mm;
    
    //如果是用户进程则释放占用用户空间
    if (mm != NULL) {
        //设置页目录表为内核线程的页目录表 防止cr3为空
        lcr3(boot_cr3);
        if (mm_count_dec(mm) == 0) {
            exit_mmap(mm);
            put_pgdir(mm);
            mm_destroy(mm);
        }
        current->mm = NULL;
    }

    //设置为僵尸进程
    curre
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值