操作系统期末复习

第一章 操作系统导论

1.操作系统的概念及特征
1)操作系统的概念
        操作系统是指控制和管理整个计算机系统的硬件和软件资源,并且合理地组织调度计算机的工作和资源的分配,提供给用户和其他软件比较方便的接口和环境,是计算机系统中最基本的系统软件。
2)操作系统的基本特征:
        操作系统的基本特征包括:并发、共享、虚拟、异步。
        ①并发:指两个或者多个事件在同一时间间隔(不是同时,先写作业再吃饭)内发生。宏观上看是同时发生的,微观是交替发生的。
        并行:是指系统具有同时(边写作业边听歌)进行运算或操作的特性,在同一时刻能完成两种或两种以上的工作。
        ②共享:系统中的资源可供内存中多个并发执行的进程共同使用。
                可分为以下两种资源共享方式:
        互斥共享方式:资源在特定的一段时间内只允许一个进程访问该资源。(QQ打视频电话那么微信就不能进行打视频电话)
        同时共享方式:一个时间段内允许多个进程同时对某些资源进行访问。(打开文件A,同时打开文件B,磁盘被共享)
        并发和共享是操作系统两个最基本的特征,两者之间互为存在条件:①如果失去并发性,即系统中只有一个进程在运行,则共享性会失去意义。②如果失去共享性,则并发进行的进程则无法共享资源。

        ③虚拟:一个物理意义上的实体变为若干个逻辑上的对应物,物理实体是实际存在的,逻辑上的对应物是用户感受到的。用于实现虚拟的技术,称为虚拟技术。虚拟存储器技术是通过多道程序技术,采用让多道程序并发执行的方法,来分时使用一个处理器的。(内存实际4G但是可以同时运行4G以上的应用)
        ④异步:在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的
执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程
的异步性。(需要保证多次运行结果相同)

2.操作系统的功能和接口
        1)操作系统作为计算机系统资源的管理者
                对资源进行管理(重点):处理机管理、存储器管理、文件管理、设备管理。
        ①处理机管理
        在多道程序环境下,处理机的分配和运行都以进程为基本单位,因而对处理机的管理可归纳为对进程的管理。进程管理的主要功能包括进程控制、进程同步、进程通信、死锁处理、处理
机调度等。

        ②存储器管理
        存储器管理是为了给多道程序的运行提供良好的环境,方便用户使用、提高内存的利用率,主要包括内存分配与回收、地址映射、内存保护与共享和内存扩充等功能。

        ③文件管理
        负责文件管理的部分称为文件系统。文件管理包括文件存储空间的管理、目录管理及文件读写管理和保护等。

        ④设备管理
        设备管理的主要任务是完成用户的 请求,方便用户使用各种设备,并提高设备的利用率,主要包括缓冲管理、设备分配、设备处理和虚拟设备等功能。

操作系统期末复习_第1张图片
        2)操作系统作为用户与计算机硬件系统之间的接口操作系统提供了用户接口,主要分为两类:一类是命令接口,另一类是程序接口。

         ①命令接口
        按作业控制方式的不同,命令接口分为联机命令接口和脱机命令接口。
        联机命令接口又称为交互式命令接口,适用于分时或实时系统的接口。
        脱机命令接口又称为批处理命令接口,适用于批处理系统,它由一组作业控制命令组成。
向上层提供服务(重点):给软件或者程序员提供程序接口→系统调用

        ②程序接口
        程序接口由一组系统调用组成。用户通过在程序中使用这些系统调用来请求操作系统为其提供服务。当前最为流行的是图形用户界面(GUI ),即图形接口。
        GUI最终是通过调用程序接口实现的,用户通过鼠标和键盘在图形界面上单击或使用快捷键,就能很方便地使用操作系统。

        3)操作系统用作扩充机器
        没有任何软件支持的计算机称为裸机。我们通常把覆盖了软件的机器称为扩充机器或虚拟机。

3.操作系统的发展过程
        1) 单道批处理系统(成批处理、一道作业、)
        特点:单路性、独占性、自动性、封闭性、顺序性;
        缺点:系统的资源得不到充分的利用。

操作系统期末复习_第2张图片


        2) 多道批处理系统【任务并发执行】
        特点:多路性、共享性、自动型、封闭性、无序性、调度性;
        好处:提高 的利用率,提高内存和 设备的利用率,增加系统吞吐量;
        缺点:平均周转时间长,无交互能力。

 

 

 

 操作系统期末复习_第3张图片

         3) 分时系统(同时性,交互性,独立性,及时性)【人机交互】
        分时系统是指在一台主机上连接了多个配有显示器和键盘的终端,由此所组成的系统,该系统允许多个用户同时通过自己的终端,以交互方式使用计算机,共享主机中的资源。采用“时间片轮转”的处理机调度策略。

