- 进程同步和互斥
进程同步:为完成某种任务而建立的两个或多个进程,需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。
进程互斥:两个或两个以上的进程由于不能同时使用同一资源,只能一个进程使用完了另一个进程才能使用的现象。 - 临界资源和临界区
- 临界资源:critical resource,一次仅允许一个进程访问的资源
临界区:critical section,在每个程序中,访问临界资源的那段代码 - 为防止两个进程同时进入临界区,同步机制应遵循的原则:
空闲让进,忙则等待,有限等待,让权等待 - 原语:由若干条机器指令构成,完成一种特定功能的程序段。这段程序在执行期间不允许被分割,必须一次执行完。P操作申请一个资源,V操作释放一个资源。
- 进程通信
进程通信是指进程之间的信息交换,PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式,主要有以下三类:
- 共享存储
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。 - 消息传递
- 直接通信方式:消息缓冲
发送进程直接把消息发送给接受进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。 - 间接通信方式:信箱通信
发送进程将消息发送到某个中间实体(信箱)中,接收进程从中取出消息。
- 直接通信方式:消息缓冲
- 管道通信
管道是用于连接一个读进程和一个写进程的共享文件,又称为pipe文件。向管道提供输入的进程(写进程),以字符流的形式将大量数据送入管道,而接受管道输出的进程(读进程)可从管道中接收数据。
使用管道的两种限制:管道只能在具有亲缘关系的进程之间通信(具有公共祖先的进程之间);管道通信方式是单向的,进程间双向通信通常需要两个管道。
-
死锁
多个进程在运行过程中,因为争夺资源而造成的一种僵局。
产生死锁的原因:资源不足导致的资源竞争;并发执行的顺序不当
产生死锁的必要条件:- 互斥条件:在一段时间内某资源只能由一个进程占有
- 请求和保持:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又已被其他进程占有。此时请求进程阻塞,但又对已经获得的资源保持不放。
- 不可剥夺:进程已获得的资源在未使用完之前不能被剥夺,只能在使用完时由自己释放。
- 环路等待:在发生死锁时,必然存在一个进程-资源的封闭环形链。
死锁的处理方法:
- 死锁预防:破坏产生死锁的四个必要条件之一
- 死锁避免:在资源的动态分配中,防止系统进入不安全状态(可能产生死锁的状态)。如银行家算法(最大需求矩阵Max,分配矩阵Allocation,可利用资源向量Available)
- 死锁检测:通过将资源分配图简化的方法来检测系统状态是否为死锁状态
- 死锁解除:重新启动;撤销进程;剥夺资源;进程回退
-
存储管理
存储管理的目的:充分利用内存;尽可能方便用户使用;解决程序空间比实际内存空间大的问题
存储管理的功能:内存空间的分配和回收;地址再定位;存储共享和保护;内存空间的扩充
物理地址(绝对地址):内存中存储单元的地址,物理地址可直接寻址。进程在运行时执行指令和访问数据最后都要通过物理地址从主存中存取
逻辑地址(相对地址):以0为起始地址,用户的程序经过编译后的目标代码的地址。
地址映射:将用户程序中的逻辑地址转换为机器直接寻址的物理地址。
内存保护:内存分配前,需要保护操作系统和其它用户进程不受当前进程的影响。内存管理机构动态地将逻辑地址
与界地址寄存器
进行比较,如果未发生越界,则加上重定位寄存器
的值后映射成物理地址,再送到内存单元。 -
连续分配管理——分区存储管理
原理:把内存分成一些大小相等或不等的分区,每个应用进程占用一个分区。操作系统占用其中一个分区。
- 固定分区:分区的大小固定,会产生内碎片。
- 动态分区:根据进程的大小动态创建分区,但随着进程换入/换出会产生更多外碎片。
分配算法:最先匹配法(first-fit);下次匹配法(next-fit);最佳匹配法(best-fit);最坏匹配法(worst-fit)
- 非连续分配管理——分页和分段存储管理
非连续分配允许一个程序分散地装入到不相邻的内存分区中,这也就需要额外的空间去存储它们的索引,使得非连续分配方式的存储密度低于连续存储方式。
非连续分配管理方式根据分区大小是否固定分为分页存储管理
和分段存储管理
。 - 分页存储管理
- 在分页存储管理中,又根据运行作业时是否要把作业的所有页面都装入内存中才能运行分为
基本分页存储管理
和请求分页存储管理
。 - 分页的思想:把主存空间划分成大小相等且固定的块,块相对较小,作为基本单位。每个进程以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。
- 分页的块的大小相对于分区要小很多,这样进程只会在为最后一个不完整的块申请一个主存块空间时才产生内碎片,并且这种碎片也是很小的
- 进程中的块称为页,为了便于在内存中找到进程的每个页面所对应的物理块,系统为每个进程建立了一张页表,实现从页号到物理块号的地址映射,页表一般存放在内存中。
因为程序数据存储在不同的页面中,而页面又离散的分布在内存中,因此需要一个页表来记录逻辑地址和实际存储地址之间的映射关系。 - 引入原因:分区存储管理会产生碎片,需移动分区。
- 由于页表也是存储在内存中的,因此需要两次的内存访问(一次是从内存中访问页表,从中找到指定的物理块号,加上页内偏移得到实际物理地址;第二次就是根据第一次得到的物理地址访问内存取出数据)。
解决办法:把页表放入一组高速缓冲存储器中,从而加快访问内存的速度。
把存放在高速缓存中的页表称为快表,而存放在内存中的页表称为慢表。快表的有效性是基于程序访问的局部性原理。
- 分段存储管理
分页是为了提高内存利用率,通过硬件机制实现,对用户完全透明;
而分段是为了满足程序员在编写代码的时候的一些逻辑需求(比如数据共享,数据保护,动态链接等)。
思想:- 用户程序划分:按程序自身的逻辑关系划分若干个程序段,每个程序段都有一个段名,且有一个段号。
- 内存划分:内存空间被动态的划分为若干个长度不同的区域,称为物理段。
- 内存分配:以段为单位分配内存,每一个段在内存中占据连续空间,但各段之间可以不连续存放。
每个进程有个段表,程序的每一段在段表中占用一个表目。
- 分页与分段存储的比较
- 段是依据程序的逻辑结构划分的,页是按内存线性空间物理划分的
- 段式程序地址空间是二维的,分页式程序地址空间是一维的
页式管理中页的大小是固定的,只要给出逻辑地址就可以通过整除和求余得到页号和页内偏移,所以地址空间是一维的
而段式管理每段的长度都是不固定的,不能通过整除求得段号和段内偏移,一定要显示给出(段号,段内偏移),所以地址空间是二维的 - 段是面向用户的,页对用户是透明的
- 段长由用户决定,且各段的大小一般不等,唯一的限制就是最大长度;页长由系统决定,各页的长度必须相等
- 虚拟内存
解决问题:内存小,作业大,作业多
实现原理:程序访问的局部性原理:程序总是趋向于使用最近使用过的数据和指令,相应地,执行所访问的存储空间也局限于某个内存区域。
实现方式:内存中只存放当前要执行的程序部分,其余的保存在外存上,操作系统根据需要随机地将需要的部分对换到内存执行。这样,系统好像为用户提供了一个比实际内存大得多存储器,称为虚拟存储器。
虚拟内存的实现主要有三种方式:请求分页存储管理、请求分段存储管理、请求段页式存储管理。 - 请求分页存储管理
请求分页建立在基本分页管理基础上,为了支持虚拟内存功能而增加了请求调页和页面置换功能。请求分页是目前最常用的一种实现虚拟存储器的方法。
在请求分页系统中,只要求将当前需要的一部分页面装入内存,便可以启动作业运行。在作业执行过程中,当所要访问的页面不在内存时,再通过调页功能将其调入,同时还可以通过置换功能将暂时不用的页面换出到外存上,以便腾出内存空间。 - 页面置换(淘汰)算法
请求分页存储管理:分页存储管理系统根据请求装入所需页面。也称虚拟页式存储管理,实现小内存、大作业。
实现方法:作业运行时,只将当前的一部分装入内存,其余的放入外存。一旦发现访问的页不在内存中,则发出缺页中断,有操作系统将其从外存调入内存。如果内存无空缺,则选择一个页淘汰。
- 先进先出算法(FIFO):选择在内存中驻留时间最长的页淘汰
- 最近最久未使用算法(LRU,Least Recently Used):淘汰最近没有使用的时间最长的页
- 最佳页面算法(OPT,Optimal):淘汰以后不再需要的或最远的将来才会用到的页面
- 最不经常使用(LFU,Least Frequently Used):淘汰访问次数最少的页面
颠簸(抖动)现象:在虚存中,页面在内存与外存之间频繁调度,系统效率急剧下降。如果一个进程在换页上用的时间多于执行时间,那么这个进程就在颠簸。
工作集是指在某段时间间隔内,进程要访问的页面集合。经常被使用的页面需要在工作集中,而长期不被使用的页面要从工作集中被丢弃。为防止系统出现抖动现象,需要选择合适的工作集大小。
- 文件系统
文件是以计算机硬盘为载体存储在计算机上的信息集合
文件系统管理的对象:文件、目录、磁盘空间
文件控制块FCB是操作系统为管理文件而设置的数据结构,存放了为管理文件所需的有关信息。
文件目录:所有的FCB组织在一起,就构成了文件目录。
目录文件:为了实现对文件目录的管理,通常将文件目录以文件的形式保存在外存,这个文件就叫目录文件。
- 文件分配方式:
- 连续分配:每个文件在磁盘上占有一组连续的块。支持顺序访问和直接访问
- 链接分配:采取离散分配方式,根据文件需求,动态分配盘块。采用链表或者链接表(FAT表)。无法直接访问,只能顺序访问。
- 索引分配:把每个文件的所有盘块号都集中放在一起构成索引表。
- 磁盘调度算法
先来先服务(FCFS)
最短寻找时间优先(SSTF)
电梯算法(当前移动方向+SSTF)
循环扫描(电梯算法回返时先快速移动到端点而不服务于任何请求)
网友评论