进程调度与系统调用__操作系统原理课程设计.doc_第1页
进程调度与系统调用__操作系统原理课程设计.doc_第2页
进程调度与系统调用__操作系统原理课程设计.doc_第3页
进程调度与系统调用__操作系统原理课程设计.doc_第4页
进程调度与系统调用__操作系统原理课程设计.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统理课程设计报告操作系统原理课程设计报告一、课程设计任务Linux0.11版本进程调度与系统调用部分代码阅读二、本人分工此任务有两部分:1.进程调度 2.系统调用本人负责的部分是“exit.c程序” 相关代码的阅读及改写。三、设计过程1、该段代码总体设计该程序主要描述了进程(任务)终止和退出的处理事宜。主要包含进程释放、会话(进程组)终止和程序退出处理函数以及杀死进程、终止进程、挂起进程等系统调用函数。还包括进程信号发送函数send_sig()和通知父进程子进程终止的函数tell_father()。 释放进程的函数 release()主要根据指定的任务数据结构(任务描述符)指针,在任务数组中删除指定的进程指针、释放相关内存页并立刻让内核重新调度任务的运行。 进程组终止函数kill_session()通过向会话号与当前进程相同的进程发送挂断进程的信号。 系统调用 sys_kill()用于向进程发送任何指定的信号。根据参数 pid(进程标识号)的数值的不同,该系统调用会向不同的进程或进程组发送信号。程序注释中已经列出了各种不同情况的处理方式。 程序退出处理函数 do_exit()是在系统调用的中断处理程序中被调用的。它首先会释放当前进程的代码段和数据段所占的内存页面,然后向子进程发送终止信号 SIGCHLD。接着关闭当前进程打开的所有文件、释放使用的终端设备、协处理器设备,若当前进程是进程组的领头进程,则还需要终止所有相关进程。随后把当前进程置为僵死状态,设置退出码,并向其父进程发送子进程终止信号。最后让内核重新调度任务的运行。 系统调用 waitpid()用于挂起当前进程,直到 pid 指定的子进程退出(终止)或者收到要求终止该进程的信号,或者是需要调用一个信号句柄(信号处理程序) 。如果pid所指的子进程早已退出(已成所谓的僵死进程) ,则本调用将立刻返回。子进程使用的所有资源将释放。该函数的具体操作也要根据其参数进行不同的处理。2、该段代码中的主要数据结构及说明1.进程运行任务的结构体:struct task_struct /* these are hardcoded - dont touch */ long state; /任务的运行状态(-1不可运行,0可运行(就绪),0已停止) long counter; /任务运行时间计数(递减)(滴答数),运行时间片。 long priority; /运行优先数。任务开始运行时counter = priority,越大运行越长。 long signal; /信号。是位图,每个比特位代表一种信号,信号值=位偏移值+1。 struct sigaction sigaction32; /信号执行属性结构,对应信号将要执行的操作和标志信息。 long blocked; /进程信号屏蔽码(对应信号位图)。 /* various fields */ int exit_code; /任务执行停止的退出码,其父进程会取。/代码段地址。代码长度(字节数)。代码长度 + 数据长度(字节数)。总长度(字节数)。堆栈段地址。 unsigned long start_code,end_code,end_data,brk,start_stack; /进程标识号(进程号)。父进程号。父进程组号。会话号。会话首领。 long pid,father,pgrp,session,leader; unsigned short uid,euid,suid; /用户标识号(用户id)。有效用户id。保存的用户id。 unsigned short gid,egid,sgid; / 组标识号(组id)。有效组id。保存的组id。 long alarm; /报警定时值(滴答数)。/用户态运行时间(滴答数)。系统态运行时间(滴答数)。子进程用户态运行时间。子进程系统态运行时间。进程开始运行时刻。 long utime,stime,cutime,cstime,start_time; unsigned short used_math; /标志:是否使用了协处理器。 /* file system info */ int tty; /进程使用tty的子设备号。-1表示没有使用。 unsigned short umask; /文件创建属性屏蔽位。 struct m_inode * pwd; /当前工作目录i节点结构。 struct m_inode * root; /根目录i节点结构。 struct m_inode * executable; /执行文件i节点结构。 unsigned long close_on_exec; /执行时关闭文件句柄位图标志。 struct file * filpNR_OPEN; /进程使用的文件表结构。/* ldt for this task 0 - zero 1 - cs 2 - ds&ss */ struct desc_struct ldt3; /本任务的局部表描述符。0-空,1-代码段cs,2-数据和堆栈段ds&ss。 /* tss for this task */ struct tss_struct tss; /本进程的任务状态段信息结构。 ;3、流程图1. sys_exit( )流程:1.调用do_exit()完成进程的消亡。2.结束,退出sys_exit开始结束调用do_exit()完成进程的终止2. do_exit( )流程图:YYNY结束该子进程已经处于僵死将子进程的father置为1Y关闭当前进程打开着的所有文件对当前进程工作目录pwd、根目录root以及运行程序的i节点进行同步操作,并分别置空N信号SIGCHLD当前进程有子进程释放当前进程代码段和数据段所占的内存页do_exit开始释放该终端当前进程是领头(leader)进程并且其有控制的终端当前进程是leader 进程当前进程上次使用过协处理器last_task_used_math置空YN终止所有相关进程把当前进程置为僵死状态,并设置退出码3.4、运行结果分析1.输入:无2.输出:无四、问题和体会问题:调用复杂,底层代码晦涩难懂。体会:本人通过对操作系统创建进程部分代码进行查找,给小组成员分配任务,已对操作系统的代码有大概的了解

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论