操作系统期末复习_第4张图片

操作系统期末复习_第5张图片
        4) 实时系统
实时系统是指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。

 操作系统期末复习_第6张图片

第二章 进程

1.进程的概念(多道批处理 动态执行 并发执行)
        1)定义:从不同的角度,进程可以有不同的定义,比较典型的定义有:
        ①进程是程序的一次执行。
        ②进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
        ③进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

        2)组成:进程是由程序控制块(PCB)、程序段、数据段组成。
        操作系统是通过PCB来管理进程,因此PCB中应该包含操作系统对其进行管理所需的各种信息,如进程描述信息、进程控制和管理信息、资源分配清单和处理机相关信息。
        程序段:程序代码存放的位置。
        数据段:程序运行时使用、产生的运算数据。如全局变量、局部变量、宏定
义的常量就存放在数据段内。

        进程存在的唯一标志:PCB

        3)组织方式(进程间的,不是进程内部的)
        进程的组织形式分为:链接方式和索引方式。
就绪队列,运行队列,阻塞队列
        链接方式:按照进程状态将PCB分为多个队列,操作系统持有指向各个队列的指针。
        索引方式:根据进程的状态不同,建立几张索引表,操作系统持有指向各个索引表的指针。        
就绪索引表,运行索引表,阻塞索引表

        4)进程的特征
        动态性:进程的最基本的特征,进程是程序的一次执行过程,是动态的产生、变化和消亡。
        并发性:内存中有多个进程实体,各进程可并发执行。
        独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位。
        异步性:各个进程按各自独立的、不可预知的速度向前推进,操作系统要提供进程同步机制来解决异步问题。
        结构性:每个进程都会配置一个PCB。结构上看,进程由程序段、数据段和PCB组成。

2.进程的状态和转换
        1)进程的状态
        进程状态:一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程。进程状态体现一个进程的生命状态。
        一般来说,进程有五个状态:
就绪状态、运行状态、阻塞状态、创建状态、终止状态。其中前三种状态是进程的基本状态。
        创建态:进程在创建时需要申请一个空白 ,向其中填写控制和管理进程的信息完成资源分配。如果创建工作无法完成,比如资源无法满足就无法被调度运行,把此时进程所处的状态称为创建状态。
        
运行态:进程占用 ,并在 上运行的状态。单核一个,双核两个
        就绪态:进程已经具备运行条件,但由于未分配 无法运行状态。万事俱备只欠CPU
        阻塞态:进程因等待某个事件发生而暂时不能运行的状态。缺资源被迫停滞

        终止态:进程结束,或出现错误,或被系统终止,进入终止状态。

        2)状态的转换

操作系统期末复习_第7张图片
        上述三种基本状态之间转换可分为六种情况:
        
运行→就绪:①主要是进程占用 的时间过长,而系统分配给该进程占用CPU的时间是有限的;②在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出 ,该进程便由运行状态转变为就绪状态。
        
就绪→运行:正运行进程的时间片用完,调度就转到就绪队列中选择合适的进程分配 。
        
运行→阻塞:正在运行的进程因发生某等待事件而无法执行,则进程由运行状态变为阻塞状态,如发生了I/O请求。
       
 阻塞→就绪:进程所等待的事件已经完成,就进入就绪队列。
注意:阻塞态→运行态就绪态→阻塞态这两种状态转换是不可能发生的。

 3.进程通信
        1)进程通信是指进程之间的信息交换。

        PV操作是最低级的通信,高级通信方式是指以较高的效率传输大量数据的通信方式。
        高级通信方法主要有三类:
        ①共享存储。分别有基于共享数据结构的通信方式,例如生产者和消费者、基于共享存储区的通信方式。
        ②消息传递。是以格式化的消息为单位,利用原语传递消息,分为直接通信和间接通信。
        ③管道通信。是消息传递的一种特殊方式,是指用于连接一个读进程和一个写进程以实现它们之间的一个共享文件,又称pipe文件。

4.线程
        1)线程的引入 (微信是一个进程   微信打开视频电话是一个线程  微信传送文件是一个线程)
        引入线程的目正是为了简化线程间的通信,以小的开销来提高进程内的并发程度。
        线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程同一进程中的多个线程之间可以并发执行。

        2)线程——作为调度和分派的基本单位
        进程是系统资源分配的单位,线程是处理器调度的单位。
        线程表示进程的一个控制点,可以执行一系列的指令。通常,和应用程序的一个函数相对应。进程分解为线程还可以有效利用多处理器和多核计算机。
        3)线程与进程的比较
        ①进程与线程的区别:
