2.设备独立性软件
2.1.假脱机技术
1.脱机:脱离主机的控制进行输入/输出;假脱机技术是用软件的方式模拟脱机技术,需要多道程序设计的支持(并发)
2.在磁盘上开辟两个存储区:输入井和输出井
①输入井:存放I/O设备输入的数据
②输出井:存放用户进程向I/O输出的数据
3.输入进程把I/O设备要输入的数据放到输入井中;输出进程从输出井中取出数据,然后输出到I/O设备上
4.内存中开辟两个存储区:输入缓冲区和输出缓冲区
①输入缓冲区:在输入进程的控制下,暂存输入设备中输入的数据,然后再放入磁盘的输入井中(输入设备→输入缓冲区→输入井)
②输出缓冲区:在输出进程的控制下,从磁盘的输出井中取出数据,再传送到输出设备中(输出井→输出缓冲区→输出设备)
5.具体应用:共享打印机(假脱机技术可以将独占式设备改造成共享设备,即将一台物理设备虚拟成多台逻辑设备)虚拟设备
每个进程提出打印请求时,操作系统都会为其在输出井中分配一块存储空间(相当于分配一个逻辑设备),使得每个进程都觉得自己在独占一个打印机,从而实现对打印机的共享
2.2.设备的分配与回收
1.设备的固有属性:独占设备、共享设备和虚拟设备
2.根据设备分配安全性区分的方式:安全分配方式和不安全分配方式(是否导致死锁)
3.设备分配管理中的数据结构:需要表示出设备、控制器和通道的从属关系
①设备控制表:通过设备控制表中的指向控制表的指针找到该设备从属的控制器
②控制器控制表:通过控制器控制表中的指向通道表的指针找到该控制器从属的通道
③通道控制表:可以通过通道控制表找到属于该通道的所有控制器
④系统设备表:记录系统中所有设备的情况,当用户通过设备名请求某个设备时,操作系统可以根据设备名在系统设备表中找到相对应的设备
4.设备分配步骤:
①只有设备、控制器和通道三者都分配成功时设备分配才成功,才可以启动I/O设备进行数据传输
②查询顺序:系统控制表→设备控制表→控制器控制表→通道控制表(即先确定是哪个设备)
③只有第一次通过逻辑设备名申请使用设备时候才需要找系统控制表,之后用户再次以相同的逻辑设备名,操作系统首先在逻辑设备表中查找该逻辑设备所对应的物理设备
2.3.缓冲区管理
1.缓冲区的作用:
2.从I/O设备读入数据到缓冲区后,需要将缓冲区的数据再放入进程的工作区内,CPU才能对其进行操作;缓冲区和进程的工作区通常为一个块
3.单缓冲:处理一块数据平均耗时:MAX(C,T)+ M(取C和T的最大值加上M)
CPU对工作区数据的处理和I/O设备对缓冲区的输入可以并行执行
①I/O设备输入缓冲区的时间T > CPU对数据处理时间C:CPU处理完后需要等待I/O设备完成对缓冲区的输入和将缓冲区数据放到工作区
②I/O设备输入缓冲区的时间T < CPU对数据处理时间C:I/O设备完成对缓冲区的输入后,需要等待CPU对数据的处理完成后,才能开始将数据放入工作区中
4.双缓冲区:处理一块数据的平均耗时为MAX(T,C+M)
CPU对工作区数据的处理+缓冲区1(2)将数据传送至工作区可以和I/O设备将数据传入缓冲区2(1)并行执行
①I/O设备输入缓冲区的时间T>CPU对数据处理时间C+数据从缓冲区传送到工作区时间M:
CPU处理完数据后,需要等待另一片缓冲区完成I/O设备的输入操作→平均用时:T
②I/O设备输入缓冲区的时间T
每次CPU处理完数据时,都已经完成一块缓冲区的输入,并开始向工作区传输→平均耗时:C+M
5.采用单缓冲区进行计算机间的通信时,同一时刻只能实现单向通信;采用双缓冲区则可以进行双向通信:由于缓冲区的只有空时才能写入,满时才能读出
6.循环缓冲区:
7.缓冲池:
①输入进程请求输入数据:从空缓冲队列中取出队首的缓冲区(空),将其作为收容输入的缓冲区,输入进程开始对该缓冲区进行数据传输,充满后,再把其挂到输入队列的队尾
②计算进程想要取得一块输入数据:从输入队列中取出队首的缓冲区(满),将其作为提取输入的缓冲区,计算进程开始从该缓冲区中读入数据,取空后,再把其挂到空缓冲队列的队尾
③计算进程想要将准备好的数据冲入缓冲区:从空缓冲队列中取出缓冲区(空),将其作为收容输出的缓冲区,计算进程开始对该缓冲区进行数据传输,充满后,再把其挂到输出队列的队尾
④输出进程请求输出数据:从输出队列中取出队首的缓冲区(满),将其作为提取输出的缓冲区,输出进程开始对该缓冲区提取数据,取空后,再把其挂到空缓冲队列的队尾
3.磁盘和固态硬盘
3.1.磁盘的结构
1.通过磁头臂带动磁头移动到磁盘的相应位置读取该位置的数据
2.磁盘被分为若干磁道
3.磁道被分为若干扇区,每个扇区的存放的数据量相同;由于每个扇区的数据量相同,但最内侧的扇区面积最小,因此,最内侧磁道上的扇区数据密度最大
4.对磁盘进行读/写的过程:
①通过磁头臂带动磁头移动到目标扇区对应的磁道(磁头臂只能向内或者向外移动)
②对磁盘进行旋转,找到目标扇区
5.磁盘的物理地址:(柱面号,盘面号,扇区号)
①柱面号:指明读取的磁道(移动磁头臂到相应磁道)
②盘面号:指明哪个盘面(激活相应盘面的磁头)
③扇区号:指明磁道中的扇区(在磁盘旋转的过程中通过磁头读取相应扇区的数据)
3.2.磁盘调度算法
1.一次磁盘读/写所需的时间 = 寻找时间 + 延迟时间 + 传输时间
①延迟时间中1/r为磁盘转一圈的时间,找到目标扇区平均需要转半圈,因此需要乘以1/2
②传输时间中每个磁道可存N个字节,因此读/写b字节的数据需要b/N个磁道才能存取,而读/写一个磁道所需的时间为1/r(磁盘转一圈即完成一个磁道的读/写),即共需b/rN
③操作系统只能改变寻找时间(通过磁盘调度算法的不同)
2.先来先服务算法(FCFS):谁先请求谁被先服务
2.最短寻找时间算法:选择眼前最优,但总体看未必最优;可能产生饥饿
3.扫描(SCAN)算法:只有到最边上的磁道才能改变磁头的移动方向,导致边缘磁道响应频率高
4.LOOK调度算法:解决SCAN算法中磁头移动方向上已经没有请求时仍需移动到最边上的问题
5.循环扫描(C-SCAN)算法:解决SCAN算法中各个位置磁道响应频率不均匀的问题
6.C-LOOK调度算法:解决C-SCAN算法中只有到达最边上的才改变磁头移动方向,以及返回到最边缘的问题
3.3.减少磁盘延迟时间的方法
磁头读入一个扇区数据后,需要一小段时间处理(这段时间内无法读入数据),导致如果逻辑上相邻的扇区物理上也相邻,则读入几个连续的逻辑扇区,需要很长的延迟时间(转好几圈)
1.采用交替编号:让逻辑上相邻的扇区物理上通过交替编号的方式物理上有一定间隔
2.采用(柱面号,盘面号,扇区号)的编址方式:在同一个柱面号和盘面号的情况下,仅需激活不同的磁头就可以读取连续地址空间,而如果采用(盘面号,柱面号,扇区号)的方式,读取连续的地址空间,就可能需要激动不同的磁头臂来回移动磁头
3.采用错位命名:不同盘面的相同扇区号对应的实际区域不同,这样可以使得磁头在读取完某个盘面后,可以有时间准备读取另一个盘面的数据
3.4.磁盘的管理
1.磁盘初始化:
①低级格式化(物理格式化):将磁盘划分为各个扇区
②逻辑格式化(高级格式化):将磁盘划分为一个个的分区(分卷,例如:C盘、D盘),并创建文件系统
2.引导块:
①自举程序的一小部分在出厂时就写入ROM(不可更改);完整的自举程序放在磁盘的启动块(引导块/启动分区)中,启动块位于磁盘的固定位置(拥有启动分区的磁盘称为启动磁盘/系统磁盘)
②计算机开机时首先会读取ROM中初始化程序(自举程序)找到引导块,并将完整的自举程序读入内存,完成初始化
3.坏块的管理(硬件故障,操作系统无法修复):