操作系统----持久化

《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》

 但是这种方式还有会因为磁盘的数量增加时间复杂度也增加

同时也不保证完全恢复

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

 

  

  

 

posted @ 2023-06-08 16:52  次林梦叶  阅读(32)  评论(0)    收藏  举报