a.调度;线程是调度和分配的基本单位,进程是拥有资源的基本单位。
b.并发性。不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。
c.拥有资源。进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
d.系统开销。在创建或撤消进程时,由于系统都要为之分配和回收资源导致系统的开销明显大于创建或撤消线程时的开销。
        ②进程和线程的关系:
a.一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
b.资源分配给进程,同一进程的所有线程共享该进程的所有资源。
c.处理机是分配给线程的,即真正在处理机上运行的是线程。
d.线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体。

第三章处理机调度和死锁

1.处理机调度的基本概念
        1)基本准则
        不同的调度算法具有不同的特性,在选择调度算法时,必须考虑算法的特性。为了比较处理机调度算法的性能,人们提出了很多评价准则,下面介绍其中主要的几种:
        ①CPU利用率。
        是计算机系统中最重要和昂贵的资源之一,所以应尽可能使 保持“忙”的状态,使这一资源利用率最高。
        ②系统吞吐量。表示单位时间内 完成作业的数量。长作业需要消耗较长的处理机时间,因此会降低系统的吞吐量。而对于短作业,它们所需要消耗的处理机时间较短,因此能提高系统的吞吐量。调度算法和方式的不同,也会对系统的吞吐量产生较大的影响。
        ③周转时间。周转时间是指从作业提交到作业完成所经历的时间,是作业等待、在就绪队
列中排队、在处理机上运行及进行输入/输出操作所花费时间的总和。
        a.作业的周转时间可用公式表示如下:
                周转时间 = 作业完成时间-作业提交时间
        b.平均周转时间是指多个作业周转时间的平均值:
                平均周转时间=(作业 的周转时间+…+作业 的周转时间)/
        c.带权周转时间是指作业周转时间与作业实际运行时间的比值:
                带权周转时间=作业周转时间/作业实际运行时间
        d.平均带权周转时间是指多个作业带权周转时间的平均值:
                平均带权周转时间 =(作业 的带权周转时间+…+作业 的带权周转时间)/
        ④等待时间
                等待时间指进程处于等处理机状态的时间之和,等待时间越长,用户满意度越低。
        ⑤响应时间。
                响应时间指从用户提交请求到系统首次产生响应所用的时间,在交互式系统中,周转时间不可能是最好的评价准则,一般采用响应时间作为衡量调度算法的重要准则之一。

2)三个层次
        一个作业从提交开始直到完成,往往要经历以下三级调度:
                ①作业调度,又称高级调度,其主要任务是按一定的原则从外存处于后备状态的作业中挑选一个(或多个)作业,给它(们)分配内存、输入/输出设备等必要的资源,并建立相应的进程,以使它(们)获得竞争处理机的权利。
                 ②中级调度,又称内存调度,其作用是提高内存利用率和系统吞吐量。为此,应将那些暂时不能运行的进程调至外存等待,把此时的进程状态称为挂起态。当它们已具备运行条件且内存又稍有空闲时,由中级调度来决定把外存上的那些已具备运行条件的就绪进程再重新调入内存,并修改其状态为就绪态,挂在就绪队列上等待。
                ③进程调度,又称低级调度,其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它,进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。进程调度的频率很高,一般几十毫秒一次。

3)进程调度方式
        所谓进程调度方式,是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即优先权更高的进程进入就绪队列,此时应如何分配处理机呢?通常有以下两种进程调度方式:
        ①非剥夺调度方式
(主动放弃),又称非抢占方式。非剥夺调度方式是指当一个进程正在处理机上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或发生某种事件而进入阻塞态时,才把处理机分配给更为重要或紧迫的进程。
        ②剥夺调度方式
(被动放弃),又称抢占方式。采用剥夺式的调度,对提高系统吞吐率和响应效率都有明显的好处。但“剥夺”不是一种任意性行为,必须遵循一定的原则,主要有优先权、短进程优先和时间片原则等。

2.调度算法
1)FCFS算法
        ①算法规则。先来先服务算法(first come first server,FCFS)
                按照作业/进程到达的先后顺序来进行调度。
        ②适用情况。可用于作业调度也可用于进程调度。
        ③优缺点。 优点:算法实现简单。  缺点:对长作业有利,对短作业不利。

2) SJF算法
        ①算法规则。短作业优先调度算法(short job first ,SJF)
                以作业的长短来计算优先级,作业越短,其优先级越高。
        ②适用情况。可用于作业调度及进程调度。
        ③优缺点
                优点:“最短的”平均等待时间及平均周转时间。
                缺点:a. 必须先知道作业的运行时间。
                           b. 对长作业不利,会出现饥饿现象。
                           c. 没有考虑作业的紧迫程度。

