广西外国语学院信息工程学院
课程设计报告
课程名称:
操作系统
题
目:
专业班级: 13 级软件二班
学
号:
135501228
姓
名: 韦文宁
同组人员:
指导教师:
卢豫开
时
间: 2015 年 6 月 20 号
目 录
1、 进程控制
(1). 创建子进程 create.c
使用系统调用 fork( )创建子进程,当程序运行时,在系统中有一个父进程和一个子进程活动。
请你编译并运行这个 create.c。
gcc create.c -o create.out
提交的实验报告(打印版)内容: 1) 源代码 2) 运行时显示的结果 3) 根据所学的理论知识对源代码及
运行结果分析
第一题:1)代码如下:
#include
int main(){
int pid;
pid = fork();//创建进程
if(pid == 0){
//子进程创建成功
printf("I am the child,my pid is %d!\n",getpid());
printf("I am the parent,my pid is %d,my child pid is %d!\n",getpid(),pid);
}else{
}
}
2)实验结果截图:
3)实验结果分析:创建了一个进程,父进程的 PID 是 13246,子进程的 PID 是 13247
第二题:1)进程控制 processControl.c
多个进程依次执行,使系统调用 fork( )、execl( )、exit( )、wait( ),调用“/bin/echo”下的 echo 命
令,向控制台输出一句,显示是哪个进程。
请你编译并运行这个 processControl.c。
gcc processControl.c -o processControl.out
提交的实验报告(打印版)内容: 1) 源代码 2) 运行时显示的结果 3) 根据所学的理论知识对源代码及
运行结果分析
2)代码如下:
#include
#include
#include
int main(){
int p1,p2,p3,p4,p5,p6,p7;//定义七个进程
int end_p1=0,end_p2=0,end_p3=0,end_p4=0,
end_p5=0,end_p6=0,end_p7=0;//设定进程初始都未结束
int pid, status;
if((p1=fork())==0) {//创建进程 p1
//是子进程则输出
}
execl("/bin/echo","echo","I am P1",0);
wait(&status);//等待终止的子进程
if((p2=fork())==0) {//创建进程 p2
//是子进程则输出
execl("/bin/echo","echo","I am P2",0);
}
if((p3=fork())==0) {//创建进程 p3
//是子进程则输出
execl("/bin/echo","echo","I am P3",0);
}
do{
pid=wait(&status);//等待终止的子进程
if(pid==p2) end_p2=1;//置进程 p2 结束
if(pid==p3) end_p3=1; //置进程 p3 结束
}while(end_p3==0);
if((p4=fork())==0) {//创建进程 p4
//是子进程则输出
}
execl("/bin/echo","echo","I am P4",0);
if((p5=fork())==0)
{//创建进程 p5
//是子进程则输出
execl("/bin/echo","echo","I am P5",0);
}
do{
pid=wait(&status); //等待终止的子进程
if(pid==p4) end_p4=1; //置进程 p4 结束
if(pid==p5) end_p5=1; //置进程 p5 结束
}while(end_p4==0||end_p5==0);
if((p6=fork())==0)
{//创建进程 p6
//是子进程则输出
}
execl("/bin/echo","echo","I am P6",0);
do{
pid=wait(&status); //等待终止的子进程
if(pid==p2) end_p2=1; //置进程 p2 结束
if(pid==p6) end_p6=1; //置进程 p6 结束
}while(end_p2==0||end_p6==0);
if((p7=fork())==0)
{//创建进程 p7
//是子进程则输出
}
execl("/bin/echo","echo","I am P7",0);
wait(&status); //等待终止的子进程
exit(1);
}
2)实验结果截图:
3)实验结果分析:这个程序定义了 7 个进程,但是只显示了 6 个进程,只需在最后一行代码 exit(1)前加
上 sleep(3);即可显示 7 个进程
2、处理机调度
1. 按优先权调度 prioChange.c
这是 1 个按优先权调度算法实现处理机调度的程序,请你编译并运行这个 prioChange.c。运行时按提示给出
进程数量、进名、每个进程的运行时间。
请你编译并运行这个 prioChange.c。
gcc prioChange.c -o prioChange.out
提交的实验报告(打印版)内容: 1) 源代码 2) 运行时显示的结果 3) 根据所学的理论知识及源代码分
析运行结果
第一题:1)代码如下:
#include
#include
#include
#include
#include
#include
#include
//定义进程结构信息
typedef struct pcbStruct
{
int pid;//进程 id
char name[10];
//进程名称
int status;
//进程状态 1-运行 2-就绪 3-等待 0-完成
int type;
// 进程类别 0-系统 进程 1-用户进程
int res;
//进程需要资源的时间点
int totalTime;
//进程占用 cpu 的时间
int runTime;
//进程执行的时间
int count;
//进程运行时间计数器
int prio;
//进程优先级
struct pcbStruct *next;
/*链指针*/
}PCB;
//定义资源结构
typedef struct resStruct{
int pid;//占用进程 id
int free;//是否可用,1:可用 0:不可用