中原工学院操作系统实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机操作系统实验报告
专业:网络工程
班级: 162班
学号:
学生:
指导教师:
2019/06/06
目录
实验一进程控制 (3)
一、实验目的: (3)
二、实验平台: (4)
三、实验容: (4)
实验结果 (5)
单线程执行结果: (7)
实验总结 (8)
实验二进程同步 (8)
一、实验目的: (8)
二、实验平台: (8)
三、实验容: (9)
执行结果 (12)
实验总结 (12)
实验三添加核模块 (12)
一、实验目的: (12)
二、实验平台: (13)
三、实验容: (13)
readprocess.c代码: (14)
Makefile代码: (15)
processinfo文件源代码: (17)
Makefile文件源代码: (18)
实验总结 (20)
实验四统计操作系统缺页次数 (20)
实验目的 (20)
实验容 (21)
实验过程 (21)
1. 修改核源代码,添加统计变量 (21)
2. 配置编译新核 (23)
3. 编译核和模块 (24)
4. 安装新核模块和新核 (24)
5. 编写读取pfcount值的模块代码 (25)
6.编译、构建核模块 (26)
7.加载模块到核中 (26)
实验总结 (27)
实验五 EXT4文件系统结构分析 (27)
一、实验目的: (27)
二、实验平台: (27)
三、实验容: (27)
实验总结 (31)
实验一进程控制
一、实验目的:
加深对进程概念的理解,明确进程和程序的区别;掌握Linux操作系统的进程创建和终止操作,体会父进程和子进程的关系及进程状态的变化;进一步认识并发执行的实质,编写并发程序。
二、实验平台:
虚拟机:VMWare9以上
操作系统:Ubuntu12.04以上
编辑器:Gedit | Vim
编译器:Gcc
三、实验容:
(1)编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示“身份信息”:父进程显示“Parent process! PID=xxx1 PPID=xxx2”;子进程显示“Childx process! PID=xxx PPID=xxx”。多运行几次,观察记录屏幕上的显示结果,并分析原因。
说明:
xxx1为进程号,用getpid()函数可获取进程号;
xxx2为父进程号,用getppid()函数可获取父进程号;
Childx中x为1和2,用来区别两个子进程;
wait()函数用来避免父进程在子进程终止之前终止。
程序源码:
#include
#include
#include
#define NUM 2
int main(void)
{
pid_t pid1,pid2;
if((pid1=fork())<0){
printf("创建进程1失败");
}else{
if(pid1==0){
//子进程1执行
printf("Child1 process: ");
printf("PID=%d PPID=%d \n",getpid(),getppid());
sleep(2);
}else{
if((pid2=fork())<0){
printf("创建进程2失败");
}else{
if(pid2==0){ //子进程2执行
printf("Child2 process: ");
printf("PID=%d PPID=%d \n",getpid(),getppid());
}
else{
//父进程执行
wait();
wait();
printf("Parent process: ");
printf("PID=%d PPID=%d \n",getpid(),getppid());
exit(0);
}
}
}
}
}
实验结果
whtcmisswhtcmiss-VirtualBox:~/Desktop$ gcc test1.c -o test
whtcmisswhtcmiss-VirtualBox:~/Desktop$ ./test
Child2 process: PID=2527 PPID=2525
Child1 process: PID=2526 PPID=2525
Parent process: PID=2525 PPID=2127
whtcmisswhtcmiss-VirtualBox:~/Desktop$ ./test
Child2 process: PID=2530 PPID=2528
Child1 process: PID=2529 PPID=2528
Parent process: PID=2528 PPID=2127
whtcmisswhtcmiss-VirtualBox:~/Desktop$ ./test
Child2 process: PID=2533 PPID=2531
Child1 process: PID=2532 PPID=2531
Parent process: PID=2531 PPID=2127
实验结果分析:
第一次程序运行结果,两个子进程的PPID都是2525,是由同一个进程创建。而父进程PID是2525,父进程PPID是2127,说明父进程也是一系统进程的子进程。
第二次程序运行结果,父进程PID是2528,PPID是2127,说明父进程是由同一进程创建的,父进程也是以子进程的方式存在,且进程ID是逐渐递增的。
(2)fork()和exec()系列函数能同时运行多个程序,利用上述函数将下面单进程顺序执行的程序single.c改造成可并发执行3个进程的程序multi_process.c;并用time命令获取程序的执行时间,比较单进程和多进程运行时间,并分析原因。
//single.c
#include
#define NUM 5
int main(void)
{
void print_msg(char *m);
print_msg("Good ");
print_msg("Morning ");
print_msg("2\n");
return 0;
}
void print_msg(char *m)
{
int i;
for(i = 0; i printf("%s",m); fflush(stdout); sleep(1); } } 编译运行方法: #gcc single.c –o single