3)优先级算法(priority - scheduling algorithm)
        ①算法规则。基于进程(作业)的紧迫程度,由外部赋予进程相应的优先级,根据优先级进行调度。
        ②适用情况。可用于作业调度也可用于进程调度甚至I/O调度。
        ③ 类型
                抢占式优先级调度算法:
                        只需出现另一个优先级更高的进程,调度就会发生变化。
                非抢占式优先级调度算法:主动放弃。

        ④优先级的类型
                a.静态优先级:在创建进程时确定,其在进程的整个运行期间不变。
                b.动态优先级:在创建进程之初,先赋予进程一个优先级,然后动态的调整优先级。
        ⑤优缺点
                优点:用优先级区分紧急程度,运用于实时 。
                缺点:可能导致饥饿(低优先级进程的饥饿)。

4)时间片轮转算法(RR)
        ①算法思想:时间片轮转算法(Round-Robin)
                公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应。
        ②算法规则:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片。若进程未到一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。
        ③适用情况:可用于进程调度。
        ④是否抢占?若进程未能在时间片内运行完,将被强行剥夺处理机使用权,因此时间片轮转调度算法属于抢占式算法。由时钟装置发出时钟中断来通知CPU时间片已到。
        ⑤优缺点
                优点:公平;响应快,适用于分时操作系统;。
                缺点:不能区分任务的紧急程度,需要进程切换,消耗较大。

5)高响应比优先算法(HRRN)
        ①算法思想:高响应比优先调度算法(Highest Response Ratio Next,HRRN)
                综合考虑作业或进程的等待时间和要求服务的时间。
        ②算法规则:在每次调度前先计算各个作业或进程的响应比(优先级),选择响应比最高的作业或进程为其服务。
        响应比(Rp)=(等待时间+要求服务时间)/要求服务时间
                          =响应时间/要求服务时间 = 1+(等待时间)/要求服务时间
        ③适用情况:可用于作业调度及进程调度。
        ④优缺点
                优点:综合考虑了等待时间和运行时间,较好的实现了折中。
                缺点:每次调度前都要计算响应比,会增加系统的开销。
                注意:不会导致饥饿现象。

6)多级反馈队列调度算法
        ①算法思想: 对其他调度算法的折中权衡。
        ②算法规则:
                a.设置多个就绪队列 。各级队列优先级从高到低,时间片从小到大。
                b.每个队列都采用FCFS调度算法。
                c.按队列优先级调度。只有当第1~i-1队列均空时,才会调度第 队列中的进
程。

操作系统期末复习_第8张图片

        ③适用情况:可用于进程调度
        ④类型:属于抢占式的算法。
        ⑤优缺点:
                优点:用优先级区分紧急程度,运用于实时 。
                缺点:可能导致饥饿(低优先级进程的饥饿)。

3.死锁概念

        1)死锁的定义
              各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。
              注意区分:死锁和饥饿

参与死锁至少有两个进程占用了资源

死锁一个进程也可能发生

操作系统期末复习_第9张图片

         2)产生死锁的必要条件
        产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生。
        ①互斥条件。只有对必须互斥使用的资源的争抢才会导致死锁(如哲学家的筷子、打印机设  备)。
        ②请求和保持条件。进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。
        ③循环等待条件。存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。注意:发生死锁时一定有循环等待,但是发生循环等待时未必死锁。
        ④不剥夺条件。进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。

4.死锁的预防
        死锁的处理就是不允许死锁的发生,分为静态策略(预防死锁)和动态策略(避免死锁)。
        1)预防死锁。破坏死锁产生的四个必要条件中的一个或几个。
        2)避免死锁。用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
        3)死锁的检测和解除。允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。                                                                                                                                ①破坏互斥条件
                如果把只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态。比如:
SPOOLing技术,操作系统可以采用SPOOLing技术把独占设备在逻辑上改造成共享设备。
                缺点:并不是所有的资源都可以改造成可共享使用的资源,并且为了系统安全,很多地方还必须保护这种互斥性,因此,很多时候都无法破坏互斥条件。(例如打印机就不得改造成共享资源)
        ②破坏不剥夺条件
                当某个进程请求新的资源得不到满足时,它必须立即释放保持的所有资源,待以后需要时再重新申请。也就是说,即使某些资源尚未使用完,也需要主动释放,从而破坏了不可剥夺条件。
             缺点:a.实现起来比较复杂。
                        b.释放已获得的资源可能造成前一阶段工作的失效。因此这种方法一般只适用于易保存和恢复状态的资源,如CPU 。
                        c.反复地申请和释放资源会增加系统开销,降低系统吞吐量。
                        d.这种破坏意味着只要暂时得不到某个资源,之前获得的那些资源就都需要放弃,以后再重新申请。如果一直发生这样的情况,就会导致进程饥饿。

        ③破坏请求和保持条件
                可以采用静态分配的方法,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不让它投入运行。一旦投入运行后,这些资源就一直归它所有,该进程就不会再请求别的任何资源了。该策略实现起来简单,但也有明显的缺点:                                                                          有些资源可能只需要用很短的时间,因此如果进程的整个运行期间都一直保持着所有资源,就会造成严重的资源浪费,资源利用率极低。另外,该策略也有可能导致某些进程饥饿

        ④破坏循环等待条件
                方法:对系统的所有资源类型进行线性排序(顺序资源分配法)。首先给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源(即编号相同的资源)一次申请完。
