操作系统----持久化
《I/O设备与设备驱动程序》

I/O设备主要由两重要部分组成:
1.设备向操作系统展现的硬件接口
这些接口主要是用来与设备进行交互用到
可以看到接口(interface)中包含3个寄存器:
状态寄存器:读取并查看设备的当前状态
命令寄存器:用于通知设备执行某个具体任务
数据寄存器:数据传输给设备,或者从设备读取数据
当有了这些寄存器后,我们的CPU便可以与设备进行信息(数据)上的交互
想一下,假设CPU是我们人,设备是电脑
当我们人在终端上写命令/数据,电脑通过存储器将命令/数据保存下来
(接口的行为)
电脑通过编译器,操作系统等将我们输入的命令/数据,翻译为了电脑能够执行的
自己懂的命令,然后执行
(设备驱动程序的行为)
《设备驱动程序》
再回到CPU 与 设备这个过程中来:


所以,所谓的设备驱动程序其实就是 CPU(操作系统) 与 设备 之间沟通的桥梁
通过设备驱动程序,通过接口,按照两者交互的协议于是便可使用我们插入电脑的设备
普遍的交互如下:
While (STATUS==BUSY)
;//wait until device is not busy
Write data to Data Register
Write command to Command Register
Doing and executes the command
如果对这个交互感到不熟悉,想一下你在写汇编代码时是如何进行系统调用的
2.内部结构

其实每一个设备都可以是一个完整的计算机
它们可以有内存,CPU,甚至操作系统,以及更多的芯片
比如显示器
其就是一个设备
这个设备中有显卡GPU
这个GPU就是一个CPU,专门用来处理图像计算
《持久数据的可靠性----RAID和日志》
首先我们来看看数据保存在磁盘有哪些方面的不可靠性:
现在假设有一个文件file
其分配了数据块#1,现在需要往这个文件后面再写入一些数据,并需要给file添加新的数据块#2
如果这个过程中系统崩溃了,可能出现的错误如下:


首先需要说明的是:
为了速度,一般都会有缓存,数据开始都被写入缓存中
再从缓存中以非顺序的方式写入磁盘
所以当系统突然崩溃,是不知道哪些写入了磁盘
哪些还在缓存中没了的
对于第一个错误是:
数据块2的数据没有被写入磁盘当中
这个时候如果数据块2是其他人的数据,那么我们就相当于知道其他人的数据了,即数据泄露
如果数据块2是没用的垃圾数据,那么我们就会访问到错误的数据
对于第二个错误是:
#2的位图没有更新,会导致可能下一次写入的时候数据块2就莫名其妙没了
或者是写入了其他数据,导致数据错误
对于第三个错误是:
#2的inode没有被更新,但是#2的位图更新了
这导致file访问不到#2,同时在file被删除时,不能删除#2中的数据
同时#2的位图还被标记为了used
导致#2以后再也不能使用了
《fsck》

但是这种方式还有会因为磁盘的数量增加时间复杂度也增加
同时也不保证完全恢复

于是更聪明的方式:日志出现了

浙公网安备 33010602011771号