磁盘基础知识

Catalogue
  1. 1. 参考资料

字符设备:按照字符流的方式被有序访问,如串口和键盘
块设备:能够随机,不用按顺序访问的,每次访问固定大小的数据片chunks的设备,如磁盘,扇区是它的最小存储单元,即chunks, 一般为512byte,现在有的新硬盘的扇区4K

操作系统的文件系统不是一个扇区一个扇区的来读数据,太慢了,所以有了block(块)的概念,一个block有多个扇区组成,一般一个block是4K, 即由连续的8个扇区组成。
操作系统读写文件时,是一个块一个块的读写的,block才是文件读取和写入的最小单位,同时物理内存也是按block进行划分的。

程序逻辑地址:默认从0开始编址。

程序代码未运行时是存储在磁盘上,在启动后代码被装载进内存运行,这个可运行的整体称为进程,它对用代码的组织形式有如下几种:

  1. 分页存储管理:
  • 用户程序的逻辑地址空间被分为若干个固定大小的页,每个页有一个页号,每页内的每行代码指令有对应的偏移量,即页内地址,实现上是逻辑地址的若干高位做为页号,低位对应页内地址,一般是先确定了页面大小,就能确定页内地址占程序逻辑地址低位个数,剩余高位做页号。页的大小由系统决定,一般为4K,占12位,等于block大小,也有页大小为1k的。
  • 操作系统给进程分配的内存是以block为单位分配的,每个blcok也中有块号的,将进程中的页分别装入到多个可以不相邻的物理block中,由于最后一页经常不满,所以也不能完全装满block,从而会形成碎片,称为页内碎片。
  • 因为页可以装入到不连续的block中,所以操作系统会给每个进程建立一个页表来记录每个页号对应的block号。在程序执行时也要通过页表对逻辑地址到物理地址转换,页内地址无需转换,只用通过页表算出每个页对应的block的物理起始地址,加上页内地址,即相对本页起始地址的偏移量,就是每条指令的物理地址。
  1. 分段存储管理:分页是直接按页大小对程序代码进行划分,段则以程序的逻辑代码片段,如主程序段、子程序段、数据段、栈段等。每个段有一个段号,都从0开始编址,并采用一段连续的地址空间,段的长度由相应的逻辑代码片段长度决定。
  2. 段页式结合:用户程序按代码逻辑分段,每个段再分多个页,每个页装载进可以不相邻的物理block中,此时地址结构为:段号+段内页号+页内地址。

WAL: Write Ahead Log, 日志文件要早于数据写入磁盘

参考资料