原理分析:一个进程只有已占有小编号的资源时,才有资格申请更大编号的资源。按此规则,已持有大编号资源的进程不可能逆向回来申请小编号的资源,从而就不会产生循环等待的现象。
该策略的缺点:
                a.为系统中各类资源规定的序号必须相对稳定,这限制了新类型设备的增加
                b.尽管在为资源的类型分配序号时已经考虑到了大多数作业在实际使用这些资源时的顺序,但也经常会发生作业使用各类资源的顺序与系统规定的顺序不同的情况,造成对资源的浪费。
                c.为了方便用户,系统对用户在编程时所施加的限制条件应尽量少,然而这种按规定次序申请资源的方法必然会限制用户进行简单、自主的编程。 

银行家算法:

银行家算法的基本思想是通过安全性检查,判断是否存在一个安全序列。如果存在这样的安全序列,说明系统处于安全状态,资源可以按照要求进行分配。如果不存在安全序列,则说明系统处于不安全状态,资源不能分配,避免进一步发生死锁。

下面是银行家算法的大致步骤:

  1. 初始化:读取最大需求矩阵、分配矩阵和需求矩阵,并计算可利用资源向量。

  2. 安全性检查:判断是否存在一个安全序列。从所有未完成的进程中找到一个满足以下条件的进程:

    • ①进程尚未完成。
    • 进程所需的资源数量不大于可利用资源向量。

    如果找到符合条件的进程,将该进程标记为已完成,并更新可利用资源向量和需求矩阵。重复此步骤直到没有符合条件的进程。

    如果所有进程都被标记为已完成,则系统处于安全状态,存在一个安全序列。否则,系统处于不安全状态。

  3. 请求资源:当进程请求资源时,检查该请求是否超过了最大需求量。如果超过了最大需求量,则拒绝分配资源。否则,模拟分配资源,并进行安全性检查。如果存在安全序列,则将资源真正分配给该进程;否则,拒绝分配资源,保持当前状态。

通过不断进行安全性检查和资源的动态分配,银行家算法可以实现解除死锁,确保系统的安全性和稳定性。

5.死锁的避免
        避免死锁同样属于事先预防策略,是在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁。
        1)系统安全状态
        在避免死锁方法中,把系统的状态分为安全状态和不安全状态。当系统处于安全状态时可避免发生死锁,而当系统处在不安全状态时,则可能会进入死锁状态。
        2)安全序列
        所谓安全序列,就是指如果系统按照这种序列分配记资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个。
        3)由安全状态进入不安全状态
        如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后可能所有进程都无法顺利的执行下去。如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,可能会发生死锁。(不安全状态未必就是发生了死锁,但发生死锁时一定是在不安全状态) 
        因此可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。这也是“银行家算法”的核心思想。                                                                              4)银行家算法
        银行家算法是荷兰学者 金贷款时,不会发生不能满足所有客户需要的情况。后来该算法被用在操作系统中,用于避免死锁。
        核心思想:在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。
                
操作系统期末复习_第10张图片

操作系统期末复习_第11张图片

操作系统期末复习_第12张图片
④系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安
全,才正式将资源分配给进程 ,以完成本次分配;否则,将本次的试探分配
作废,恢复原来的资源分配状态,让进程 等待。

第四章存储管理 

1.内存管理的基本原理和要求
        1)内存管理的定义
                操作系统对内存的划分和动态分配就是内存管理的概念。
2)内存管理的功能
        内存空间的分配和回收:由操作系统完成对主存的分配和回收,对编程人员透明。
        地址转换:使逻辑地址转换为真实的物理地址。
        内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。
        存储保护:保证各道作业在各自的存储空间内运行,互不干扰。
3)程序的装入和链接
        创建进程首先要将程序和数据装入内存,将用户源程序变为可在内存中执行的程序。
        ①步骤描述:
        编译:由编译程序将用户源代码编译为若干目标模块。
        链接:由链接程序将编译后的一组目标模块和所需的库函数链接在一起,形成一个完整的装入模块。                                                                                                                                                  装入:由装入程序将装入模块装入内存运行。                     

