————————
第2章 进程管理
记录型信号量(record semaphore):每个信号量s除一个整数值s.value(计数)外,还有一个进程 等待队列 s.L,其中是阻塞在该信号量的各个进程的标识
二进制信号量(binary semaphore):只允许信号量取0或1值
条件同步中,信号量初值设为0;
①、先来先服务: FCFS
②、最短作业优先
③、最短剩余时间优先
④、响应比最高者优先
分时系统调度算法:
①、轮转调度
②、优先级调度
③、多级队列调度
④、彩票调度
实时系统调度算法:
①、单比率调度:在实时系统中,事件是周期性发生的,单比率调度是视周期长度而定的抢占式策略,周期越短,优先级越高。
②、限期调度:当一个事件发生时,对应的实时进程/线程就被加入就绪队列,此队列按照截止期限排序,对于周期性事件,截止期限即为事件下一次发生的时间。
③、最少裕度法:先计算各个进程/线程的富裕时间,即裕度,然后选择裕度最少者执行。计算公式为:裕度=截止时间-(就绪时间+计算时间);裕度越小说明进程/线程越紧迫,就绪后令其尽快运行。
2、对计算型进程,每次执行完时间片后进入更低级队列。最终采用最大时间片来执行。
I/O型进程优先级高于计算型进程。
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
死锁的处理方法:
死锁预防:破坏四个条件;有序资源分配法可以破坏循环等待的条件;静态分配资源可以打破“占有和等待条件”
死锁避免:分配资源前先判断是否会出现死锁;包括 银行家算法
死锁检测;
死锁恢复:进程终止;进程回退;资源抢占剥夺;
1、对它所必须使用的而且属于同一类的所有资源,必须一次申请完;
2、在申请不同类资源时,必须按各类设备的编号依次申请。
银行家算法:该算法需要检查申请者对资源的最大需求量,如果系统现存的各类资源可以满足申请者的请求,就满足申请者的请求。
这样申请者就可很快完成其计算,然后释放它占用的资源,从而保证了系统中的所有进程都能完成,所以可避免死锁的发生。
1.程序ID(PID、进程句柄):它是唯一的,一个进程都必须对应一个PID。PID一般是整型数字
2.特征信息:一般分系统进程、用户进程、或者内核进程等
3.进程状态 :运行、就绪、阻塞,表示进程现的运行情况
4.优先级:表示获得CPU控制权的优先级大小
5.通信信息:进程之间的通信关系的反映,由于 操作系统 会提供 通信信道
6.现场保护区:保护阻塞的进程用
7.资源需求、分配 控制信息
8.进程实体信息,指明程序路径和名称,进程数据在物理内存还是在 交换分区 (分页)中
9.其他信息:工作单位,工作区,文件信息等
1.标识信息。
用于唯一地标识一个进程,常常分由用户使用的外部标识符和被系统使用的内部标识号。几乎所有操作系统中进程都被赋予一个唯一的、内部使用的数值型的进程号,操作系统的其他控制表可以通过进程号来交叉引用进程控制表。常用的标识信息包括进程标识符、父进程的标识符、用户进程名、用户组名等。
2.现场信息。
用于保留一个进程在运行时存放在处理器现场中的各种信息,任何一个进程在让出处理器时必须把此时的处理器现场信息保存到进程控制块中,而当该进程重新恢复运行时也应恢复处理器现场。常用的现场信息包括通用寄存器的内容、控制寄存器(如PSW寄存器)的内容、用户堆战指针、系统堆饺指针等。
3.控制信息。
用于管理和调度一个进程。常用的控制信息包括:
l)进程的调度相关信息,如进程状态、等待事件和等待原因、进程优先级、队列指引元等;
2)进程组成信息,如正文段指针、数据段指针;
3)引进程间通信相关信息,如消息队列指针、信号量等互斥和同步机制;
4)进程在辅存储器内的地址;
5)CPU资源的占用和使用信息,如时间片余量、进程己占用CPU的时间、进程己执行的时间总和,记账信息;
6)进程特权信息,如在内存访问和处理器状态方面的特权;
1 动态性:进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。
2 并发性:指多个进程实体,同存于内存中,能在一段时间内同时运行,并发性是进程的重要特征,同时也是操作系统的重要特征。引入进程的目的就是为了使程序能与其他进程的程序并发执行,以提高资源利用率。
3 独立性:指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。凡未建立PCB的程序都不能作为一个独立的单位参与运行。
4 异步性:由于进程的相互制约,使进程具有执行的间断性,即进程按各自独立的、 不可预知的速度向前推进。异步性会导致执行结果的不可再现性,为此,在操作系统中必须配置相应的进程同步机制。
5 结构性:每个进程都配置一个PCB对其进行描述。从结构上看,进程实体是由程序段、数据段和进程控制段三部分组成的。
空闲则入;
忙则等待;
有限等待;
让权等待;
作业调度:又称宏观调度,或 高级调度 。作业调度的主要功能是根据 作业控制块 中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。然后再将新创建的 进程插入 就绪 队列 ,准备执行。
交换调度:又称 中级调度 。其主要任务是按照给定的原则和策略,将处于外存交换区中的 就绪状态 或等待状态或内存等待状态的进程交换到外存交换区。交换调度主要涉及到内存管理与扩充。因此在有些书本中也把它归入内存管理部分。
进程调度:又称微观调度或 低级调度 。其主要任务是按照某种策略和方法选取一个处于就绪状态的进程占用处理机。在确立了占用处理机之后,系统必须进行 进程上下文 切换以建立与占用处理机进程相适应的执行环境。
线程调度:进程中相关堆栈和控制表等的调度。
(1) 竞争资源
(2) 进程推进顺序非法。
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
方法步骤:
如果一个图可完全简化,则不会产生死锁;如果一个图不可完全简化(即:图中还有“边”存在),则会产生死锁。这就是”死锁定理”。
————————
第三章 内存管理
固定分区:又称定长分区或静态分区模式,是满足多道程序设计需要的最简单的存储管理技术。基本思想:给进入主存的用户作业划分一块连续存储区域,把作业装入该连续存储区域,若有多个作业装入主存,则它们可并发执行。
可变分区:可变分区存储管理不是预先把内存中的用户区域划分成若干固定 分区,而是在作业要求装入内存时,根据用户作业的大小和当时内存空间使用情况决定是否为该作业分配一个分区。因此 分区大小不是预先固定的,而是按作业需求量来划分的 ;分区的个数和位置也不是预先确定的。它有效地克服了固定分区方式中,由于分区内部剩余内存空置造成浪费的问题。
外部碎片问题:动态分区分配(可变是分区管理)
分页管理不会产生外部碎片,内部碎片也很小。
优点:是无需增加硬件地址转换机构,便于实现程序的静态连接。在早期计算机系统中大多采用这种方案。
缺点(:1)程序的存储空间只能是连续的一片区域,而且在重定位之后就不能再移动。这不利于内存空间的有效使用。(2)各个用户进程很难共享内存中的同一程序的副本。
动态重定位:是在程序执行期间每次访问内存之前进行重定位。这种变换是靠硬件地址变换机构实现的。通常采用一个重定位寄存器,其中放有当前正在执行的程序在内存空间中的起始地址,而地址空间中的代码在装入过程中不发生变化。
优点:(1)程序占用的内存空间动态可变,不必连续存放在一处。(2)比较容易实现几个进程对同一程序副本的共享使用。
缺点:是需要附加的硬件支持,增加了机器成本,而且实现存储管理的软件算法比较复杂。
现在一般计算机系统中都采用动态重定位方法。
重定位的结果还是 逻辑地址 。
————————
第四章 文件管理
①顺序文件:所有记录具有相同长度,并且由相同数目、长度固定的域按照特定的顺序组成(记录按关键字排序)。
*优点:通常用于批处理文件,即每次读或写一大批记录,顺序文件是最佳的;只有顺序文件才能存储在磁带上。
*缺点:对于查询或更新记录的交互式应用,顺序文件性能很差(在访问时,为了匹配关键字,需要顺序查找文件);增加或删除一个记录比较困难。
②索引文件:对主文件的每个记录(可以是变长的记录),索引表中设有一个相应的表项,用于记录该记录的长度L及指向该记录的指针。由于索引表本身是一个定长记录的顺序文件,从而可以方便的实现直接存取。
检索过程:首先根据用户提供的关键字,并利用折半查找法去检索索引表,从中找到相应的表项;再利用该表项中给出的指向记录的指针值,去访问所需的记录。每当要向索引文件中增加一个新记录时,便需对索引表进行修改。
*优点:索引表具有较快的检索速度,因此主要用于对信息处理的及时性要求较高的场合。
*缺点:存储成本大。除了主文件,还需配置一张索引表,而且每个记录都要有一个索引项。
③索引顺序文件:是顺序文件和索引文件相结合的产物,最常见的一种逻辑文件方式,克服了变长记录不便于直接存取的缺点,而且付出的代价也不算太大。
结构:将顺序文件所有记录分成若干个组;为顺序文件简历一张索引表,在索引表中为每组中的第一个记录建立一个索引项,其中含有该记录的键值和指向该记录的指针。
检索过程:首先利用用户提供的关键字以及查找算法去检索索引表,找到该记录所在记录组中第一个记录的表项,从中得到该记录组第一个记录在主文件中的位置;然后利用顺序查找法去查找主文件,从中得到所要求的记录。
④直接文件(Hash文件):可根据给定的记录键值,直接获得指定记录的物理地址。
特点:利用Hash函数,可将记录键值转换为相应记录的地址。通常由Hash函数所求得的并非是相应记录的地址,而是指向一目录表相应表目的指针,该表目的内容指向相应记录所在的物理地址。
常用的三种文件分配方式:连续分配方式、链接分配方式、索引分配方式。
①连续分配方式:为每一个文件分配一组相邻接的盘块,一组盘快地址定义了磁盘上的一段线性地址。
优点:顺序访问容易、快。
缺点:要求有连续的存储空间,会产生许多外部碎片;必须实现知道文件的大小。
②链接分配方式:通过在每个盘块上的链接指针,将同属于一个文件的多个离散的盘块链接成一个链表,把这样形成的物理文件称为链接文件。
优点:采用离散分配方式,消除了外部碎片,提高了外存空间利用率;无需知道文件的大小,可根据需要动态分配。
缺点:局部性原理不在使用;不支持高效的直接存取(必须顺序查找)。
③索引分配:为每个文件分配一个索引块,再把分配给文件的所有盘块号都记录在该索引块中,因而索引块就是一个含有许多盘块号的数组。
优点:支持随机访问;不会产生外部碎片;当文件较大时,由于链接分配方式。
缺点:可能花费较多的外存空间,每建立一个文件时,便需为之分配一个索引块,将分配给该文件的所有盘块号记录于其中。
①位示图法:使用一个向量,向量的每一位对应于磁盘中的每一块。0:表示空闲块,1:表示已使用块。
优点:很容易找到一个或一组连续的空闲块;位示图很小,占用空间少。常用语微型机或小型机中。
②空闲表法(空闲文件目录):类似于连续分配方式,系统为外存上的所有空闲去建立一张空闲表,每个空闲区对应于一个空闲表项,其中包括表项序号、该空闲区的第一个盘块号、该区的空闲盘块信息。
③空闲链表法(自由链表法):将所有空闲盘区拉成一条空闲链。根据构成链的基本元素不同分为:空闲盘块链和空闲盘块区。
④成组链接法:
空闲表法和空闲链表法都不适用于大型文件系统,因为这会使空闲表和空闲链表太长。在UNIX中采用的是成组链接法,结合上述两种方法而形成的一种空闲盘块管理方法。
①连续:访问1次即可。
②隐式链接:访问n次。与磁盘块的位置n有关。(一般链接分配指的是隐式链接分配)
③直接地址索引(一级索引):需要2次访外存,一次读索引块,一次真正读数据。一般不使用一级索引这个名称,一般一级索引指的是一级间接索引。
k-1级间接地址索引(k级索引):需要k+1次访外存。
◆主分区:总共最多只能分四个。(每个硬盘最多只能划分为4个主分区,或者是3个主分区加上一个扩展分区,这是因为在硬盘的开头,也就是0磁头(head)、0柱(cyliner)、0面(side)、0磁道(track)、0扇区(sector)总共512字节存放着硬盘最重要的信息MBR(Master Boot Record,主引导记录)和分区的相关信息,由于记录空间只有那么大,所以也只能记录这4个分区的信息。分区表 partition table 用来记录整块硬盘分区的状态,且只有64bytes,最多只能容纳四个分区。 )
◆扩展分区:只能有一个(这是操作系统限制的,理论上来讲,一个扩展分区可以分成多个逻辑分区,因此不需要有多个扩展分区),也算作主分区的一种,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用。
◆逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘Linux最多支持11个逻辑分区。
文件的组织形式是文件的结构,从不同的角度分析文件有不同的结构形式:逻辑结构和物理结构。从用户角度出发,研究文件的抽象组织方式而定义的文件组织形式为文件的逻辑结构;从系统的角度出发,研究文件的物理组织方式而定义的文件组织形式为文件的物理结构。文件的逻辑结构独立于辅存,帮助用户分析信息之间的关系及含义;而物理结构主要关注文件信息的存储形式,帮助用户了解与存储设备相关知识。
1、文件的逻辑结构
文件的逻辑结构可以分为无结构的字符流式文件和有结构的记录式文件。
1)无结构的字符流式文件
无结构的字符流式文件是相关的有序字符的集合。文件长度即为所含字符数。流式文件不分成记录,而是直接由一连串信息组成。对于流式文件而言,它是按信息的个数或以特殊字符为界进行存取的。常见的采用这种结构的有源程序文件和可执行文件。
无结构的字符流式文件的优点主要是空间利用上比较节省,因为没有额外的说明(如记录长度)和控制信息等;但应当注意的是文件信息的检索问题,即采用的逻辑结构应方便系统查找所需信息,减少信息存储的变动。
2)有结构的记录式文件
文件的信息划分为多个记录,用户以记录为单位组织信息。记录是具有特定意义的信息单位,它包含记录在文件中的相对位置、记录名、记录的属性等信息组成。记录式文件中,每一个记录都有一项信息,用来唯一标识相应的记录,将各个记录区分开来,我们称这个信息为主键。一个记录中的任一数据项或若干数据项的组合均可作为记录键,除主键外的其他键成为次键。
有结构的记录式文件就是按照一定的结构来组织记录信息,按照记录的不同组织形式,常见的记录式文件可以分为连续结构和顺序结构。
1)连续结构:按照记录生成的先后顺序连续排列。
2)顺序结构:设定一种顺序规则,以记录的键为索引对象,按照设定的顺序规则将记录顺序排列起来。
逻辑上的文件信息最终都要按照一定存取方法存储到物理设备中,文件系统按照什么方式将文件信息存储到存储设备中,这要与文件的逻辑结构和存取内容及目的相关。
1)顺序存取:按照文件的逻辑地址依次顺序存取。
2)随机存取:用户按照记录的编号进行存取,也称为直接存取或立即存取。这种方式下,根据存取命令把读、写指令直接移动到读/写处进行操作。
3)按键存取:根据给定记录的键进行存取。给定键后,首先搜索该键在记录中的位置,然后进一步搜索包含该键的记录,在含有该键的所有记录中查找所需记录,当搜索到所需记录的逻辑位置后,再将其转换到相应的物理地址进行存取。
2、文件的物理结构
文件的物理结构是指文件在辅助存储器上存储的结构形式,其和文件的存取方法有密切关系。文件物理结构的优劣,直接影响到文件系统系统的性能。
为了有效地分配存储器的空间,通常把它们分成若干块,并以块为单位进行分配和传递,每一个块称为物理块,而块中的信息称为物理记录。物理块长通常是固定的,在磁盘上经常以512B至8KB为一块。文件在逻辑上可以看成是连续的,但在物理介质上存放时可以有多种形式。目前常用的文件物理结构有顺序结构文件、链接结构文件、索引文件、Hash文件。
1)顺序结构文件
把逻辑文件的信息顺序地存储到连续的物理盘块中,这样形成的文件称为顺序文件。这种文件保证了逻辑文件中的记录顺序与存储器中文件占用盘块的顺序地一致性。
优点:
<1>管理简单:一旦知道文件存储的起始块号和文件块数,就可以立即找到所需的文件信息。
<2>顺序存取速度快:要获得一批相邻的记录时,其存取速度在所有文件物理结构中是最快的。
缺点:
<1>要求连续存储空间:如同内存的连续分配一样,可能形成许多存储空间的碎片。
<2>必须事先知道文件的长度,才能为该文件分配合适的连续存储空间。
2)链接结构文件
链接结构的特点是使用指针(也称为链接字)来表示文件中各个记录之间的关联。在链接结构文件中,一个逻辑上连续的文件,可以存放在不连续的存储块中,每个块之间用单向链表链接起来。为了使系统能方便地找到逻辑上连续的下一块的物理位置,在每个物理块中设置一个指针,指向该文件的下一个物理块号,使得存放同一个文件的物理块链接成一个队列,该结构为链接文件。
优点: <1>不要求为文件分配连续的存储空间,一定程度上解决了空间碎片问题,提高了存储空间利用率因为采用链表的思想,文件中记录的增删工作比较容易实现
<2>因为采用链表的思想,文件中记录的增删工作比较容易实现
缺点:
<1>只适合于顺序存取,不便于直接存取,为了找到某个物理块的信息,必须从头开始,逐一查找每个物理块,直到找到为止,因此降低了查找速度。
<2>在每个物理块中都要设置一个指针,占去一定的存储空间
3)链接结构文件
索引文件是实现非连续存储的另一种办法,适用于数据记录保存在随机存取存储设备上的文件。这种结构的组织方式要求为每一个文件建立一张索引表,其中每个表目指出文件逻辑记录所在的物理块号,索引表指针由FCB给出。
当文件很大时,索引表也将很大,需要占用多个盘块。管理多个盘块的索引表有两种方法:一是将存放索引表的盘块用指针链接起来,称为链接索引。链接索引需要顺序地读取索引表各索引表项。因此,与链接文件相似,读取后面的索引表项需进行多次磁盘I/O操作;另一种是采用多级索引,即为多个索引表再建立一个索引表(称为主索引表),形成二级索引。如果二级索引的主索引表仍然不能存放在一个盘块中,就需要三级索引。
优点:
是链接结构的一种扩展,具有链接结构的优点,还克服了只能作顺序存取的缺点,具有直接读写任意一个记录的能力,便于文件的增加和删除,可以方便地进行随机存取。
缺点:
<1>增加了索引表的空间开销和查找时间,索引表的信息量甚至可能远远超过文件记录本身的信息量。
<2>在存取文件时首先查找索引表,增加了一次读盘操作,从而降低了文件访问的速度。都但是可以采取补救措施,例如在文件读取前,事先把索引表放在内存中,这样以后的文件访问可以直接在内存中查询索引表,以加快访问速度。
4)Hash文件
在直接存取设备上,文件的物理结构还有一种组织方式,即采用寻址结构。在这种方式中,把记录中的关键码通过某种计算,转换为记录的相应地址。这种存储结构是通过指定记录在存储介质上的位置进行直接存取的,记录无所谓次序。一般来说,用于地址的总数比可能的关键码总数要少得多,所以不会出现一一对应关系。那么就有可能存在着不同的关键码计算后,得到了相同的地址,这种现象称为“地址冲突”。而这种通过对记录的关键码施加变换而获得相应地址的变换方法,通常称为Hash方法,或称为散列法、杂凑法。利用Hash方法建立的文件结构称为。Hash文件。这种物理结构适用于不宜采用连续结构,记录次序比较混乱,又需要快速存取的情况。例如,一个存取学生信息的文件,将班级信息作为索引,凡班级相同的同学作为一个数据,这样建立的Hash表可以用来快速查找同一班级学生的信息,加快了查询速度。
优点:
查找不需要做索引,可以快速地直接存取。
缺点:
当地址冲突发生时,需要有解决冲突的方法,这称为溢出处理技术,也是设计Hash文件需要考虑的主要内容。常用的溢出处理技术有线性探测法、二次探测法、拉链法、独立溢出区法等。
存取方法
1)顺序存取
数据以块的形式存放,只有前面的物理块被访问后,后续的物理块才能被访问,块与块之间用间隔分开。
2)直接存取