上传者: 43934844
|
上传时间: 2025-10-14 17:10:57
|
文件大小: 51KB
|
文件类型: DOC
操作系统实验报告----进程管理
本实验报告的主要目的是掌握 Linux 中进程的创建方法及执行情况,深入理解进程、进程树等概念,并掌握系统调用 exit() 和 _exit() 的使用。此外,还将分析进程竞争资源的现象,并学习解决进程互斥的方法。
一、进程管理实验目的
1. 掌握 Linux 中进程的创建方法及执行情况
2. 加深对进程、进程树等概念的理解
3. 掌握 Linux 中如何加载子进程自己的程序
4. 掌握父进程通过创建子进程完成某项任务的方法
5. 掌握系统调用 exit() 和 _exit() 的使用
6. 分析进程竞争资源的现象,学习解决进程互斥的方法
二、实验内容
(一)进程的创建
1. 编写一段程序,使用系统调用 fork() 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符。
(二)进程树的创建
1. 运行以下程序,分析程序执行过程中产生的进程情况。
#include
main(){
int p,x;
p=fork();
if (p>0)
fork();
else{
fork();
fork();
}
sleep(15);
}
实验步骤:
1. 编译连接:gcc –o forktree forktree.c
2. 后台运行:./forktree &
3. 使用 pstree –h 查看进程树
运行结果:
├─gnome-terminal─┬─bash─┬─forktree─┬─forktree─┬─forktree───forktree
│ │ │ │ └─forktree
│ │ │ └─forktree
│ │ └─pstree
分析:程序运行,系统首先创建一个进程 forktree,执行到 p=fork() 创建一个子进程 forktree,子进程获得处理机优先执行,父进程等待;执行 else,当执行到第一个 fork() 函数时,子进程创建了一个进程 forktree,称之为孙进程,孙进程获得处理机往下执行,子进程等待;执行到第二个 fork() 函数时,孙进程又创建一个进程 forktree,称之为重孙进程,重孙进程很快执行完,将处理机还给孙进程,孙进程很快执行完,将处理机还给子进程;子进程继续往下执行,执行到第二个 fork() 函数,又创建一个进程 forktree,称之为第二孙进程,并获得处理机执行,此进程很快执行完,将处理机还给子进程,子进程也很快执行完,将处理机还给父进程,父进程 P>0 执行 if 语句,运行 fork() 函数,又创建一个进程 forktree,称之为第二子进程,此进程获得处理机执行很快运行完,将处理机还给父进程,父进程运行 sleep(15) 语句,休眠 15 秒,用 pstree 命令查询进程树。
(三)进程之间的关系
1. 运行程序,分析运行结果。
#include
main(){
int p,x,ppid,pid;
x=0;
p=fork();
if(p>0)
{
printf("parent output x=%d\n",++x);
ppid=getpid();
printf("This id number of parent is:ppid=%d\n",ppid);
}
else
{
printf("child output x=%d\n",++x);
pid=getpid();
printf("This id number of child is:pid=%d\n",pid);
}
}
运行结果:
Parent output x=1
This id number of parent is:ppid=3110
Child output x =1
This is number of child is:pid=3111
分析:fork 创建进程的时候子进程与父进程共享代码区,子进程复制父进程的数据区,所以,两个进程中的数据互不影响都是 1。
(四)进程的竞争资源
1. 编写一个死循环程序,观察进程的行为。
#include
main(){
while(1){
}
}
实验步骤:
1. 编译:gcc loop.c –o loop
2. 运行:./loop &
本实验报告旨在让学生掌握 Linux 中进程的创建方法及执行情况,深入理解进程、进程树等概念,并掌握系统调用 exit() 和 _exit() 的使用。此外,还将分析进程竞争资源的现象,并学习解决进程互斥的方法。