linux用pv实现互斥进程,第3次小课.Linux进程与线程.ppt

第3次小课.Linux进程与线程

操作系统 华软软件学院软件工程系 P* 第三次小课 Linux进程 与线程 华软软件工程系 创建进程实验课主要内容 本周大课内容回顾 通过实验理解Linux进程家族树、父子进程简单同步的实现 主要内容 第一部分 本周大课 内容回顾 同步与互斥 大课回顾 什么是临界资源?进程同步和互斥的定义? 进程死锁的概念? 用PV原语实现互斥的一般方法?信号量初值? 用PV原语实现同步的一般方法?信号量初值? 第二部分 Linux进程 实验 Linux进程 简单的进程同步 主要内容 实验1 Linux进程家族树 文件名3-1.c:看程序写结果。 #include main(){ fork(); printf(“it will be printed twice\n”); } 要求: 增加1个fork()、2个fork()、多个fork()的结果会怎样?并说明原因,找出规律。 在fork()语句后添加如下2条语句,结果将如何? printf(“get the child pid: %d\n”,getpid()); printf(“get the parent pid: %d\n”,getppid()); 3-1.c #include main(){ fork(); printf(“it will be”); printf(“get the child pid: %d\n”,getpid()); printf(“get the parent pid: %d\n”,getppid()); } init进程 init进程是系统所有进程的起点,内核在完成内核引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init进程是所有进程的发起者和控制者。因为在任何基于UNIX的系统(比如 Linux)中,它都是第一个运行的进程,所以init进程的编号(Process ID,PID)永远是1。如果init出现了问题,系统的其余部分也就随之不可用。 init进程 init进程有两个作用: ① 扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程都会以init作为它们的父进程。快速执行一下“ps –af”或者top或者gnome-system-monitor命令,可以列出当前运行的进程来。 ② 在进入某个特定的运行级别(Runlevel)时运行相应的程序,以此对各种运行级别进行管理。 实验2 父子进程同步实验 文件名3-2.c:实现子进程先输出”child proc”,父进程后输出” parent proc”。 要求 请总结实现简单的父子进程同步的一般方法 3-2.c #include #include main(){ int p1; while((p1=fork())==-1); if(p1>0) { wait(0); printf("parent proc\n"); } else { printf("child proc\n"); exit(0); printf(“test1\n"); } printf(“test2\n"); } Linux中父子进程同步 相关系统调用 1)进程终止 void exit(stat); 主要任务:自我终止,将进程状态变为”僵死”状态,等待父进程用wait系统调用来收集。 一般参数可设为0,即exit(0) exit():在执行该函数时,进程会检查文件打开情况,清理I/O缓存,如果缓存中有数据,就会将它们写入相应的文件,这样就防止了文件数据的丢失!然后终止进程。 Linux中父子进程同步 _exit():在执行该函数时,并不清理标准输入输出缓存,而是直接清除内存空间,当然也就把文件缓存中尚未写入文件的数据给销毁了。由此可见,使用exit()函数更加安全。 父进程等待子进程终止 pid_t wait([int *stat_addr,] 0) 一般参数可设为0,即wait(0) 实验3 子进程映像的重新装入 创建一进程child.c,功能是输出”I am a child.”,再创建一个父进程3-3.c加载该子进程 。 要求 理解子进程映像的重新装入。 Linux中子进程映像的重新装入 Linux提供了一组系统调用exec函数,主要功能是将指定的可执行文件加载到指定的进程映像中,覆盖该进程映像中原有的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值