《linux 进程管理实验.ppt》由会员分享,可在线阅读,更多相关《linux 进程管理实验.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、成都信息工程学院 徐虹第四章第四章 进程管理实验进程管理实验4.1 实验目的 一、加深对进程概念的理解,明确进程和程序的区别 二进一步认识并发执行的实质 三分析进程争用资源的现象,学习解决进程互斥的方法 四了解Linux系统中进程通信的基本原理 4.2 准备知识 4.2.1 基本概念 进程的概念 进程与程序的区别 并发执行的概念 进程互斥的概念 进程通信的基本原理 1成都信息工程学院 徐虹4 4.2.2 .2.2 系统调用系统调用图4-1 系统调用的参数表方式变元表:N 参数1 参数2 参数n (a)直接方式 trap 参数1 参数2 参数n 变元表:N 指针 (b)间接方式 系统调用是一种进
2、入系统空间的办法。通常,在OS的核心中都设置了一组用于实现各种系统功能的子程序,并将它们提供给程序员使用。程序员在需要OS提供某种服务的时候,便可以调用一条系统调用命令,去实现希望的功能,这就是系统调用。因此,系统调用就像一个黑箱子一样,对用户屏蔽了操作系统的具体动作而只是提供了调用功能的接口。2成都信息工程学院 徐虹4 4.2.3 .2.3 相关函数相关函数 一fork()函数:用于创建一个新进程(子进程)int fork();pid=fork();if(pid 0)printf(The parent process is running now!n);exit(0);4成都信息工程学院 徐
3、虹图图3-2 3-2 父进程和子进程的内存映像父进程和子进程的内存映像用户内存区 父进程的vm_arce_struct vm start vm start count=2 vm start vm start count=2 子进程的vm_arce_struct 子进程数据区 子进程堆栈区 父进程数据区 父进程堆栈区 共享正文区 5成都信息工程学院 徐虹二wait()函数:用来控制父进程与子进程的同步。#include#include (pid_t)wait(int*statloc);三exit()函数:进程结束最常调用的函数#include void exit(int status);四kil
4、l()函数:用于删除执行中的程序或者任务 kill(int PID,int IID);6成都信息工程学院 徐虹五五signal()signal()函数函数signal()函数是允许调用进程控制软中断信号的处理#include int sig;void(*func)();signal(sig,function);7成都信息工程学院 徐虹信号信号功能功能值值SIGHUPSIGHUP挂起挂起1 1SIGINTSIGINT键盘中断,键盘按键盘中断,键盘按DeleteDelete键或键或BreakBreak键键2 2SIGQUITSIGQUIT键盘按键盘按QuitQuit键键3 3SIGILLSIGIL
5、L非法指令非法指令4 4SIGTRAPSIGTRAP跟踪中断跟踪中断5 5SIGIOTSIGIOTIOTIOT指令指令6 6SIGBUSSIGBUS总线错总线错7 7SIGFPESIGFPE浮点运算溢出浮点运算溢出8 8SIGKILLSIGKILL要求终止进程要求终止进程9 9SIGUSR1SIGUSR1用户定义信号用户定义信号#1#11010SIGSEGVSIGSEGV段违法段违法1111SIGUSR2SIGUSR2用户定义信号用户定义信号#2#21212SIGPIPESIGPIPE向没有读进程的管道上写向没有读进程的管道上写1313SIGALRMSIGALRM定时器告警,时间到定时器告警,
6、时间到1414SIGTERMSIGTERMkillkill发出的软件结束信号发出的软件结束信号1515SIGCHLDSIGCHLD子进程死子进程死1717SIGCONTSIGCONT若已停止则继续若已停止则继续1818SIGPWRSIGPWR电源故障电源故障30308成都信息工程学院 徐虹六六pipe()pipe()函数函数pipe()函数用于创建一个管道。其调用格式为:#include pipe(int fp2);9成都信息工程学院 徐虹4 4.3.1 .3.1 编制实现软中断通信的程序编制实现软中断通信的程序 Child process 1 is killed by parent!Chil
7、d process 2 is killed by parent!Parent process is killed!多运行几次编写的程序,简略分析出现不同结果的原因。4 4.3 .3 实验内容实验内容10成都信息工程学院 徐虹4 4.3.2 .3.2 编制实现进程的管道通信的程序编制实现进程的管道通信的程序 使用系统调用pipe()建立一条管道线,两个子进程分别向管道写一句话:Child process 1 is sending a message!Child process 2 is sending a message!而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求:父进程先
8、接收子进程P1发来的消息,然后再接收子进程P2发来的消息。11成都信息工程学院 徐虹4 4.4 .4 实验指导实验指导 4.4.1 进程的软中断通信 附:算法流程图、源代码、运行结果4.4.2 进程的管道通信 附:算法流程图、源代码、运行结果12成都信息工程学院 徐虹4 4.4.1 .4.1 进程的软中断通信进程的软中断通信参考程序源代码:#include#include#include#include 13成都信息工程学院 徐虹图图4 4-3 -3 软中断通信程序流程图软中断通信程序流程图14成都信息工程学院 徐虹int wait_flag;void stop();main()int pid
9、1,pid2;/定义两个进程号变量 signal(3,stop);/或者 signal(14,stop);while(pid1=fork()=-1);/若创建子进程1不成功,则空循环15成都信息工程学院 徐虹 if(pid1 0)/子进程创建成功,pid1为进程号 while(pid2=fork()=-1);/创建子进程2 if(pid2 0)wait_flag=1;sleep(5);/父进程等待5秒 kill(pid1,16);/杀死进程1 16成都信息工程学院 徐虹 kill(pid2,17);/杀死进程2 wait(0);/等待第1个子进程1结束的信号 wait(0);/等待第2个子进程
10、2结束的信号 printf(n Parent process is killed!n);17成都信息工程学院 徐虹 exit(0);/父进程结束 else wait_flag=1;signal(17,stop);/等待进程2被杀死的中断号17 printf(n Child process 2 is killed by parent!n);18成都信息工程学院 徐虹 exit(0);else wait_flag=1;signal(16,stop);/等待进程1被杀死的中断号16 printf(n Child process 1 is killed by parent!n);exit(0);19成
11、都信息工程学院 徐虹 void stop()wait_flag=0;20成都信息工程学院 徐虹程序运行结果:Child process 1 is killed by parent!Child process 2 is killed by parent!Parent process is killed!Child process 2 is killed by parent!Child process 1 is killed by parent!Parent process is killed!21成都信息工程学院 徐虹4 4.4.2 .4.2 进程的管道通信进程的管道通信参考程序源代码:#inc
12、lude#include#include int pid1,pid2;/定义两个进程变量 22成都信息工程学院 徐虹图图4 4-4-4 管道通信程序流程图管道通信程序流程图23成都信息工程学院 徐虹main()int fd2;char OutPipe100,InPipe100;/定义两个字符数组 pipe(fd);/创建管道 while(pid1=fork()=-1);/如果进程1创建不成功,则空循环 24成都信息工程学院 徐虹 if(pid1=0)/如果子进程1创建成功,pid1为进程号 lockf(fd1,1,0);/锁定管道 sprintf(OutPipe,n Child process
13、 1 is sending message!n);/给Outpipe赋值 write(fd1,OutPipe,50);/向管道写入数据 25成都信息工程学院 徐虹 sleep(5);/等待读进程读出数据 lockf(fd1,0,0);/解除管道的锁定 exit(0);/结束进程1 26成都信息工程学院 徐虹else while(pid2=fork()=-1);/若进程2创建不成功,则空循环 if(pid2=0)lockf(fd1,1,0);sprintf(OutPipe,n Child process 2 is sending message!n);write(fd1,OutPipe,50);
14、sleep(5);27成都信息工程学院 徐虹 lockf(fd1,0,0);exit(0);else wait(0);/等待子进程1 结束 read(fd0,InPipe,50);/从管道中读出数据 28成都信息工程学院 徐虹 printf(%sn,InPipe);/显示读出的数据 wait(0);/等待子进程2 结束 read(fd0,InPipe,50);printf(%sn,InPipe);exit(0);/父进程结束 29成都信息工程学院 徐虹 程序运行结果:Child process 1 is sending message!Child process 2 is sending message!30