资源描述:
《进程调度与系统调用__操作系统原理课程设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《操作系统理》课程设计报告《操作系统原理课程设计》报告一、课程设计任务Linux0.11版本进程调度与系统调用部分代码阅读二、本人分工此任务有两部分:1.进程调度2.系统调用本人负责的部分是“exit.c程序”相关代码的阅读及改写。三、设计过程1、该段代码总体设计该程序主要描述了进程(任务)终止和退出的处理事宜。主要包含进程释放、会话(进程组)终止和程序退出处理函数以及杀死进程、终止进程、挂起进程等系统调用函数。还包括进程信号发送函数send_sig()和通知父进程子进程终止的函数tell_father()。释
2、放进程的函数release()主要根据指定的任务数据结构(任务描述符)指针,在任务数组中删除指定的进程指针、释放相关内存页并立刻让内核重新调度任务的运行。进程组终止函数kill_session()通过向会话号与当前进程相同的进程发送挂断进程的信号。系统调用sys_kill()用于向进程发送任何指定的信号。根据参数pid(进程标识号)的数值的不同,该系统调用会向不同的进程或进程组发送信号。程序注释中已经列出了各种不同情况的处理方式。程序退出处理函数6《操作系统理》课程设计报告do_exit()是在系统调用的中断处
3、理程序中被调用的。它首先会释放当前进程的代码段和数据段所占的内存页面,然后向子进程发送终止信号SIGCHLD。接着关闭当前进程打开的所有文件、释放使用的终端设备、协处理器设备,若当前进程是进程组的领头进程,则还需要终止所有相关进程。随后把当前进程置为僵死状态,设置退出码,并向其父进程发送子进程终止信号。最后让内核重新调度任务的运行。系统调用waitpid()用于挂起当前进程,直到pid指定的子进程退出(终止)或者收到要求终止该进程的信号,或者是需要调用一个信号句柄(信号处理程序)。如果pid所指的子进程早已退出
4、(已成所谓的僵死进程),则本调用将立刻返回。子进程使用的所有资源将释放。该函数的具体操作也要根据其参数进行不同的处理。2、该段代码中的主要数据结构及说明1.进程运行任务的结构体:structtask_struct{/*thesearehardcoded-don'ttouch*/longstate;//任务的运行状态(-1不可运行,0可运行(就绪),>0已停止)longcounter;//任务运行时间计数(递减)(滴答数),运行时间片。longpriority;//运行优先数。任务开始运行时counter=pri
5、ority,越大运行越长。longsignal;//信号。是位图,每个比特位代表一种信号,信号值=位偏移值+1。structsigactionsigaction[32];//信号执行属性结构,对应信号将要执行的操作和标志信息。longblocked;//进程信号屏蔽码(对应信号位图)。/*variousfields*/intexit_code;//任务执行停止的退出码,其父进程会取。//代码段地址。代码长度(字节数)。代码长度+数据长度(字节数)。总长度(字节数)。堆栈段地址。unsignedlongstart
6、_code,end_code,end_data,brk,start_stack;//进程标识号(进程号)。父进程号。父进程组号。会话号。会话首领。longpid,father,pgrp,session,leader;6《操作系统理》课程设计报告unsignedshortuid,euid,suid;//用户标识号(用户id)。有效用户id。保存的用户id。unsignedshortgid,egid,sgid;//组标识号(组id)。有效组id。保存的组id。longalarm;//报警定时值(滴答数)。//用户态
7、运行时间(滴答数)。系统态运行时间(滴答数)。子进程用户态运行时间。子进程系统态运行时间。进程开始运行时刻。longutime,stime,cutime,cstime,start_time;unsignedshortused_math;//标志:是否使用了协处理器。/*filesysteminfo*/inttty;//进程使用tty的子设备号。-1表示没有使用。unsignedshortumask;//文件创建属性屏蔽位。structm_inode*pwd;//当前工作目录i节点结构。structm_inode
8、*root;//根目录i节点结构。structm_inode*executable;//执行文件i节点结构。unsignedlongclose_on_exec;//执行时关闭文件句柄位图标志。structfile*filp[NR_OPEN];//进程使用的文件表结构。/*ldtforthistask0-zero1-cs2-ds&ss*/structdesc_structldt[3];/