操作系统期末复习_第13张图片        ②程序链接的方式
        静态链接:在程序运行之前,先将各目标模块及他们所需的库函数链接成一个可执行程序,此后不再拆开。
        装入时动态链接:编译后所得的一组目标模块在装入时,边装入边链接。
        运行时动态链接:对某些目标模块的链接,是在程序执行中需要该目标模块时才进行的。便于修改和更新以及实现对目标模块的共享。
        ③装入内存的方式
        绝对装入:在编译时即知道程序将装入的内存具体地址,则编译程序将产生绝对地址的目标代码。而后将程序和数据装入内存,只适用于单道程序环境。
        可重定位装入:在多道程序环境中,多个目标模块的起始地址均为 开始。装入内存时,通过所分配的内存起始地址加上程序内的相对地址进行地址的动态变换,一次完成,又称为静态重定位。(必须一次性全部装入,运行期间不能动态扩充和移动)。
        动态运行时装入:装入模块装入内存后并不立即进行地址转换,而是等到程序执
行时才进行。需要重定位寄存器的支持(可以将程序分到不连续的存储区中,程
序运行前只需要装入部分代码,运行期间根据需要动态分配内存,便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间)。
        ④逻辑地址空间与物理地址空间
        逻辑地址空间:程序编译后的每个模块都是以 开始编址,称为目标模块的逻辑地址。当链接为一个完整的可执行目标程序时,链接程序将按顺序以 开始编址,构造统一的逻辑地址空间。
物理地址空间:内存中物理单元的集合,是地址转换的最终地址,当装入程序将可执行代码装入内存中时,必须将逻辑地址转化为物理地址。
        ⑤内存保护
        内存分配前,需要保护操作系统不受用户进程的影响,同时保护用户进程不受其他用户进程的影响。
        内存保护的两种方式:
        a.在 中设立一对上、下限寄存器,存放用户作业在主存中的上下限地址,每当 要访问一个地址时,先根据这对上下限寄存器判断是否越界访问(上下界保护法)。
        b.采用重定位寄存器和限长寄存器来实现这种保护。重定位寄存器保存最小的物理地址,限长寄存器保存逻辑地址的最大值。进行内存访问时,先判断逻辑地址是否大于限长寄存器值,若未越界,则加上重定位寄存器的值映射成物理地址,再进行内存访问。

操作系统期末复习_第14张图片

2.覆盖与交换
        覆盖与交换技术是在多道程序环境下扩充内存的两种方法。
        1)覆盖
        早期系统主存小,仅存放一道用户程序,但存储空间放不下用户进程也时有发生,这一问题可以通过覆盖技术解决。
        覆盖技术的思想:将程序分为多个段(多个模块)。常用的段常驻内存,不常用的段在需要时调入内存。把内存划分为一个固定区和若干个覆盖区,固定区存放用户程序经常活跃的部分,调入后就不再调出(除非运行结束),其余部分按调用关系分段,将即将访问的段放在覆盖区,需要用到时调入内存,用不到时调出内存。其他放在外存,在需要调用前,系统将其调入覆盖区,替换原有的段。 必须由程序员声明覆盖结构,操作系统完成自动覆盖。

操作系统期末复习_第15张图片

        缺点:对用户不透明,增加了用户编程负担,覆盖技术只用于早期的操作系统中。
        2)交换
        基本思想:把处于等待状态的进程或者被 剥夺运行权限的进程从内存移出到辅存,这一过程称为换出;把准备好竞争 的进程从辅存移到内存,这一过程称为换入。暂时换出外存等待的进程状态为挂起状态(挂起态)。挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态。

 操作系统期末复习_第16张图片

         ①具有对换功能的操作系统中,通常把磁盘空间分为文件区和对换区两部分,文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式:对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区,由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要是求换入换出速度,因此通常对换区采用连续分配方式。总之,对接速度比文件区的更快。
        ②交换通常在许多进程运行且内存吃紧时运行,而系统负有降低就暂停。例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程,如果缺页明显下降,就可以暂停换出。
        ③可优先换出阻塞进程:可换出优先级低的进程:为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间。(注意,PCB会常驻内存,不会被换出外存)

3.连续分配管理
1)单一连续分配
在单一连续分配方式中,内存被分为:系统区和用户区。
系统区通常位于内存的低地址部分,用于存放操作系统系统区,用户区用于存放
用户进程相关数据。
特点:内存中只能有一道用户程序,用户程序独占整个用户区空间。
优点:实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内
存保护(如:早期的 操作系统MS-DOS)。
缺点:只能用于单用户、单任务的操作系统中;有内部碎片;存储器利用率极低。

