设备分配
从管理的层次看,设备的分配对象有两级,分别是作业级分配和进程级分配。
对作业级的分配工作,是在作业提交之后,开始执行前进行的。此时,系统按用户对设备的请求,将该作业所需要的有关设备及相关的通道和设备控制器资源,全部一次性的分给作业,直到作业用完自动释放归还给系统为止。这种分配方式属于静态分配。
进程级的分配,一般由在CPU上运行的进程,根据任务需要,通过系统功能调用提出I/O请求,设备分配程序按一定的策略将可用的设备分配给有I/O请求的进程。同时,还分配与设备相关的通道和设备控制器,以确保在CPU与外设之间形成一条有效的数据通路。由于这种分配是在执行中动态完成的,设备用完后又必须立即释放,所以,属于动态分配。
设备分配是对进程使用外设过程的管理
- 在进程间切换外设
- 通过一个虚拟设备把外设与应用进程隔开,只由虚拟设备来使用设备
设备控制表
系统中的每台设备都有一张设备控制表(DCT)。在DCT中充分体现出了设备的类型、标识符、状态(忙/闲)、重复执行次数、设备号以及与该设备相连的设备控制器的地址和等待使用该设备的进程队列。
系统为每个控制器配置一张用于记录本控制器情况的表,称为控制器控制表(COCT)。
系统为每个通道都配置一张通道控制表,通道控制表(CHCT)。
系统设备表:
- 在系统设备表(System Device Table, SDT)表中,每个接入系统中的外围设备都占有一个表目项,记录了该设备的名称、标识及设备控制表DTC的入口地址等相关的信息。
- SDT表在整个系统中只有一张,全面反映了系统中的外设资源的类型、数量、占用情况等,
设备分配的总原则:合理使用外设(公平和避免死锁),提高设备使用率。
设备分配算法
(1)先来先服务FCFS
- 当若干进程申请某一设备的请求得不到满足时,必须排入等队列中。这些进程由于申请的有先后次序,故排入等待队列的次序也是不相同的。当该设备被归还给系统后,就可以重新分配,此时,系统按进程在等待队列中排队的先后次序,将设备分给最早排入队列的那个进程。
(2)优先级高者优先
- 在此分配对策中,进程的优先级起了决定作用。当从等待某设备的进程队列中挑选下一个可占用设备的进程时,按进程所具有的优先级处理。高优先级的进程先分配,同优先级的,先申请先分配
3 设备分配的安全性
- (1)安全分配方式
- 进程发出I/O请求→阻塞→等待被唤醒
- (2)不安全分配方式
- 进程发出I/O请求→继续执行→根据需要继续发出I/O请求
【建议】在设备分配算法中增加安全性检查。比如银行家算法。
【分析】不安全分配方式可能造成分配不安全是因为有满足死锁成立的条件,即存在请求与保持。也可以认为该分配方式采用的是鸵鸟算法。如果出现死锁是小概率事件,那么用诸如银行家算法之类的死锁避免算法,尽管能够防止死锁的发生,但是从性价比的角度考虑是得不偿失。
设备独立性
绝对号(或物理设备名):
- 为了便于对这些外设进行管理,系统对每台进入计算机系统中的设备都给定一个对应的编号,作为调用时识别和区分设备用。这种编号无任何重复,一般被称为设备的绝对号(或物理设备名)。
相对号(或称逻辑设备名):
- 为了方便用户,也为了提高外设利用率,在计算机中规定用户申请外设时,只需要向系统说明所需用的某类设备,至于真正在实际中使用哪台设备,由系统根据这类设备的应用情况作出分配。即使用户所需多台同样的设备,系统也允许用户按自己的使用要求提出编号,这种由用户申请设备时所用的编号称为相对号(或称逻辑设备名)、
有了设备的绝对号和相对号后,用户编制程序使用的设备与实际使用的设备无关,这就是设备的独立性。
(2)设备独立性优点
- 1) 设备分配时的灵活性。
- 2)易于实现I/O重定向。
SPOOLing技术
将一台物理的IO设备虚拟为多台的逻辑IO设置,这样多个用户就可以共享一台物理IO设置了。
虚拟设备技术假脱机操作(Simultaneous Peripheral Operations On-Line,SPOOLing),利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上;或者相反。
利用假脱机技术,可把独享设备转变成具有共享特征的虚拟设备,从而提高设备利用率。
由于我们的多道程序技术引入后,我们的利用专门的外围控制机就可以使用程序来进行模拟了。
1)高速虚拟I/O操作:
应用程序的虚拟I/O比实际I/O速度提高,缩短应用程序的执行时间(尽快完成计算,并释放占用的计算机资源)。
另一方面,程序的虚拟I/O操作时间和实际I/O操作时间分离开来。
2)实现对独享设备的共享:
由SPOOLing程序提供虚拟设备,可以对独享设备依次共享使用。
磁盘存储器管理
CPU和内存的访问速度比磁盘要快若干个数量级,磁盘系统的性能对整个系统的性能有重要影响,磁盘设备管理的目标就是提高磁盘系统的性能。
温彻斯特硬盘
1973年,IBM研制成功了一种新型的硬盘IBM3340。IBM3340拥有两个30MB的存储单元,而当时一种很有名的“温彻斯特来复枪”的口径和装药也恰好包含了两个数字“30”;于是这种硬盘的内部代号就被定为“温彻斯特”。温彻斯特硬盘拥有几个同轴的金属盘片,盘片上涂着磁性材料。它们和可以移动的磁头共同密封在一个盒子里面,磁头能从旋转的盘片上读出磁信号的变化。温彻斯特硬盘的参数包括磁头数(heads)、柱面数( tracks)、扇区数和字节数。各个盘面上的同一磁道组成一个柱面。每个磁道有30个扇区。每个扇区存储600个字节,其中512个字节存储数据,其余字节存储控制信息。
2磁盘的类型
- 1) 固定头磁盘:刚性磁臂、使用于大容量磁盘。
- 2) 移动头磁盘:移动磁臂、使用于中小型磁盘设备,
磁盘的物理构造决定了一次磁盘的I/O操作。物理记录的位置必须由柱面号,磁头号(盘面号)和扇区号三个参数共同确定。如何确定这三个参数是磁盘访问成功的关键。
- 1柱面定位时间
- 2旋转延迟时间
- 3数据传送时间
磁盘I/O调度策略
先进先出(FCFS)算法
- 磁盘I/O执行顺序为磁盘I/O请求的先后顺序。该算法的特点是公平性;在磁盘I/O负载较轻且每次读写多个连续扇区时,性能较好。
优先级算法
- 依据进程优先级来调整磁盘I/O请求的执行顺序。该算法反映进程在系统的优先级特征,目标是系统目标的实现,而不是改进磁盘I/O性能。
后进先出(LIFO算法)
- 后产生的磁盘I/O请求,先执行。该算法是基于事务系统中顺序文件中磁盘I/O的局部性特征,相邻访问的位置也相邻。它的问题在于系统负载重时,可能有进程的磁盘I/O永远不能执行,处于饥饿状态。
短查找时间优先(SSTF算法)
- 考虑磁盘I/O请求队列中各请求的磁头定位位置,选择从当前磁头位置出发,移动最少的磁盘I/O请求。
- 该算法的目标是使每次磁头移动时间最少。它不一定是最短平均柱面定位时间,但比FIFO算法有更好的性能。可能会有进程处于饥饿状态。
扫描(SCAN)算法
- 选择在磁头前进方向上从当前位置移动最少的磁盘I/O请求执行,没有前进方向上的请求时才改变方向。该算法是对SSTF算法的改进,磁盘I/O较好,且没有进程会饿死。
循环扫描(C-SCAN)算法
- 在一个方向上使用扫描算法,当到达边沿时直接移动到另一边沿的第一个位置并按原访问方向继续访问。该算法可改进扫描算法对中间磁道的偏好。实验表明,该算法在中负载或重负载时,磁盘I/O性能比扫描算法好。
N步扫描算法
- 把磁盘I/O请求队列分成长度为N的段,每次使用扫描算法处理这N个请求。当N=1时,该算法退化为FIFO算法。
- 该算法的目标是改进前几种算法可能在多磁头系统中出现磁头静止在一个磁道上,导致其他进程无法及时进行磁盘I/O。
双队列扫描(FSCAN)算法
- 把磁盘I/O请求分成两个队列,交替使用扫描算法处理一个队列,新生成的磁盘I/O请求放入另一队列中。
- 该算法的目标与N步扫描算法一致。