3.执行一个文件的调用用C程序实现如下:#includemain(){charcomand[32];char*prompt=“$”;while(printf(“%s”,prompt),gets(command)!=NULL){if(fork()==0)execlp(command,command,(char*)0);elsewait(0);}}五、Unix进程调度与交换1.进程调度1)调度原理Unix系统的进程调度采用多级反馈循环调度法,即系统给进程分配一个时间片,当时间片结束时,系统动态估算进程的优先数,若有优先级低于(优先数大于)当前进程的“在显存就绪”进程时,系统设置调度标示,在由核态度转换至用户态前调度高优先级的进程运行,并把被抢鲜的进程反馈到相应的优先级队列中。一个进程的执行可能要经过多次这样的反馈循环。时间片是UNIX进程调度估算优先数的重要参数,而优先数的大小又决定那个进程将占有CPU,为此,时间片和优先数这两个参数对UNIX进程调度起着举足轻重的作用。UNIX进程调度涉及的主要问题是:A、调度时机B、调度标志的设置C、调度策略与优先数的估算D、调度的实现2)调度的时机A、进程手动舍弃CPU时B、进程由核态度转到用户态时3)调度标志的设置A、进行调度的标志runrunB、runinC、runout4)调度策略与优先数的设置A、策略:动态优先B、优先数估算:P_pri=P_cpu/2+PUSER+P_nice+NZERO5)调度的实现:完成进程之间的上下文切换。
A、确定是否切换B、选一就绪进程占用CPUC、恢复选中进程现场2.交换交换由0号进程完成,过程如下:六、进程通讯1.低级通讯A、利用Sleep和Wakeup实现进程间的同步与互斥B、利用软中断实现同一用户的诸进程间的通讯。(软中断讯号见160页,图6.14)2.IPC通讯A、消息通讯B、共享储存区C、信号量机制消息通讯:讯号量机制2、进程空间地址变换过程四、请求调页技术1、磁盘块的描述2、页面数据表描述3、请求调页数据结构之间的关系4、请求调页处理过程5、最不常常使用淘汰原理按换入算法,在交换区中查找换入进程换入找到的就绪进程设置runout标示按换出算法找显存中可缓冲进程sched过程流程图找到了吗?调用sleep睡眠换入成功吗?找到了吗?换出找到的显存中进程设置runint标示调用sleep睡眠否否否是是否…队列nfirstlast…队列ifirstlast…消息队列表message0消息正文message1message2messagen消息正文消息表头消息表头……索引表与实例表的关系进程A的虚空间区间1区间2化学空间共享储存区进程B的虚空间区间1区间2共享储存区示意图讯号量集合表讯号量字段讯号量序号…KEY2KEY1sem6sem5sem4sem3sem2sem1543210讯号量字段共享储存区管线通讯(pipe):UNIX提供管线设施pipe实现进程间的通讯,一个进程可以把信息写入Pipe的上端,另一进程可以从Pipe的右端读出信息.pipe是联接在进程间的可共享文件,称为pipe文件。
进程可以对pipe文件进行读、写操作,写进程可以把信息写入pipe文件,而读进程从pipe文件中读取信息。UNIX限制Pipe文件的最大宽度是4096字节,所以,进程通讯时若信息量小于4096字节则要分批传送。当pIpe已满则写进程必须等待,直至PiPe有空间时才会继续向pipe中写信息;当pipe为空时则读进程必须等待,直至piPe中有信息时才会读出。虚存空间的界定VAX-11机的地址字长为32位,轮询范围为232虚拟空间被分成四个功能段,每位功能段最大轮询范围为2300~230-1为进程的程序区,称为P0区,230~231-1为进程的控制区,称为P1区。231~231+230-1为系统区,供多进程共享。231+230~232-1为保留区,供扩展功能时用。提供了显存与外存之间的进程交换机制支持恳求调页策略,页式虚存管理页面的大小通常在512B~4KB之间6.4UNIX系统储存器管理P0区(程序)[正文段、数据段、共享寻址段]P1区(控制)[user结构、用户栈、核心栈等]系统区[操作系统代码和系统共享的数据结构等]保留区:扩展功能时用0230231231+230232-1进程空间系统空间轮询方向虚拟空间(交换区,可执行文件等)类型块号设备号图6.29c盘块描述项其他队列表针逻辑设备号与块号引用该页的进程数页状态页面号图6.30pfdata描述项页面号794页表项设备号1块号2743c盘块描述项页面号794引用数1设备号1块号2743…Pfdata项1493K显存页面794空闲页面数组…图6.31恳求调页用数据结构间的关系*操作系统第六章UNIX操作系统*操作系统第四章并发处理第六章UNIX操作系统6.1UNIX操作系统概述6.2UNIX系统用户界面6.3UNIX系统进程管理6.4UNIX系统储存器管理6.5UNIX系统文件管理6.6UNIX系统设备管理一、UNIX操作系统的发展UNIX最初是由汇编语言编撰的,1973年用C语言重画。
UNIX的主要特征:短小精悍、简易有效,并具有易理解、易扩展、易移植性.第六章UNIX操作系统6.1UNIX操作系统概述二、UNIX操作系统的主要特征UNIX系统的优点1)UNIX是一个交互式的分时多用户多任务的操作系统,每位用户都可以同时执行多个进程。2)提供了丰富的系统功能。如支持十几种常用程序设计语言的编译和解释程序,它提供的软件工具使用户很便捷的开发新的软件,它提供了能由较简单的程序构造复杂程序的谓词。3)提供了多种通信机制.以满足各类进程通信的须要。4)提供了良好的用户界面。该系统提供一种命令程序设计语言shell作为用户界面。它具有许多中级语言所拥有的控制流能力,如if/for/while等词句。作为用户程序与操作系统的插口,则提供了系统调用。这种界面既能为用户提供各类服务、又相当简练。5)在UNIX系统中使用了树状结构的文件系统,它具有良好的安全性、保密性和可维护性;6)文件、目录和设备统一处理,外部设备犹如c盘上的普通文件一样被访问、共享和保护;文件采用字节流这样的一致格式,便于程序设计。7)该系统主要用C语言编制,使之易读、易懂,易更改、易移植到其它计算机上。
UNIX系统的缺点1)UNIX系统版本太多。UNIX鼓励用户用UNIX的工具开发适宜自己须要的环境。目前UNIX的标准化正在进行。2)UNIX系统缺乏实时控制、分布式处理等能力。3)UNIX系统的核心是无序模块结构。不是层次式的,不易更改和扩展。三、UNIX系统结构UNIX系统的体系结构应用程序层实用层核心层硬件整个UNIX系统可以分成四个层次。最低层是硬件,作为整个系统的基础;次低层是OS核心层,包括了进程管理、存储器管理、设备管理和文件管理四大资源管理功能。里面第二层是OS与用户的插口shell,以及编译程序等unix c 信号量机制,最高层是应用程序。库函数用户程序核心层用户层文件子系统进程间通讯进程调度储存管理进程控制子系统高速缓存字符设备块设备设备驱动程序系统调用插口硬件控制硬件核心层硬件层深陷UNIX系统核心框架图整个UNIX系统可分成两大部份:1.由用户程序和系统提供的服务构成的所谓核外程序unix c 信号量机制,产生了良好的系统环境;2.操作系统,又称为核心,其中两个主要的部份是文件子系统和进程控制子系统。核外程序通过引用两组被明晰定义的系统调用与核心相处:1)一组用于与文件子系统的交互作用;2)另一组则用于与进程控制子系统的交互作用。
进程控制子系统负责进程的创建、结束、同步、通信和进程调度以及储存器的管理。文件子系统用于有效地管理系统中的所有文件、并提供高速缓冲机制。6.2UNIX系统用户界面一、UNIX的用户界面Unix既有编程插口,即系统调用;又有操作插口,即shell。其中shell插口分为基本命令、特殊命令和shell编程。1.基本命令包括:系统访问命令;编辑和文件管理命令;编译、链接命令;维护、管理命令;调试命令等2.特殊命令包括:后台命令;键值;文件重定向;管线命令;混频器等3.Shell程序语言可以把shell命令编制成程序,按批处理执行。二、UNIX的命令控制界面三、UNIX系统调用UNIX系统调用可以分成三类:1)与进程管理有关的系统调用;构建一个进程;进程终止;…2)与文件和外设管理有关的系统调用;打开文件;读文件;…3)与系统状态有关的系统调用;设置用户号;设置系统月历时间;…1.UNIX系统调用的分类系统调用是用户程序恳求操作系统为其服务的惟一方式,在UNIX中把系统调用称为程序员插口。UNIX规定用户程序用捕俘(trap)指令恳求系统服务,UNIX核心中的中断捕俘程序按照trap的类型转向相应的处理程序。
trap指令方式如下:二、UNIX系统调用的实现UNIX第6版共有4l条系统调用,UNIX第7版共有50条系统调用,其中有32条是常用的。6.3UNIX系统的进程管理一、UNIX进程的结构1.UNIX系统的进程组成:1)进程控制块PCB;2)数据段;3)正文段。UNIX系统为了节约进程控制块所占的寻址空间,把每位进程控制块分成两部份:1)常驻寻址部份(称基本控制块linux系统安装,称proc结构):不管进程是否正占有处理器运行。系统常常会对这部份的内容进行查询和处理,常驻部份的内容包括:进程状态、过程待征、优先数、数据段始址、等待缘由和队列表针等,这是进行处理器调度时必须使用的一些主要信息。2)非常驻寻址部份(称扩展控制块,称user结构):当进程不占有处理器时,系统不会对这部份的内容进行查询相处理,因而,这部份内容可以储存在c盘的对换区中,它随用户的程序和数据部份换进或换出寻址。UNIX系统把进程的数据段又界定成三部份:1)用户栈区(供用户程序使用的信息区);2)用户数据区(包括用户工作数据和非再入的程序段);3)进程数据区ppda(包括系统变量和对换信息)。
正文段:是可再入的程序,能被若干进程共享。为了管理可共享的正文段,UNIX设置了一张正文表.每位正文段都占用一个表目,拿来强调该正文段在寻址和c盘上的位置、段的大小、调用该段的进程数等情况。procuser系统栈用户栈数据段正文段UNIX进程映象UNIX进程结构UNIX中的进程称为进程映象。组成由右图所示。2.进程的虚拟地址结构1)进程数据结构及其互相关系user………proctextdatastack进程表PPRT区页表显存进程数据结构2)系统区表文件表针共享计数状态显存始址宽度类型区号系统区表3)区表与进程结构…虚拟地址3(栈)页表3始址虚拟地址2(数据段)页表2始址虚拟地址1(正文段)页表1始址…进程A…虚拟地址3(栈)页表3始址虚拟地址2(数据段)页表2始址虚拟地址1(正文段)页表1始址…进程B区表项4区表项3区表项2区表项1区表页表1页表3页表2页表4显存…区表与进程proc结构3.进程上下文进程专用代码和数据核态度栈用户态栈↑↓用户程序P0(用户)区P1(控制)区0230231进程空间结构系统自举初始化程序设置各类表格与数据结构构建0#进程构建1#进程构建终端进程构建Shell进程用户输入构建用户进程执行结束用户进程执行显示提示符Shell进程等待否是(UNIX内核入显存)UNIX中各进程的关系“0#进程”:进行进程在寻址与c盘之间的切换调度。
注:1)正在处理器上运行的进程的所有信息全部储存在寻址中。2)当一个进程让出处理器时,假若寻址空间紧张的话,就可把该进程的大部份信息(除常驻部份)送到c盘的对换区中,使它原占用的寻址区域可分配给别的进程。假如寻址中有足够的空闲区时,又可将在c盘对换区中的进程放入到寻址,便于在适当的时机可以去占有处理器运行。所以,在UNIX系统中常常要发生进程在寻址与c盘之间的切换调度,这些调度是由一个被称其为“0#进程”的特殊进程来完成的。二、正在处理器上运行的进程在UNIX系统中处于就绪状态的进程可能在寻址中,也可能在c盘对换区中。一个就绪状态的进程,假如在c盘交换区中,则要让它占有处理器运行的话,必须先把它调入寻址。UNIX系统是采用优先数调度算法分配处理器的:1)每位进程都有一个优先数;2)一个就绪进程能得到处理器的优先权取决于进程的优先数,优先数越小则优先权越高。在UNIX系统中,调度程序总是选择优先数最小的就绪进程去占用处理器。3)系统进程的优先数高于用户进程的优先数。就绪状态的进程:4)进程在执行中其优先数可以动态改变,比如,对连续使用处理器时间较长的进程降低其优先数,使它的优先权相应减少;而在较长时间里末使用处理器或虽频繁使用处理器但每次使用时间都很短的进程增加优先数,使它的优先权相应提升。
又如,对执行I/0操作的进程给与让利,由于它们为了等待I/O传输而已较长时间没有使用处理器,故在完成I/O传输后,这种进程的优先数可增加。进程创建:一个进程可通过系统调用fork创建新的进程.产生父女关系红旗linux下载,分别名为父进程和子进程。父进程与子进程可并发执行.子进程不共享父进程的寻址.但子进程却可共享父进程已打开的所有文件和当前日录。进程执行:进程可通过系统调用exec来执行一个新文件,即进程可用新文件手指定的正文段和数据段宋取代原有的正文段和数据段。这意味着改变了进程执行的程序,但依然可以使用原先打开的文件。即exec用于把一个程序覆盖在正在执行的进程上而作为当前进程。进程同步:UNIX中的系统调用Wait和exit是实现进程间同步的主要手段,父进程用系统调用wait等待它的一个子进程中止;子进程用系统调用exit中止自己,并唤起父进程进行善后处理。三、进程状态及其转换1.创建状态当父进程执行fork系统调用创建子进程期间,新被创建的子进程处于创建状态。2.显存中的就绪进程已在显存且处于就绪状态。对于新创建的进程,若有足够的显存,核心可将它安置在显存中,新进程便处于显存就绪状态。
3.外存中的就绪进程处于就绪状态,但被换出到外存中。在创建新进程时,若无足够的显存,核心将新进程安置在外存对换区中,产生就绪且换出状态;据悉,原已在显存中的就绪进程,可能因显存紧张而被换出,同样也成为就绪且换出状态。4.核态度执行一个进程在执行系统调用时,即转换为核态度执行。5.用户态执行用户程序在执行完系统调用后,使出核态度执行转变为用户态执行。6.显存中的睡眠进程已在显存且正处于睡眠状态。假如进程所执行的系统调用涉及到I/o操作,而进程又须等待它的完成,则进程将步入在显存中睡眠状态。7.外存中的睡眠显存紧张时,在显存中睡眠的进程首先被核心换出到外存上,以腾出显存。此时,进程将转变为睡眠且换出状态。8.被剥夺状态当运行进程要从核态度返回到用户态时,核心可剥夺该进程的运行,而调度另一进程。被剥夺运行的进程便转变为被剥夺状态。被剥夺状态和显存就绪状态是等价的。系统v规定有这两种状态,是为了指出正在核态度运行的进程不能被剥夺,仅当它正式返回用户态时,才会被剥夺。9.僵死状态当进程执行了exit系统调用后,便处于僵死状态。此时进程已不存在,但它留下一个富含状态码和一些计时统计信息的记录,供父进程搜集。
四、进程控制1.Unix启动及进程树的产生系统自举,将核心放入显存执行start,启动unix系统构建进程0,核心程序执行调用fork()过程,构建进程1进程1调用exec执行“etc/init”,建终端子进程(shell)输入命令,构建终端用户进程调用shell解释程序,搜索并解释命令文件Fork创建子进程子进程调用exec执行执行结束exit()进程树的产生系统调用子进程执行?唤起父进程显示提示行父进程等待Fork流程图有足够的显存区和交换区?有足够的空间proc结构块?分配一个空间proc的结构项,确定一个惟一的进程标示符将父进程proc结构项中的数据复制到子进程proc结构中将子进程状态设为创建父进程的打开文件表引用数增1当前目录索引节点和根目录引用数增1父进程fork专用保存区中保存进程上下文,以使子进程被调度时从这儿执行在显存中对父进程上下文进行逻辑复制显存中有足够的储存区使复制成功?将子进程上下文换出子进程入就绪队列是否否否是是创建失败发生调度且调度到子进程?返回0返回子程序pid2.进程的创建SH子进程SH父进程SH命令进程forkexec等待命令进程结束waitshell执行过程