资源描述:
《兰州大学操作系统实验五详细答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验五实验名称:进程管理实验报告:实验要求:cat/etc/group(查看组信息)1.编写一个程序,打印进程的如下信息:进程标识符,父进程标识符,真实用户ID,有效用户ID,真实用户组ID,有效用户组ID。并分析真实用户ID和有效用户ID的区别。代码如下:#include#includeintmain(){printf("***********");printf("Thisistheprocess");printf("pid=%d",getpid
2、());printf("ppid=%d",getppid());printf("uid=%d",getuid());printf("euid=%d",geteuid());printf("gid=%d",getgid());printf("egid=%d",getegid());}真实用户ID和有效用户ID的区别:真实用户ID:这个ID就是我们登陆unix系统时的身份ID。有效用户ID:定义了操作者的权限。有效用户ID是进程的属性,决定了该进程对文件的访问权限.2.阅读如下程序
3、:/*processusingtime*/#include#include#include#include#includevoidtime_print(char*,clock_t);intmain(void){clock_tstart,end;structtmst_start,t_end;start=times(&t_start);system(“grepthe/usr/doc/*/*>/dev/n
4、ull2>/dev/null”);//>将信息放到该文件null中end=times(&t_end);//012标准输入标准输出错误输出time_print(“elapsed”,end-start);puts(“parenttimes”);time_print(“tuserCPU”,t_end.tms_utime);time_print(“tsysCPU”,t_end.tms_stime);//获得执行system()的子进程IDputs(“childtimes”);time_print(“
5、tuserCPU”,t_end.tms_cutime);time_print(“tsysCPU”,t_end.tms_cstime);exit(EXIT_SUCCESS);}voidtime_print(char*str,clock_ttime){longtps=sysconf(_SC_CLK_TCK);/*函数sysconf()的作用为将时钟滴答数转化为秒数,_SC_CLK_TCK为定义每秒钟有多少个滴答的宏*/printf(“%s:%6.2fsecs”,str,(float)time/t
6、ps);}编译并运行,分析进程执行过程的时间消耗(总共消耗的时间和CPU消耗的时间),并解释执行结果。再编写一个计算密集型的程序替代grep,比较两次时间的花销。注释程序主要语句。因为该程序计算量很小,故消耗的时间比较少,均为0.00secs不奇怪。而更改为计算密集型的之后就较容易观察出消耗时间的差异,如图所示。1.阅读下列程序:/*forkusage*/#include#include#includeintmain(void){pid_t
7、child;if((child=fork())==-1{perror(“fork”);exit(EXIT_FAILURE);}elseif(child==0){puts(“inchild”);printf(“tchildpid=%d”,getpid());//取得目前进程的进程IDprintf(“tchildppid=%d”,getppid());//取得目前进程的父进程IDexit(EXIT_SUCCESS);}else{puts(“inparent”);printf(“tpare
8、ntpid=%d”,getpid());printf(“tparentppid=%d”,getppid());}exit(EXIT_SUCCESS);}编译并多次运行,观察执行输出次序,说明次序相同(或不同)的原因;观察进程ID,分析进程ID的分配规律。总结fork()的使用方法。注释程序主要语句。创建进程ID开始时一般随机分配,但若多次运行,或创建子进程时,会顺序分配内存。此外,当父进程结束时,子进程尚未结束,则子进程的父进程ID变为1,即initfork()的使用方法