实验一:进程与线程创建控制程序
课程名称:操作系统原理
项目名称:进程与线程创建控制程序
实验(实训)类型:设计性实验
实验(实训)课时:2
实验(实训)目的及内容
目的:
通过本实验,使学生掌握创建进程的方法。进一步加深对操作系统基本概念的理解,学会常用操作系统的使用。深刻理解线程和进程的概念,掌握线程与进程在组成成分上的差别,以及与其相适应的通信方式和应用目标。
要求:
Linux系统的fork()保持了UNIX的经典语义,被创建进程具有独立于父进程的地址空间,二者之间的通信通常可以采用pipe机制。Clone()是Linux 系统特有的系统调用,可以通过参数确定父子之间是否共享存储空间等资源,在地址空间等资源共享的情况下clone()实质上相当于创建了一个轻进程或线程,这是clone()的通常用法。实际在Linux系统中,fork()以及用户级线程pthread都是基于clone()实现的。
具体要求:
- 编写一C语言程序,实现在程序运行时通过系统调用fork(创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”
- 多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。记下这种情况,试简单分析其原因。
[内容与步骤]
修改程序,利用nice(改变各进程的优先级,观察不同情况下进程调度效果的区别。
修改程序,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,多次反复运行改进后的程序,观察并记录运行结果。
内容:
以Linux系统进程和线程机制为背景,掌握fork()和clone()系统调用的形式和功能,以及与其相适应的高级通信方式。由fork()派生的子进程之间通过pipe通信,由clone()创建的线程之间通过共享内存通信,对于后者需要考虑互斥问题。
以生产者-消费者问题为例,通过实验理解fork()和clone()两个系统调用的区别。程序要求能够创建4个进程或线程,其中包括两个生产者和两个消费者,生产者和消费者之间能够传递数据。
步骤:
1.用pipe( )创建-一个管道文件,然后用fork( )创建2个生产进程和2个消费进程,它们之间通过pipe( )传递信息。
2.用elone( )创建4个轻进程(线程),用参数指明共享内存等资源,通过共享内存模拟生产者一消费者问题,利用pthread_mutex_ lock( ), pthread_mutex_unlock( )等函数实现对共享存储区访问的互斥。
[主要器材与工具]
Windows xp、VMware、 I inux系统