“操作系统课程设计”读书报告
学号 姓名 学院 年级 专业 报告日期 成绩
黑龙江大学计算机科学技术学院 软件学院
1
一、基本理论阐述 1.进程
定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是
操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
基本介绍:多道程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行,何时停顿,也无法看出它与其它执行程序的关系,因此,程序这个静态概念已不能如实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质,人们引入“进程(Process)”概念。
进程的概念:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。 主要特征: 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
结构特征:进程由程序、数据和进程控制块三部分组成。 状态分类:
1)就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源;只要
分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
2)运行状态(Running):进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
3)阻塞状态(Blocked):由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理机分配给该进程,也无法运行。 进程控制的基本事件: 进程的创建
1.引起创建进程的事件
2
在多道程序环境中,只有(作为)进程(时)才能在系统中运行。因此,为使程序能运行,就必须为它创建进程。导致一个进程去创建另一个进程的典型事件,可以有以下四类: 1) 用户登录。
在分时系统中,用户在终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并把它插入到就绪队列中。 2) 作业调度。
在批处理系统中,当作业调度程序按照一定的算法调度到某作业时,便将该作业装入到内存,为它分配必要的资源,并立即为它创建进程,再插入到就绪队列中。 3) 提供服务。
当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务,例如,用户程序要求进行文件打印,操作系统将为它创建一个打印进程,这样,不仅可以使打印进程与该用户进程并发执行,而且还便于计算出为完成打印任务所花费的时间。 4) 应用请求。
在上述三种情况中,都是由系统内核为它创建一个新进程,而这一类事件则是基于应用进程的需求,由它创建一个新的进程,以便使新进程以并发的运行方式完成特定任务。 2.进程的创建过程
一旦操作系统发现了要求创建新进程的事件后,便调用进程创建原语Creat()按下述步骤创建一个新进程。
1) 申请空白PCB。为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。
2) 为新进程分配资源。为新进程的程序和数据以及用户栈分配必要的内存空间。显然,此时操作系统必须知道新进程所需要的内存大小。
3) 初始化进程控制块。PCB的初始化包括:①初始化标识信息。将系统分配的标识符和父进程标识符,填入新的PCB中;②初始化处理机状态信息。使程序计数器指向程序的入口地址,使栈指针指向栈顶;③初始化处理机控制信息。将进程的状态设置为就绪状态或静止就绪状态,对于优先级,通常是将它设置为最低优先级,除非用户以显式的方式提出高优先级要求。
4) 将新进程插入就绪队列。如果进程就绪队列能够接纳新进程,便将新进程插入到就绪队列中。 进程终止
1.引起进程终止的事件
3
1)正常结束。
在任何计算机系统中,都应该有一个表示进程已经运行完成的指示。例如,在批处理系统中,通常在程序的最后安排一条Hold指令或终止的系统调用。当程序运行到Hold指令时,将产生一个中断,去通知OS本进程已经完成。 2)异常结束。
在进程运行期间,由于出现某些错误和故障而迫使进程终止。这类异常事件很多,常见的有:越界错误,保护错,非法指令,特权指令错,运行超时,等待超时,算术运算错,I/O故障。
3)外界干预。
外界干预并非指在本进程运行中出现了异常事件,而是指进程应外界的请求而终止运行。这些干预有:操作员或操作系统干预,父进程请求,父进程终止。 2. 进程的终止过程
如果系统发生了上述要求终止进程的某事件后,OS便调用进程终止原语,按下述过程去终止指定的进程。
1)根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程状态。
2)若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真。用于指示该进程被终止后应重新进行调度。
3)若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防他们成为不可控的进程。
4)将被终止的进程所拥有的全部资源,或者归还给其父进程,或者归还给系统。 5)将被终止进程(它的PCB)从所在队列(或链表)中移出,等待其它程序来搜集信息。
进程的阻塞和唤醒
1.引起进程阻塞和唤醒的事件 1)请求系统服务。
当正在执行的进程请求操作系统提供服务时,由于某种原因,操作系统并不立即满足该进程的要求时,该进程只能转变为阻塞状态来等待,一旦要求得到满足后,进程被唤醒。 2)启动某种操作。
4
当进程启动某种操作后,如果该进程必须在该操作完成之后才能继续执行,则必须先使该进程阻塞,以等待该操作完成,该操作完成后,将该进程唤醒。 3)新数据尚未到达。
对于相互合作的进程,如果其中一个进程需要先获得另一(合作)进程提供的数据才能运行以对数据进行处理,则是要其所需数据尚未到达,该进程只有(等待)阻塞,等到数据到达后,该进程被唤醒。 4)无新工作可做。
系统往往设置一些具有某特定功能的系统进程,每当这种进程完成任务后,便把自己阻塞起来以等待新任务到来,新任务到达后,该进程被唤醒。 2.进程阻塞过程
正在执行的进程,当发现上述某事件后,由于无法继续执行,于是进程便通过调用阻塞原语block把自己阻塞。可见,进程的阻塞是进程自身的一种主动行为。进入block过程后,由于此时该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由执行改为阻塞,并将PCB插入阻塞队列。如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞(等待)队列。最后,转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换,亦即,保留被阻塞进程的处理机状态(在PCB中),再按新进程的PCB中的处理机状态设置CPU环境。 3. 进程唤醒过程
当被阻塞的进程所期待的事件出现时,如I/O完成或者其所期待的数据已经到达,则由有关进程(比如,用完并释放了该I/O设备的进程)调用唤醒原语wakeup(),将等待该事件的进程唤醒。唤醒原语执行的过程是:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。
二、当前理论或实践应用现状
1.线程、SMP 和微内核 在许多操作系统中,传统的进程概念被分为两部分:一部分负责管理资源所有权;另一部分负责指令流的执行。一个单独的进程可包含多个线程。使用多线程的组织方法对程序的结构化和性能方面都有很大的帮助。SMP是一个拥有多处理器的计算机系统,其中的每一个处理器都可以执行所有应用程序和系统代码。SMP的组织方法增强了系统的性能和可靠性。SMP通常和多线程机制一起使用,即使没有多线程机制也能很大幅度的提高系统性能。微内核是操作系统为了减少运行在内核模式的代码量的一种设计方式,并且分析了这种方法的优点。 2.并发:互斥和同步
相交进程之间的关系主要有两种:同步与互斥。所谓互斥是指散步在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。
5
所谓同步,是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。
显然,同步是一种更为复杂的互斥,而互斥是一种特殊的同步。 也就是说互斥是两个线程之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)!
总结:互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。 3. 并发:死锁和饥饿 死锁是这样的一种情况:一组进程中的两个或多个进程要等待该组中的其他成员完成一个操作后才能继续运行,但是没有成员可以继续。死锁是一种很难预测的现象,并且没有比较容 易的通用解决方案。处理死锁的三个主要手段是预防、避免和检测。饥饿时一个准备运行的进程由于其他进程的运行而一直不能访问处理器的情况。从打的方面来说,饥饿是被当成调度问题来处理的。 4.进程调度
我们经常遇到两个或多个进程(例如,生产者和消费者)在逻辑上均可以运行的情况。当有多个进程就绪时,操作系统必须决定先运行哪一个。操作系统中作出这种决定的部分称作调度程序(scheduler)它使用的算法称作调度算法(scheduling algorithm)。再回到早期以磁带上的卡片映像作为输入的批处理系统时代,那时的调度算法很简单:依次运行磁带上的下一个作业。对于分时系统,则调度算法要复杂一些,因为经常有多个用户等待服务,而且同时可能存在多个批处理流(例如,保险公司理赔)。即使在个人电脑上,也可能有若干用户启动的进程竞争CPU,更不要说还有后台作业,例如网络或收发电子邮件的精灵进程。在讨论具体的调度算法之前,我们应该考虑一下调度程序要达到的目标。毕竟调度程序关注的是确定策略,而并不提供机制。一个好的调度算法应当考虑很多方面,其中可能有:
1.公平-确保每个进程获得合理的CPU份额。 2.有效-使CPU百分之百地忙碌。
3.响应时间-使交互用户的响应时间尽可能短。
4.周转时间-使批处理用户等待输出的时间尽可能短。 5.吞吐量-使每小时处理的作业数最多。
进程的创建——调用进程创建原语Creat() 步骤: 1)申请空白PCB 2)分配资源
3)初始化进程控制块 4)插入就绪队列
进程的终止Termination of Process 进程的阻塞与唤醒——调用进程阻塞原语block()和唤醒原语wakeup(); 进程的挂起与激活——调用进程挂起原语suspend()和激活原语active();
6
进程同步——主要任务是对多个相关进程在执行次序上进行协调。 信号量机制 1)整型信号量 2)记录型信号量 3)AND型信号量
AND同步机制:将进程在整个运行过程中需要的所有资源,一次性的全部分配给进程,待进程使用完后再一起释放。
4)信号量集——AND信号量机制的扩充 信号量的应用 1)实现进程互斥 2)实现前趋关系 管程机制
管程——代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序,共同构成了一个操作系统的资源管理模块。管程被请求和释放资源的进程所调用。 进程通信 类型:
1)共享存储器系统Shared-Memory System——包括基于共享数据结构和存储区的通信方式。
2)消息传递系统Message passing system
3)管道通信——管道,用于链接一个读进程和一个写进程以实现它们之间通信的一个共享文件(pipe文件)。 消息传递通信的实现方法: 1)直接;
2)间接(通过私有或公有或共享信箱收发消息) 进程同步方式:
1)汇合rendezrous,发送进程阻塞接收进程阻塞;(主要应用于进程之间紧密同步)
2)发送进程不阻塞,接收进程阻塞(应用最广) 3)发送进程和接受进程均不阻塞;(常见) 本地进程之间的通信主要应用消息缓冲队列通信机制(消息缓冲区数据结构)线程:一般来说,我们把正在计算机中执行的程序叫做\"进程\"(Process) ,而不将其称为程序(Program)。所谓\"线程\"(Thread),是\"进程\"中某个单一顺序的控制流。
新兴的操作系统,如Mac,Windows NT,Windows 95等,大多采用多线程的概念,把线程视为基本执行单位。线程也是Java中的相当重要的组成部分之一。甚至最简单Applet也是由多个线程来完成的。在Java中,任何一个Applet的paint()和update()方法都是由Awt(Abstract Window Toolkit)绘图与事件处理线程调用的,而Applet主要的里程碑方法——init(),start(),stop()和destory()——是由执行该Applet的应用调用的。
单线程的概念没有什么新的地方,真正有趣的是在一个程序中同时使用多个线程来完成不同的任务。某些地方用轻量进程(Lightweig ht Process)来代替线程,线程与真正进程的相似性在于它们都是单一顺序控制流。然而线程被认为轻量是由于它运行于整个程序的上下文内,能使用整个程序共有的资源和程序环境。作
7
为单一顺序控制流,在运行的程序内线程必须拥有一些资源作为必要的开销。例如,必须有执行堆栈和程序计数器。在线程内执行的代码只在它的上下文中起作用,因此某些地方用\"执行上下文\"来代替\"线程\"。线程间的同步和通信
1、互斥锁mutex——unlock,lock用于线程需读/写一个共享数据段时。 2、条件变量——防止互斥访问时发生死锁。 3、信号量机制
1)私用信号量private samephore——实现同一进程中各线程之间的同步。 2)公用信号量public samephore——实现不同进程间或不同进程中各线程之间的同步。
三、本人对相关内容的体会
本人对进程的理解为进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元
进程的三种状态分别为就绪状态,执行状态和阻塞状态,进程的调度无非就是进程的三种状态的相互转换过程,进程的就绪,执行,阻塞,相互转换以及进程管理过程中应用到的几种原语就绪(Ready),执行(Run),阻塞(Block)。 还有进程实体其的特征:
1) 动态性——由创建而产生,由调度而执行,由撤销而消亡。
2) 并发性——多个进程实体同存与内存中,且能在一段时间内同时运行。 3) 独立性——独立运行、分配资源和接受调度。
4)异步性——进程按各自独立的不可预知的速度向前推进。
进程控制块PCB——OS是根据PCB来对并发执行的进程进行控制和管理的。
通过编写进程控制实验对进程的概念有了深入了解和认识;了解进程的创建,执行,终止,阻塞,唤醒等每一个事件的过程。其中也遇到不少问题,我通过上网,查找相关书籍,和同学讨论来解决这些难题,在解决问题的同时对于理论知识的认识也更进一步。
8
四、设计与实现思路
1.数据结构:
Strcut Menory{ Char JobName;
Int Size,BeginMemoryAdress; Memory *link; };
struct PCB{ char name[10]; int Size; Memory M; PCB *link; };
9
2.算法设计及流程图
①创建进程:
开始
是否存在空闲PCB 否
是 输入进程名字 创建失败 是 是否重名 否 分配PCB,进程以尾插法入进入就绪态
是否存在运行态进程 是
否
就绪态表头进程进入运行态 结束 10
②时间片到:
开始
是否存在运行态进程 否
是 失败 是否存在就绪态进程 是
11
否 将正在运行进程置到就绪态表尾, 就绪态表头进程置入运行态 结束
③阻塞进程:
开始
是否存在正在运行进程 否
是 阻塞失败 尾插法将正在运行进程置入阻塞态表尾 是否存在就绪态进程 是 就绪态表头进程进入运行态 否
12
结束
④唤醒进程:
开始
是否存在阻塞态进程 否
是 唤醒失败 尾插法将阻塞态表头进程置入就绪态表中 是否存在运行态进程 是 就绪态表头进程进入运行态 否
13
结束
⑤结束进程:
开始
是否存在运行态进程 否
是 结束失败 删除该进程 空闲PCB加一 是否存在就绪态进程 是 就绪态表头进程进入运行态 否
14
结束
五、读书工程心得总结
通过本次的读书以及课程设计的实际要求通过读书和编写程序,使我了解 了有关操作系统的知识以及当前现状下操作系统的发展前景,并且读了其他的书籍也让我了解了课本上没有的东西,正常教学周学习的课本上让我知道了PCB这个东西没进程控制块,了解了进程的管理原理和过程,进程的三种基本状态及相互转换的过程,并了解关于进程,线程方面的知识以及当前按有关进程研究的最新状况,并能知道两者之间的区别和联系。还知道了进程与程序的联系和区别。 对进程存在的意义和作用有了更为深刻的认识。
通过程序流程设计过程,我对进程的生命过程有了深刻认识,同时,也更加加强了我分析问题解决问题的能力。除此以外,对于流程的设计让我学习了算法与流程的转换方法和过程。在学习了很多算法的同时也对流程设计能力有了较大提高。
通过编程的过程,我对链表和结构体有了更进一步的了解,并能运用得更加熟练。通过本学期的上机实验,我对编程的兴趣变得浓烈了很多,在编程时思路也变得清晰了许多。
整体来说,本学期,不仅在编程和算法上面都有了较大进步,与此同时,在程序分析和设计方面也有了不少提高。
参考文献:
现代操作系统(第2版、第3版,中文/英文原版):作者:(荷)Andrew S. Tanenbaum 译者:陈向群,马洪兵 出版社:机械工业出版社 P123-P136.
操作系统设计与实现(第二版,有电子书,中文版):作者:(美)Andrew S. Tanenbaum,Albert S. Woodhull 译者:陈渝 谌卫军 出版社:电子工业出版社 P214-P257
15
因篇幅问题不能全部显示,请点此查看更多更全内容