2022年操作系统实验报告-实验四.docx
《2022年操作系统实验报告-实验四.docx》由会员分享,可在线阅读,更多相关《2022年操作系统实验报告-实验四.docx(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选学习资料 - - - - - - - - - 试验四:进程治理二试验内容 : 1编写一个程序,打印进程的如下信息:进程标识符,父进程标识符,真有用户 ID,有效用户 ID,真有用户组 ID,有效用户组 ID;并分析真有用户 ID 和有效用户 ID 的区分;源代码及结果:真有用户 ID 和有效用户 ID 的区分:真有用户ID :这个 ID 就是我们登陆unix 系统时的身份ID;有效用户ID :定义了操作者的权限;有效用户 ID 是进程的属性, 打算了该进程对文件的拜访权限;2阅读如下程序, 编译并运行, 分析进程执行过程的时间消耗总共消耗的时间和CPU消耗的时间 ,并说明执行结果;再编写一
2、个运算密集型的程序替代grep,比较两次时间的花销;注释程序主要语句;/*process using time */#include#include#include#include#includevoid time_printchar *,clock_t;名师归纳总结 - - - - - - -第 1 页,共 15 页精选学习资料 - - - - - - - - - int mainvoid/ 取得进程运行相关的时间clock_t start,end; struct tms t_start,t_end; start = times&t_start;system “grep the /usr/d
3、oc/*/* /dev/null 2 /dev/null”;/*command /dev/null 的作用是将是 command 命令的标准输出丢弃,而标准错误输出仍是在屏幕上;一般来讲标准输出和标准错误输出都是屏幕,因此错误信息仍是会在屏幕上输出; /dev/null 2 /dev/null 标准输出与标准错误输出都会被丢弃 */ 0 1 2 标准输入 标准输出 错误输出/ 将信息放到该文件 null 中end=times&t_end;time_print“elapsed ”-start; ,endputs “parent times”;”,;time_print“tuser CPUtime
4、_print“tsys CPU,;puts “child times”;time_print“tuser CPU”,;time_print“tsys CPU,;exitEXIT_SUCCESS;void time_printchar *str, clock_t timelong tps = sysconf_SC_CLK_TCK;名师归纳总结 /* 函数 sysconf的作用为将时钟滴答数转化为秒数,_SC_CLK_TCK 为定义每秒钟第 2 页,共 15 页- - - - - - -精选学习资料 - - - - - - - - - 有多少个滴答的宏 */ printf“%s: %6.2f se
5、csn”,str,floattime/tps;程序运行结果:由于该程序运算量很小,故消耗的时间比较少,CPU消耗时间均为0.00secs 不足为奇;而进程的执行时间等于用户 CPU时间和系统 CPU时间加从硬盘读取数据时间之和;密集型的程序替代 grep:名师归纳总结 - - - - - - -第 3 页,共 15 页精选学习资料 - - - - - - - - - 更换为运算密集型的之后就较简单观看出消耗时间的差异;3阅读以下程序,编译并多次运行,观看执行输出次序,说明次序相同或不同的缘由;观看进程 ID ,分析进程 ID 的安排规律;总结 fork 的使用方法;注释程序主要语句;/* fo
6、rk usage */#include#include#includeint mainvoidpid_t child;ifchild=fork=-1perror“fork ”;exitEXIT_FAILURE;else ifchild=0名师归纳总结 puts “in child”;”,getpid;第 4 页,共 15 页printf“tchild pid = %dn- - - - - - -精选学习资料 - - - - - - - - - printf“tchild ppid = %dn”,getppid;exitEXIT_SUCCESS;elseputs “in parent”;”,ge
7、tpid;printf“tparent pid = %dnprintf“tparent ppid = %dn,getppid;exitEXIT_SUCCESS; 程序运行结果:?创建进程 ID 开头时一般随机安排,但假设多次运行,或创建子进程时,会次序安排内存;此外,当父进程终止时,子进程尚未终止,就子进程的父进程 ID 变为 1;fork 函数的实质是一个系统调用和 write 函数类似 ,其作用是创建一个新的进程,当一个名师归纳总结 进程调用它 ,完成后就显现两个几乎一模一样的进程,其中由 fork 创建的新进程被称为子进第 5 页,共 15 页- - - - - - -精选学习资料 -
8、- - - - - - - - 程,而原先的进程称为父进程;子进程是父进程的一个拷贝,即子进程从父进程得到了数据段和堆栈的拷贝, 这些需要安排新的内存;而对于只读的代码段,通常使用共享内存方式进行拜访;4阅读以下程序,编译并运行,等待或者按 主要语句; flag 有什么作用?通过试验说明;/* usage of kill,signal,wait */#include#include#include#includeint flag;C,分别观看执行结果并分析,注释程序void stop; /自定义函数,使flag=0 ,供 signal 调用int mainvoidint pid1,pid2;s
9、ignal3,stop; / signal 依参数 3 指定的信号编号来设置该信号的处理函数whilepid1=fork =-1; /程序等待胜利创建子进程大事的发生ifpid10/当前进程为父进程whilepid2=fork =-1;ifpid20/当前进程为父进程,父进程发出两个中断信号 Kill 子进程flag=1;sleep5;killpid1,16; /将 16 指定的信号传给进程 ID 为 pid1 的进程killpid2,17; /将 17 指定的信号传给进程 ID 为 pid2 的进程wait0; /临时停止目前进程的执行,直到有信号来到或子进程终止wait0;名师归纳总结 p
10、rintf“n parent is killedn”;第 6 页,共 15 页- - - - - - -精选学习资料 - - - - - - - - - exitEXIT_SUCCESS;else/当前进程为子进程,就发送子进程kill 信号,杀死该子进程2flag=1;signal17,stop;printf“n child2 is killed by parentn”;exitEXIT_SUCCESS;else/当前进程为子进程,就发送子进程kill 信号,杀死该子进程1flag=1;signal16,stop;printf“n child1 is killed by parentn”;e
11、xitEXIT_SUCCESS; void stopflag = 0;程序运行结果:名师归纳总结 - - - - - - -第 7 页,共 15 页精选学习资料 - - - - - - - - - 每个进程父进程,子进程都有一个flag,起状态标志作用,flag=1 时,表示进程在运行, flag=0 ,表示进程终止;5编写程序,要求父进程创建一个子进程,使父进程和个子进程各悠闲屏幕上输出一些信息,但父进程的信息总在子进程的信息之后显现;程序源代码:程序运行结果:名师归纳总结 - - - - - - -第 8 页,共 15 页精选学习资料 - - - - - - - - - 6编写程序,要求父
12、进程创建一个子进程,子进程执行shell 命令 find / -name hda* 的功能,子进程终止时由父进程打印子进程终止的信息;执行中父进程转变子进程的优先级;程序源代码:程序运行结果:名师归纳总结 - - - - - - -第 9 页,共 15 页精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 15 页精选学习资料 - - - - - - - - - 7/* 编写程序,要求父进程创建一个子进程,子进程对一个50*50 的字符数组赋值,由父进程转变子进程的优先级,观看不同优先级进程使用 CPU 的时间; */8查阅 Linux
13、系统中 struct task_struct 的定义,说明每项成员的作用;注: search in /usr/srclinux/广义上, 全部的进程信息被放在一个叫做进程掌握块的数据结构中,可以懂得为进程属性的集合;每个进程在内核中都有一个进程掌握块 PCB 来保护进程相关的信息 ,Linux 内核的进程掌握块是 task_struct 结构体; task_struct 是 Linux 内核的一种数据结构,它会被装载到 RAM 里并且包含着进程的信息;每个进程都把它的信息放在 task_struct 这个数据结构里, task_struct 包含了这些内容:1标示符:描述本进程的唯独标示符,用
14、来区分其他进程;2状态:任务状态,退出代码,退出信号等;3优先级:相对于其他进程的优先级;4程序计数器:程序中即将被执行的下一条指令的地址;名师归纳总结 - - - - - - -第 11 页,共 15 页精选学习资料 - - - - - - - - - 5内存指针:包括程序代码和进程相关数据的指针,仍有和其他进程共享的内存块的指 针;6上下文数据:进程执行时处理器的寄存器中的数据;7IO 状态信息:包括显示的I/O 恳求 ,安排给进程的IO 设备和被进程使用的文件列表;8记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号;task_struct,并且可以在include/l
15、inux/ 里找到它;储存进程信息的数据结构叫做全部运行在系统里的进程都以 /proc 系统文件夹查看;task_struct 链表的形式存在内核里;进程的信息可以通过task_struct 一些字段的介绍:1. 调度数据成员1 volatile long states;表示进程的当前状态2 unsigned long flags;进程标志3 long priority;进程优先级;优先级可通过系统调用 sys_setpriorty 转变;4 unsigned long rt_priority;rt_priority 给出实时进程的优先级,rt_priority+1000 给出进程每次猎取 C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 操作系统 实验 报告
限制150内