硬盘的基本单位是扇区,每个扇区一般大小为512字节。一个硬盘一般有2个盘片,每个盘片分为65536个磁道,每个磁道分为1024个扇区,那么硬盘的容量就是2*2*65536*1024*512=128GB。但是由于磁道周长的不同,所以每个磁道的扇区密度肯定不同。靠近盘面外围的磁道密度肯定比内圈更加稀疏,这样是比较浪费空间的,但是如果不同的磁道扇区又不一同,计算起来就十分的麻烦。为了屏蔽这些细节,现代的磁盘普遍使用一种叫做LBA(logical Block Address)的方式,即整个磁盘中所有的扇区从0开始编号,一直到最后一个扇区,这个扇区的编号叫做逻辑的扇区号。
比如我们有一个文件test.dat 在目录/home/user/test.dat,长度为8000字节。系统访问这个文件的过程大致是如下的。
下面大概讲一下我自己的理解,首先讲一下如何保存文件,写文件这件事为一个进程,进程中有文件描述符,比如我们打开了test.dat这个文件,此时在内存中尉这个文件描述符开辟一定的缓存空间,比如从内存的0x064开始的256字节的缓存空间,当缓存空间存满数据是像操作系统发出中断信号,操作系统调用写系统调用函数,写系统调用函数调用磁盘写程序,打开I/O端口地址,I/O驱动程序检查I/O设备然后按照存储策略,找到一片空闲的空间存储此数据,比如从第8个磁道存储数据。若此时关闭写进程,则此进程终止,关闭文件操作符。
当操作系统读取这个文件时,先调用系统函数读取到此文件的位置,因为内存是按页管理的,一个页面的大小一般为4k,操作系统知道文件时从第8个磁道开始的,然后调用I/O讲磁盘中的内容读取到内存中,内存是和cache打交道的。
先写到这吧,实在是有好多不明白的地方。。。