操作系统实验报告_实验四.pdf
《操作系统实验报告_实验四.pdf》由会员分享,可在线阅读,更多相关《操作系统实验报告_实验四.pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-实验四:进程管理二 实验容:1编写一个程序,打印进程的如下信息:进程标识符,父进程标识符,真实用户 ID,有效用户 ID,真实用户组 ID,有效用户组 ID。并分析真实用户 ID 和有效用户 ID 的区别。源代码及结果:真实用户 ID 和有效用户 ID 的区别:真实用户 ID:这个 ID 就是我们登陆 uni*系统时的身份 ID。有效用户 ID:定义了操作者的权限。有效用户 ID 是进程的属性,决定了该进程对文件的权限。2阅读如下程序,编译并运行,分析进程执行过程的时间消耗总共消耗的时间和CPU 消耗的时间,并解释执行结果。再编写一个计算密集型的程序替代 grep,比拟两次时间的花销。注释程
2、序主要语句。/*process using time */#include#include#include#include#include voidtime_print(char*,clock_t);int main(void)/取得进程运行相关的时间 clock_tstart,end;structtmst_start,t_end;start=times(&t_start);system(grep the/usr/doc/*/*/dev/null 2/dev/null);/*mand/dev/null 的作用是将是 mand 命令的标准输出丢弃,而标准错误输出还是在屏幕上。一般来讲标准输出和标
3、准错误输出都是屏幕,因此错误信息还是会在屏幕上输出。/dev/null 2/dev/null 标准输出与标准错误输出都会被丢弃*/-/0 1 2 标准输入标准输出错误输出/将信息放到该文件 null 中 end=times(&t_end);time_print(elapsed,end-start);puts(parent times);time_print(tuser CPU,t_end.tms_utime);time_print(tsys CPU,t_end.tms_stime);puts(child times);time_print(tuser CPU,t_end.tms_cutime)
4、;time_print(tsys CPU,t_end.tms_cstime);e*it(E*IT_SUCCESS);voidtime_print(char*str,clock_t time)longtps=sysconf(_SC_CLK_TCK);/*函数 sysconf()的作用为将时钟滴答数转化为秒数,_SC_CLK_TCK 为定义每秒钟有多少个滴答的宏*/printf(%s:%6.2f secsn,str,(float)time/tps);程序运行结果:因为该程序计算量很小,故消耗的时间比拟少,CPU 消耗时间均为 0.00secs 缺乏为奇。而进程的执行时间等于用户 CPU 时间和系统
5、 CPU 时间加从硬盘读取数据时间之和。密集型的程序替代 grep:更改为计算密集型的之后就较容易观察出消耗时间的差异。3阅读以下程序,编译并屡次运行,观察执行输出次序,说明次序一样或不同的原因;观察进程 ID,分析进程 ID 的分配规律。总结 fork()的使用方法。注释程序主要语句。/*fork usage */#include#include#include-int main(void)pid_t child;if(child=fork()=-1)perror(fork);e*it(E*IT_FAILURE);else if(child=0)puts(in child);printf(t
6、childpid=%dn,getpid();printf(tchildppid=%dn,getppid();e*it(E*IT_SUCCESS);else puts(in parent);printf(tparentpid=%dn,getpid();printf(tparentppid=%dn,getppid();e*it(E*IT_SUCCESS);程序运行结果:?创立进程 ID 开场时一般随机分配,但假设屡次运行,或创立子进程时,会顺序分配存。此外,当父进程完毕时,子进程尚未完毕,则子进程的父进程 ID 变为 1。fork()函数的实质是一个系统调用(和 write 函数类似),其作用是创
7、立一个新的进程,当一个进程调用它,完成后就出现两个几乎一模一样的进程,其中由 fork()创立的新进程被称为子进程,而原来的进程称为父进程。子进程是父进程的一个拷贝,即子进程从父进程得到了数据段和堆栈的拷贝,这些需要分配新的存;而对于只读的代码段,通常使用共享存方式进展。4阅读以下程序,编译并运行,等待或者按C,分别观察执行结果并分析,注释程序主要语句。flag 有什么作用?通过实验说明。/*usage of kill,signal,wait */#include-#include#include#include int flag;void stop();/自定义函数,使 flag=0,供 s
8、ignal 调用 int main(void)int pid1,pid2;signal(3,stop);/signal()依参数 3 指定的信号编号来设置该信号的处理函数 while(pid1=fork()=-1);/程序等待成功创立子进程事件的发生 if(pid10)/当前进程为父进程 while(pid2=fork()=-1);if(pid20)/当前进程为父进程,父进程发出两个中断信号 Kill 子进程 flag=1;sleep(5);kill(pid1,16);/将 16 指定的信号传给进程 ID 为 pid1 的进程 kill(pid2,17);/将 17 指定的信号传给进程 ID
9、为 pid2 的进程 wait(0);/暂时停顿目前进程的执行,直到有信号来到或子进程完毕 wait(0);printf(n parent is killedn);e*it(E*IT_SUCCESS);else /当前进程为子进程,则发送子进程 kill 信号,杀死该子进程 2 flag=1;signal(17,stop);printf(n child2 is killed by parentn);e*it(E*IT_SUCCESS);-else /当前进程为子进程,则发送子进程 kill 信号,杀死该子进程 1 flag=1;signal(16,stop);printf(n child1 i
10、s killed by parentn);e*it(E*IT_SUCCESS);void stop()flag=0;程序运行结果:每个进程父进程,子进程都有一个 flag,起状态标志作用,flag=1 时,表示进程在运行,flag=0,表示进程完毕。5编写程序,要求父进程创立一个子进程,使父进程和个子进程各自在屏幕上输出一些信息,但父进程的信息总在子进程的信息之后出现。程序源代码:程序运行结果:6编写程序,要求父进程创立一个子进程,子进程执行 shell 命令 find/-name hda*的功能,子进程完毕时由父进程打印子进程完毕的信息。执行中父进程改变子进程的优先级。程序源代码:程序运行结
11、果:7/*编写程序,要求父进程创立一个子进程,子进程对一个 50*50 的字符数组赋值,由父进程改变子进程的优先级,观察不同优先级进程使用 CPU 的时间。*/8查阅 Linu*系统中 structtask_struct 的定义,说明每项成员的作用。注:search in/usr/src/linu*-2.6/include/linu*/sched.h 广义上,所有的进程信息被放在一个叫做进程控制块的数据构造中,可以理解为进程属性的集合。每个进程在核中都有一个进程控制块(PCB)来维护进程相关的信息,Linu*核的进程控制块是 task_struct 构造体。task_struct 是 Linu
12、*核的一种数据构造,它会被装载到RAM 里并且包含着进程的信息。每个进程都把它的信息放在 task_struct 这个数据构造里,task_struct 包含了这些容:1标示符:描述本进程的唯一标示符,用来区别其他进程。-2状态:任务状态,退出代码,退出信号等。3优先级:相对于其他进程的优先级。4程序计数器:程序中即将被执行的下一条指令的地址。5存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的存块的指针。6上下文数据:进程执行时处理器的存放器中的数据。7IO 状态信息:包括显示的 I/O 请求,分配给进程的 IO 设备和被进程使用的文件列表。8记账信息:可能包括处理器时间总和,使
13、用的时钟数总和,时间限制,记账号。保存进程信息的数据构造叫做 task_struct,并且可以在 include/linu*/sched.h 里找到它。所有运行在系统里的进程都以 task_struct 链表的形式存在核里。进程的信息可以通过/proc 系统文件夹查看。task_struct 一些字段的介绍:1.调度数据成员(1)volatile long states;表示进程的当前状态(2)unsigned long flags;进程标志(3)long priority;进程优先级。优先级可通过系统调用sys_setpriorty 改变。(4)unsigned long rt_priori
14、ty;rt_priority 给出实时进程的优先级,rt_priority+1000 给出进程每次获取 CPU 后可使用的时间(同样按 jiffies 计)。实时进程的优先级可通过系统调用 sys_sched_setscheduler()改变(见 kernel/sched.c)。(5)long counter;在轮转法调度时表示进程当前还可运行多久。在进程开场运行是被赋为 priority 的值,以后每隔一个 tick(时钟中断)递减 1,减到 0 时引起新一轮调度。重新调度将从run_queue队列选出counter值最大的就绪进程并给予CPU使用权,因此 counter 起到了进程的动态优
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告
限制150内