欢迎来到天天文库
浏览记录
ID:45451742
大小:1.85 MB
页数:66页
时间:2019-11-13
《《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_p
2、prev;…}3当前进程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)冲突时:*pidh
3、ash_next;6三、进程创建、终结及相关系统调用1.进程状态可运行态运行就绪睡眠(等待)态浅度:等待资源有效时,被信号或时钟中断唤醒深度:不能由其他进程通过信号和时钟中断唤醒暂停态:暂时停止接受某种处理如程序调试(挂起)僵死态:执行接受但尚未消亡,尚未释放pcb7Linux进程状态及转换fork()TASK_RUNNING就绪TASK_INTERRUPTIBLE浅度睡眠TASK_UNINTERRUPTIBLE深度睡眠TASK_STOPPED暂停TASK_ZOMBIE僵死占有CPU执行do_exit()sc
4、hedule()ptrace()schedule()当前进程时间片耗尽等待资源到位sleep_on()schedule()等待资源到位interruptible_sleep_on()schedule()资源到位wake_up_interruptible()或收到信号wake_up()资源到位wake_up()收到信号SIGCONTwake_up()82.进程的创建传统方法——单一函数:创建进程地址空间;读入可执行文件;开始执行UNIX——分创建和执行两步:fork函数:复制当前进程创建子进程(快速创建的特点)
5、exec函数:读取可执行文件并载入进程地址空间执行9linux——“写时复制”技术fork()与以往不同,不是全部复制进程空间,实际开销只是复制父进程的页表以及给子进程创建唯一的PCB。父进程的资源被设置为只读(父进程页面被置上写时保护位),当父进程或子进程试图修改某些内容时,内核才在修改前将该部分进行拷贝——写时复制。pcb1程序1父进程fork页表1pcb2页表2无论谁写时,才复制要写的页面10进程/线程创建函数:fork()/clone()实际上都是调用内核函数do_fork(),其主要操作为:调用al
6、loc_task_struct()函数获得8KB的uniontask_union内存区,用来存放新进程的PCB和内核栈。让当前指针指向父进程的PCB,并把父进程PCB的内容拷贝到刚刚分配的新进程的PCB中。检查新创建这个子进程后,当前用户所拥有的进程数目没有超出给他分配的资源的限制。现在,do_fork()已经获得它从父进程能利用的几乎所有的东西;剩下的事情就是集中建立子进程的新资源,并让内核知道这个新进程已经呱呱落地。11接下来,子进程的状态被设置为TASK_UNINTERRUPTIBLE以保证它不会马上投
7、入运行。调用get_pid()为新进程获取一个有效的PID。开始组织关系更新不能从父进程继承的PCB的其他所有域,例如,进程间亲属关系的域。把新PCB插入进程链表,确保进程之间的亲属关系。把新PCB插入pidhash哈希表。把子进程PCB的状态域设置成TASK_RUNNING,并调用wake_up_process()把子进程插入到运行队列链表。让父进程和子进程平分剩余的时间片。返回子进程的PID,该PID最终由用户态下的父进程读取一次调用,两个PID返回值12133.进程执行功能fork调用后,出现两个进程
8、执行,父子进程几乎完全一样,新的子进程如何执行自己的代码功能?以简化的shell框架为例:while(true){read_command(command,parameters);if(fork!=0)/*父进程*/wait(NULL);else/*子进程*/exec(command,parameters,0);}14exec函数族包括若干函数,作用是根据文件名找到相应的可执行文件。子进程的地址空间
此文档下载收益归作者所有