好文档 - 专业文书写作范文服务资料分享网站

山大操作系统实验 1

天下 分享 时间: 加入收藏 我要投稿 点赞

v1.0 可编辑可修改 操作系统原理实验报告—— 实验一

张咪 软件工程四班

一、 实验目的

加深对于进程并发执行概念的理解。实践并发进/线程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux系统中进/线程创建与控制有关的系统调用的编程和调试技术。

二、 实验要求

编写一个多进程并发执行程序。父进程每隔3秒重复建立两个子进程,首先创建的让其执行ls命令,之后创建执行让其执行ps命令,并控制ps命令总在ls命令之前执行。

三、实验软硬件环境

实验环境均为Linux操作系统,开发工具为gcc和g++。

四、实验思路

调用fock()创建子进程。创建键盘中断信号后,使用pause()可以暂停子进程执行,继续创建新的子进程。子进程并发执行子进程可以首先通过键盘中断信号唤醒子进程。通过exec()调用族装入一个新的执行程序。在建立子进程2并且唤醒子进程1后子进程sleep(seconds = 5)。这样就可以先执行ps后执行ls。。最后就是父进程的结束,程序结束。

五、实验模型

pid1=fork() pid1=0子进程1 执行ps指令 pid1>0父进程 pid2=fork() pid1<0错误 pid2=0子进程b 执行ls pid2>0父进程 每隔三秒重复建立两pid2<0错误 1

v1.0 可编辑可修改 六、调试排错

1、首先遇到的问题是,对linux的操作不熟悉,不太明白makefile怎么使用,直接用了gcc

2、在创建多个子进程上遇到了问题,在fock()后又直接跟了一个fork(),这样创建的子进程是子进程的子进程,而不是父进程创建的第二个子进程。所以应该在else语句块后面,也就是主进程执行段继续创建。一般情况下,fork()按如下规则编程: main()

{ pid_t pid; pid=fork();

if(pid<0)

{

n\

2

v1.0 可编辑可修改 } } } }

}return (EXIT_SUCCESS); }

#include #include<> #include<> #include<> #include<> #include<>

typedef void(*sighandler_t)(int);

void sigcat(){printf(\

3

山大操作系统实验 1

v1.0可编辑可修改操作系统原理实验报告——实验一张咪软件工程四班一、实验目的加深对于进程并发执行概念的理解。实践并发进/线程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux系统中进/线程创建与控制有关的系统调用的
推荐度:
点击下载文档文档为doc格式
8p5g06f9hj6msol1o4w75dq8n1sig300uct
领取福利

微信扫码领取福利

微信扫码分享