2)固定分区分配
固定分区分配是最简单的一种多道程序存储管理方式,它将用户内存空间划分
为若干个固定大小的区域,每个分区只装入一道作业。
两种方法:
①分区大小相等:缺乏灵活性,只适合用于用一台计算机控制多个相同对象的场
合。
②分区大小不等:增加了灵活性,可以满足不同大小的进程需求。
为便于内存分配,通常将分区按大小排队,建立一张分区说明表。

操作系统期末复习_第17张图片

优点:实现简单,无外部碎片。
缺点:a.当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采用覆盖技术来解决,但又会降低性能;
b.会产生内部碎片,内存利用率低。 

4.动态分区分配
        动态分区分配又称可变分区分配,是一种动态划分内存的分区方法。这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区。系统分区的大小和数目是可变的。
两种常用的数据结构:空闲分区表和空闲分区链
①空闲分区表:每个空闲分区对应一个表项。表项中包含分区号、分区大小、分
区起始地址等信息。
②空闲分区链:每个分区的起始部分和末尾部分分别设置前向指针和后向指针。
起始部分处还可记录分区大小等信息。

        下面介绍四种动态分区分配算法
                1)首次适应(First Fit)算法。空闲分区以地址递增的次序链接。分配内存时顺
序查找,找到大小能满足要求的第一个空闲分区。
                2)最佳适应(Best Fit)算法。空闲分区按容量递增的方式形成分区链,找到第一
个能满足要求的空闲分区。
缺点:会产生很多的外部碎片。
                3)最坏适应(Worst Fit)算法。又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序链接,找到第一个能满足要求的空闲分区,即挑选出最大的分区。
缺点:不利于后续大进程使用,会造成后续大进程到达时无内存分区可用的问题。
                4)邻近适应(NextFit)算法。又称循环首次适应算法,由首次适应算法演变而成。不同之处是,分配内存时从上次查找结束的位置开始继续查找。

操作系统期末复习_第18张图片

 操作系统期末复习_第19张图片

5.分页存储管理方式
分页存储管理方式又分为基本分页存储管理方式和请求分页存储管理方式。
        1)基本分页存储管理方式
        算法思想:把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个个小部分,分页管理不会产生外部碎片。
        分页存储管理的基本概念:
        ①页面和页面大小进程中的块称为页(page),内存中的块称为页框(Page Frame,或页帧)。外存也以同样的单位进行划分,直接称为块(Block)。进程在执行时需要申请主存空
间,即要为每个页面分配主存中的可用页框,这就产生了页和页框的一一对应。
页面大小应该适中,应为 的整数幂。 

        ②地址结构

 前一部分为页号 ,后一部分为页内偏移量 。地址长度为32位,其中0-11位为页内地址,即每页大小为4KB;12-31位为页号,地址空间最多允许2的20次方页。
        ③页表
        为了便于在内存中找到进程每个页面所对应的物理块,系统为每个进程建立一张页表,它记录页面在内存中对应的物理块号,页表一般存放在内存中。页表是由页表项组成的,页表项由页号和物理内存中的块号组成。

 

         ④地址变换机构
        a.基本的地址变换结构
        地址变换机构的任务是将逻辑地址转换为内存中的物理地址。地址变换是借助于页表实现的。

 变换过程计算:
        设页面大小为L ,逻辑地址A 到物理地址E 的变换过程如下(逻辑地址、页号、
每页的长度都是十进制数):
        Ⅰ.计算页号P(P=A/L)和页内偏移量W(W=A%L)
        Ⅱ.比较页号P 和页表长度M ,若P>M,则产生越界中断,否则继续执行。
        Ⅲ.页表中页号P对应的页表项地址=页表始址F + 页号P* 页表项长度,取出b该页表项内容 ,即为物理块号。要注意区分页表长度和页表项长度。页表长度的值是指一共有多少页,页表项长度是指页地址占多大的存储空间。
        Ⅳ.计算E=b*L+W,用得到的物理地地上E去访问内存。

题 1.若页面大小L为1KB ,页号2对应的物理块为b=8 ,计算逻辑地址A=2500的物理地址 

二进制算法:

A = 2500 (十进制)=  1001 1100 0100 (二进制)

L = 1KB = 1024 B 

页号P = A / L = 砍一刀 L 砍 10 位  1001 1100 0100

                                            10代表2  01 1100 0100代表452

页号2转换为块号8  即 1000

物理地址为 1000 01 1100 0100

十进制算法:

A = 2500

L = 1KB = 1024B

P = A/L = 2500/1K = 2500/1024 = 2

W = A%L = 2500%1024 = 425

物理地址 为 8*1024+425

