linux进程管理课件.ppt

linux进程管理课件.ppt

ID:59416567

大小:1.16 MB

页数:32页

时间:2020-09-19

linux进程管理课件.ppt_第1页
linux进程管理课件.ppt_第2页
linux进程管理课件.ppt_第3页
linux进程管理课件.ppt_第4页
linux进程管理课件.ppt_第5页
资源描述:

《linux进程管理课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、上次内容虚拟空间=内核空间+进程空间进程控制块进程队列组织后面实验调整为每周五都上1进程控制块2查2.4内核:structtask_struct{…structlist_headrun_list;structtask_struct*next_task,*prev_task;structtask_struct*p_opptr,*p_pptr,*p_cptr,*p_ysptr,*p_osptr;…structtask_struct*pidhash_next;structtask_struct**pidhash_pprev;…}3当前进程

2、pcb在内核栈底端内核定义current宏可方便找到它:esp偏移8K=8192内核内核栈8ktask_structESPtask_structinit_tasktask_structtask_structtask_structtask_structtask_structprevnext45查找某个进程init_task链表与运行相关current散列表structtask_struct*pidhash[PIDHASH_SZ]find_task_by_pid(PID)冲突时:*pidhash_next;6三、进程创建、终结及相关系统

3、调用1.进程状态可运行态运行就绪睡眠(等待)态浅度:等待资源有效时,被信号或时钟中断唤醒深度:不能由其他进程通过信号和时钟中断唤醒暂停态:暂时停止接受某种处理(挂起)僵死态:执行接受但尚未消亡,尚未释放pcb7Linux进程状态及转换fork()TASK_RUNNING就绪TASK_INTERRUPTIBLE浅度睡眠TASK_UNINTERRUPTIBLE深度睡眠TASK_STOPPED暂停TASK_ZOMBIE僵死占有CPU执行do_exit()schedule()ptrace()schedule()当前进程时间片耗尽等待资源到位

4、sleep_on()schedule()等待资源到位interruptible_sleep_on()schedule()资源到位wake_up_interruptible()或收到信号wake_up()资源到位wake_up()收到信号SIGCONTwake_up()82.进程的创建传统方法——单一函数:创建进程地址空间;读入可执行文件;开始执行UNIX——分创建和执行两步:fork函数:复制当前进程创建子进程exec函数:读取可执行文件并载入进程地址空间执行9linux——“写时复制”技术fork()与以往不同,实际开销只是复制父

5、进程的页表以及给子进程创建唯一的PCB。父进程的资源被设置为只读,当父进程或子进程试图修改某些内容时,内核才在修改前将该部分进行拷贝——写时复制10进程/线程创建函数:fork()/clone()实际上都是调用内核函数do_fork(),其主要操作为:调用alloc_task_struct()函数以获得8KB的uniontask_union内存区,用来存放新进程的PCB和内核栈。让当前指针指向父进程的PCB,并把父进程PCB的内容拷贝到刚刚分配的新进程的PCB中。检查新创建这个子进程后,当前用户所拥有的进程数目没有超出给他分配的资源

6、的限制。现在,do_fork()已经获得它从父进程能利用的几乎所有的东西;剩下的事情就是集中建立子进程的新资源,并让内核知道这个新进程已经呱呱落地。11接下来,子进程的状态被设置为TASK_UNINTERRUPTIBLE以保证它不会马上投入运行。调用get_pid()为新进程获取一个有效的PID。开始组织关系更新不能从父进程继承的PCB的其他所有域,例如,进程间亲属关系的域。把新PCB插入进程链表,确保进程之间的亲属关系。把新PCB插入pidhash哈希表。把子进程PCB的状态域设置成TASK_RUNNING,并调用wake_up

7、_process()把子进程插入到运行队列链表。让父进程和子进程平分剩余的时间片。返回子进程的PID,该PID最终由用户态下的父进程读取一次调用,两个PID返回值12133.进程执行功能fork调用后,出现两个进程执行,父子进程几乎完全一样,新的子进程如何执行自己的代码功能?以简化的shell框架为例:while(true){read_command(command,parameters);if(fork!=0)/*父进程*/wait(NULL);else/*子进程*/exec(command,parameters,0);}14ex

8、ec函数族包括若干函数,作用是根据文件名找到相应的可执行文件。子进程的地址空间被填入可执行文件的内容,其进程功能开始有别于父进程exec函数执行成功就会进入新进程执行不再返回。exec调用失败才返回-1,继续在克隆来的地址空间中从调用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。