单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,9,章相关说明,说明:(1)实验相关ppt内容选自操作系统课程设计的核心实验。,第9章 系统调用及进程控制实验,提纲,提纲,实验目的,理解BIOS中断调用、系统调用以及C语言标准库函数的联系和区别;,理解Linux API和系统调用的区别;,熟悉Linux下进程控制相关的系统调用,并熟练使用相关函数完成进程控制的操作;,学习写makefile文件,提纲,实验内容,1登录Linux系统;,2在home目录下建立以自己学号为文件名的文件;,3拷贝实验提供源代码至自己建立的文件;,4阅读关于系统调用fork,exec,wait,exit,pipe等函数(可通过man函数进行查询);,5编写makefile,用make编译源代码中fork.c,pipe.c,并填写相关实验报告;,6运行上一步生成的可执行文件,观察结果及进程,并填写实验报告相关内容;,7查阅资料,掌握信号和进程调度阅读signal.c代码,编译并运行,另开终端,用ps和kill命令终止进程;,提纲,实验算法(系统调用),操作系统的主要功能是为应用程序的运行创建良好的环境,为了达到这个目的,内核提供一系列具备预订功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序。,Linux提供系统调用,让用户进程能够调用内核函数。这些系统调用允许用户操纵进程、文件和其他系统资源,从用户级切换到内核级。也就是说,系统调用的执行会引起特权级的切换,是一种受约束的、为切换到保护核心的“函数调用”。普通函数调用不会引起特权级的转换,一般不受约束。,实验算法(BIOS中断调用),BIOS中断服务程序实质上是微机系统中软件与硬件之间的一个可编程接口,主要用于程序软件功能与微机硬件之间连接。BIOS中断服务“封装”了许多系统底层的细节,使得一些用户程序也能够使用BIOS功能。,实验算法(C语言标准库),C语言标准库是利用系统调用来实现的,它将依赖于系统的系统调用封装起来,而对开发者透明。系统调用的实现在内核完成,而C语言标准库则在用户态实现,标准库函数完全运行在用户空间。,实验算法(API和系统调用的区别),实验算法(makefile文件),makefile文件:一个工程中的源文件可能不计其数,其按类型、功能、模块分别放在若干目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。makefile就像一个shell脚本一样,其中也可以执行操作系统的命令。Makefile文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并链接生成可执行文件以及定义文件间的依赖关系。,make是一个命令工具,即解释makefile中指令的命令工具,一般来说,大多数IDE都有这个命令,如Delph的make,VC的nmake,GNU的make。,makefile带来的好处就是:“自动化编译”,程序一旦写好,只需要一个make命令。整个工程自动编译,极大提高了软件开发的效率。,实验算法(文件描述符),实验算法(输入输出重定向),实验算法(进程通信机制管道),管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;管道只能用于父子进程或者兄弟进程之间(具有“亲缘”关系的进程);管道单独构成一种独立的文件系统:管道对于管道两端的进程而言就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,并且只存在于内存中。,提纲,实验示例(函数示例),pid_t fork(void);/pid_t 是一个宏定义,其实质是int,返回值:若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;出错返回-1。,int pipe(int fd2),函数传入值 fd2:管道的两个文件描述符,fd0是管道读出端,fd1是管道写入端,返回值:成功返回 0,失败返回-1。,功能:创建一个管道,把管道的读和写文件描述符放到数组fildes中,fildes0元素作为管道的输入描述符,fildes1元素作为管道的输出描述符。,int dup2(int oldfd,int targetfd),dup2函数允许调用者规定一个有效描述符oldfd和目标描述符的targetfd。dup2函数成功返回时,目标描述符(dup2函数的第二个参数)将变成源描述符(dup2函数的第一个参数)的复制品,换句话说,两个文件描述符现在都指向同一个文件,并且是函数第一个参数指向的文件。,功能:把oldfd文件描述符复制到targetfd,使oldfd和targetfd指向同一文件。,