分页管理方式的两个主要问题:
        Ⅰ.每次访存操作都需要进行逻辑地址到物理地址的转换,地址转换过程必须足够快,否则访存速度会降低;
        Ⅱ.每个进程引入页表,用于存储映射机制,页表不能太大,否则内存利用率会会降低。
        b.具有快表的地址变换机构
        快表,又称联想奇存器(TLB),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,内存中的页表常称为慢表。
        引入快表后,地址的变换过程:

6.页面置换算法
        常见的置换算法有以下四种:
        1)最佳(OPT)置换算法
算法思想:选择以后永不使用的页面淘汰或者在最长时间内不再被访问的页面,
以保证获得最低的缺页率。

        2)先进先出(FIFO)页面置换算法
        算法思想:优先淘汰最早进入内存的页面,即在内存中驻留时间最久的页面。 

         3)最近最久未使用(LRU)置换算法
        算法思想:选择最近最久时间未访问过的页面予以淘汰。

         4)时钟(CLOCK)置换算法
        LUR算法的性能接近于OPT算法,但实现起来比较困难,且开销大:FIFO算法实现简单,但性能差。因此,操作系统的设计者尝试了很多算法,试图用比较小的开销接近 算法的性能,这类算法都是LUR算法的变体。因为算法要循环扫描缓冲区,像时钟的指针一样转动,所以称为CLOCK算法,又称最近未用(NRU)算法。
简单算法实现方法:

        5)最少使用(LFU)置换算法 

        选择到当前时间为止被访问次数最少的页面被置换;                                                                        每页设置访问计数器,每当页面被访问时,该页面的访问计数器加1;                                              发生缺页中断时,淘汰计数值最小的页面,并将所有计数清零;

 

第五章设备管理

磁盘的组织与管理

磁盘(Disk)是由表面涂有磁性物质的金属或塑料构成的圆形盘片,通过一个称为磁头的导体线圈从磁盘存取数据。在读/写操作期间,磁头固定,磁盘在
下面高速旋转。
如图 所示,磁盘盘面上的数据存储在一组同心圆中,称为磁道。每个磁道与磁头一样宽,一个盘面有上千个磁道。磁道又划分为几百个扇区,每个扇区固定存储大小(通常为512B),一个扇区称为一个盘块。相邻磁道及相邻扇区间通过一定的间隙分隔开,以避免精度错误。注意,由于扇区按固定圆心角度划分,所以密度从最外道向里道增加,磁盘的存储能力受限于最内道的最大记录密度。
磁盘安装在一个磁盘驱动器中,它由有磁头臂、用于旋转磁盘的主轴和用于数据输入/输出的电子设备组成。如图所示,多个盘片垂直堆叠,组成磁盘组,每个盘面对应一个磁头所有磁头固定在一起,与磁盘中心的距离相同且一起移动。所有盘片上相对位置相同的磁道组成柱面。按照这种物理结构组织,扇区就是磁盘可寻址的最小存储单位,磁盘地址用“柱面号· 盘面号· 扇区号(或块号)”表示。

操作系统期末复习_第20张图片 

 磁盘按不同的方式可分为若干类型:磁头相对于盘片的径向方向固定的,称为固定头磁盘,每个磁道一个磁头。磁头可移动的,称为活动头磁盘,磁头臂可来回伸缩定位磁道。磁盘永久固定在磁盘驱动器内的,称为固定盘磁盘,可移动和替换的,称为可换盘磁盘。

2.磁盘调度算法

 

第六章文件系统 

自由空间管理 计算相对块号

 

 按名存取文件:

 

 

 

 

 

 信号量PV操作

生产者消费者

同步:先p后v  初始值为0或n

互斥:先v后p  初始值为1 

 p在有同步有互斥 先同步后互斥  

v 同步互斥先后都可以

建议互斥的pv操作距离缓冲区更近 

读者写者

在读者设置一个count

当count==0时  p(rw)  

count++;

开始读

count--;

当count==0时  v(rw)

防止count出错在count上加一个互斥 保证count执行和pv操作绑定

哲学家吃饭问题

先给筷子和哲学家编号0-n

方法一:限制最多吃饭人数 为 n-1   设置信号量r = n-1

方法二:奇数号先拿做筷子,偶数号先拿有筷子

方法三:仅当哲学家的左右手筷子都拿起时才允许进餐。限制同时拿筷子的人数,通过互斥信号量对取左边筷子和右边筷子进行保护

当有抢碗(m)情况出现:

        m>=n  m = n-1;

        m

将问题转换为方法一 先拿完拿筷左筷子拿右筷子 吃饭 还筷子还碗

你可能感兴趣的:(java,面试,开发语言)