操作系统设计的设计实验报告书_实验四

操作系统设计的设计实验报告书_实验四

ID:47166656

大小:808.68 KB

页数:19页

时间:2019-08-15

操作系统设计的设计实验报告书_实验四_第1页
操作系统设计的设计实验报告书_实验四_第2页
操作系统设计的设计实验报告书_实验四_第3页
操作系统设计的设计实验报告书_实验四_第4页
操作系统设计的设计实验报告书_实验四_第5页
资源描述:

《操作系统设计的设计实验报告书_实验四》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、实验四:进程管理(二)实验内容:1.编写一个程序,打印进程的如下信息:进程标识符,父进程标识符,真实用户ID,有效用户ID,真实用户组ID,有效用户组ID。并分析真实用户ID和有效用户ID的区别。源代码及结果:真实用户ID和有效用户ID的区别:真实用户ID:这个ID就是我们登陆unix系统时的身份ID。有效用户ID:定义了操作者的权限。有效用户ID是进程的属性,决定了该进程对文件的访问权限。2.阅读如下程序,编译并运行,分析进程执行过程的时间消耗(总共消耗的时间和CPU消耗的时间),并解释执行结果。

2、再编写一个计算密集型的程序替代grep,比较两次时间的花销。注释程序主要语句。/*processusingtime*/#include#include#include#include#includevoidtime_print(char*,clock_t);intmain(void){//取得进程运行相关的时间clock_tstart,end;structtmst_start,t_end;start=

3、times(&t_start);system(“grepthe/usr/doc/*/*>/dev/null2>/dev/null”);/*command>/dev/null的作用是将是command命令的标准输出丢弃,而标准错误输出还是在屏幕上。 一般来讲标准输出和标准错误输出都是屏幕,因此错误信息还是会在屏幕上输出。>/dev/null2>/dev/null标准输出与标准错误输出都会被丢弃*///012标准输入标准输出错误输出//>将信息放到该文件null中end=times(&t_end);ti

4、me_print(“elapsed”,end-start);puts(“parenttimes”);time_print(“tuserCPU”,t_end.tms_utime);time_print(“tsysCPU”,t_end.tms_stime);puts(“childtimes”);time_print(“tuserCPU”,t_end.tms_cutime);time_print(“tsysCPU”,t_end.tms_cstime);exit(EXIT_SUCCESS);}voi

5、dtime_print(char*str,clock_ttime){longtps=sysconf(_SC_CLK_TCK);/*函数sysconf()的作用为将时钟滴答数转化为秒数,_SC_CLK_TCK为定义每秒钟有多少个滴答的宏*/printf(“%s:%6.2fsecs”,str,(float)time/tps);}程序运行结果:因为该程序计算量很小,故消耗的时间比较少,CPU消耗时间均为0.00secs不足为奇。而进程的执行时间等于用户CPU时间和系统CPU时间加从硬盘读取数据时间之和

6、。密集型的程序替代grep:更改为计算密集型的之后就较容易观察出消耗时间的差异。1.阅读下列程序,编译并多次运行,观察执行输出次序,说明次序相同(或不同)的原因;观察进程ID,分析进程ID的分配规律。总结fork()的使用方法。注释程序主要语句。/*forkusage*/#include#include#includeintmain(void){pid_tchild;if((child=fork())==-1){perror(“fork”);

7、exit(EXIT_FAILURE);}elseif(child==0){puts(“inchild”);printf(“tchildpid=%d”,getpid());printf(“tchildppid=%d”,getppid());exit(EXIT_SUCCESS);}else{puts(“inparent”);printf(“tparentpid=%d”,getpid());printf(“tparentppid=%d”,getppid());}exit(EXIT_

8、SUCCESS);}程序运行结果:(?)创建进程ID开始时一般随机分配,但若多次运行,或创建子进程时,会顺序分配内存。此外,当父进程结束时,子进程尚未结束,则子进程的父进程ID变为1。fork()函数的实质是一个系统调用(和write函数类似),其作用是创建一个新的进程,当一个进程调用它,完成后就出现两个几乎一模一样的进程,其中由fork()创建的新进程被称为子进程,而原来的进程称为父进程。子进程是父进程的一个拷贝,即子进程从父进程得到了数据段和堆栈的拷贝,这些需要分

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。