文档介绍:
大连理工大学
本科实验报告
课程名称: 操作系统实验
学院(系): 计算机科学与技术学院
专业: 计算机科学与技术
班级: 电计
学号:
学生姓名:
年月日
实验项目列表
序号
实验项目名称
学时
成绩
指导教师
预****操作
结果
1
进程管理
2
存储管理
3
磁盘移臂调度
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
总计
学分:
大连理工大学实验报告
学院(系):计算机科学与技术学院专业: 计算机科学与技术班级:电计1301
姓名: 学号: 组: ___
实验时间: 2016.6.3 实验室: 综412 实验台:
指导教师签字: 成绩:
进程管理实验
实验目的
加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练****Linux系统中进程创建与控制有关的系统调用的编程和调试技术。
实验原理和内容
原理:(1)fork成功创建子进程后将返回子进程的进程号,不成功会返回-1
(2)exec 系统调用有一组6个函数,其中示例实验中引用了 execve 系统调用语法:
#include
int execve(const char *path, const char *argv[], const char * envp[]);
path 要装入的新的执行文件的绝对路径名字符串.
argv[] 要传递给新执行程序的完整的命令参数列表(可以为空).
envp[] 要传递给新执行程序的完整的环境变量参数列表(可以为空). Exec执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。exec调用失败,它会返回-1。
内容:
每个进程都执行自己独立的程序,打印自己的pid,每个父进程打印其子进程的pid;
父
子1
子2
父
子1
子2
每个进程都执行自己独立的程序,打印自己的pid,父进程打印其子进程的pid;
编写一个命令处理程序,能处理max(m,n), min(m,n)和 average(m,n,l)这几个命令。(使用exec函数族)
三实验代码及结果
(1)
#include
#include
int main()
{
if(fork() == 0)
{
printf("子进程的pid为:%d.\n",getpid());
if(fork() == 0)
{
printf("二级子进程的pid为:%d.\n",getpid());
}
}
else
{
printf("父进程的pid为%d.\n",getpid());
}
return 0;
}
运行结果:
(2)
#include
#include
int main()
{
if(fork() == 0)
{
printf("子进程的pid为%d.\n",getpid());
}
else
{
if(fork() == 0)
{
printf("子进程2的pid %d.\n",getpid());
}
else
{
printf("父进程的pid为%d.\n\n",getpid());
}
}
return 0;
}
(3)
调用函数为:
include
#include
#include
#define N 10
int main()
{
int i;
char cmdname[N];
printf("$ ");
scanf("%s",cmdname);
if(strcmp(cmdname,"min")==0)
{
execl("/home/lenovo/min","min",NULL);
}
else if(strcmp(cmdname,"max")==0)
{
execl("/home/lenovo/max","max",NULL);
}
else if(strcmp(cmdname,"ave")==0)
{
execl("/home/lenovo/average","ave",NULL);
}
else
printf
内容来自淘豆网www.taodocs.com转载请标明出处.