操作系统(thuOS)笔记(十四) 第二十三讲 文件系统
23.1 I/O特点
三种常见设备接口类型
同步与异步I/O
用户进程与设备进行IO操作时,用户发出IO请求,操作系统将其转换成设备驱动,设备驱动会把它转换成硬件的控制,控制硬件进行相应操作,硬件操作完成后悔产生中断,由内核中的中断处理例程进行响应,最后送到设备驱动,然后回到用户态
阻塞IO:Wait 发送请求到数据回来中间进程是要处于等待状态的
非阻塞IO 这种方式可能读写不成功,或者读写的数据量和想要的不一样
异步IO Tell Me Later
23.2 IO结构
北桥连高速设备,南桥连IO设备
CPU与设备的连接
IO地址通过总线连到CPU上。
从设备到CPU,通过中断控制器
轮询,不用中断控制器,而是CPU直接访问IO端口,或者访问设备对应的内存地址空间
设备中断,外部设备通过中断与CPU通讯
DMA,外设直接到内存
I/O指令和内存映射I/O
内存映射IO
内核IO结构
IO请求生命周期
首先看要读的数据是不是已经有了,如果有就直接返回
内核IO发送IO请求等待结果,处理IO请求发送控制命令等待中断响应
设备控制命令发送,设备处理,完成后生成中断请求,接收中断,保存结果给驱动层
23.3 IO数据传输
设备和CPU之间的传输有两种方式
程序控制IO(PIO,Programmed I/O)
通过in/out或load/store(如果做了映射)指令传输所有数据
第二种方式是直接内存访问(DMA),适用于高吞吐量的设备IO
通过直接IO寻址读取磁盘数据的步骤
CPU通过系统总线连击到内存和DMA控制器,DMA控制器通过PCI总线连接到磁盘设备。
一次读取的过程是这样的:
IO设备通知操作系统的机制
轮询:定期检查
延时大指的是,如果检查的时间间隔较长,如果状态发生变化没有及时检测就会出现延时长的问题
设备中断:
如果中断比较多,那么CPU被中断的频率就会比较高
实际一些高速设备的做法可能结合了轮询和设备中断,第一次采用中断方式来响应,如果有数据包的接收,CPU会响应中断来处理这条数据
设备中断IO处理流程
23.4 磁盘调度
磁盘结构
平均旋转延迟时间 = 磁盘旋转一周时间的一半
磁盘IO传输时间
其中b=传输的比特数,N=磁道上的比特数,r=磁盘转数
寻道时间+旋转延迟+数据传送时间
磁盘调度算法
先进先出算法(FIFO)
最短服务时间(SSTF)
扫描算法
循环扫描算法(C-SCAN)
C-LOOK算法
N步扫描算法
在扫描算法中,考虑后面的请求哪个离得最近,如果总是在当前磁头的边上有请求,会使另一些请求得不到响应,这就是磁头粘着现象
双队列扫描算法(FSCAN)
23.5 磁盘缓存
单缓存和双缓存
双缓存交换速度会更快
访问频率置换算法(Frequency-based Replacement)
短周期用LRU,长周期用LFU,可在短周期内用特殊的栈的处理,来描述访问的顺序,在长周期内用LFU来计数
每一次访问的时候,访问某一块数据块,把这一块放到栈顶。如果这个数据块处于新区域,则计数不变;如果在中间区域或者旧区域,不但要挪过去,而且要把计数加一。
这样一来
淘汰时,在旧区域里找计数最小的
中间区域可以避免数据进来没多久就被替换掉
完结