最后一片文章简单聊聊磁盘相关知识
前几篇文章
浅谈计算机中的存储模型(一)存储体系
浅谈计算机中的存储模型(二)物理内存
浅谈计算机中的存储模型(三)虚拟存储器
目录
- 磁盘
- 磁盘结构
- 磁盘存取
- 磁盘调度
- 磁盘调度算法
- FCFS
- SSTF
- SCAN
- 磁盘调度算法
- 磁盘缓冲和预读
磁盘
磁盘是计算机物理存储媒介,一般我们的程序在未执行前都是保存在磁盘上 。因为磁盘读取速度慢,所以相对价格相对低廉,容量也大
磁盘结构
从侧面我们可以看到磁盘实际上是物理运动,磁盘读取数据时实际上是磁头在不断的转动。所以实际上磁盘的执行速度满了内存大约100000倍左右。
俯视图我们可以看到磁盘也是分块的,一个扇区为一块,一般一块大小为512B,同圆的扇区(同心环)构成了一个磁道,扇区中间存在间隙,间隙是不存出数据的。
从图中我们能看出虽然扇区的大小不同,从外侧到内侧减小,但是容量都一样,所以外侧面积大的扇区密度小,内侧面积小的扇区密度大。
磁盘存取
磁盘一般是被磁盘控制器控制来存取数据的
磁盘控制器可以控制多块磁盘。磁盘控制器将数据从磁盘读取到IO总线上,通过总线传送到内存中去,内存其实相当于磁盘的一个高速缓存。
磁盘存取一般分为三个步骤:
1.寻道时间
磁盘控制器将磁头组合定位到磁盘所在磁道的主面上所需要的时间
2.旋转延迟
磁盘控制器等待访问块的第一个扇区转到磁头下的时间
3.传输时间
当磁盘控制器读取或写数据时,数据所在磁盘和扇区间的空隙经过磁头的时间。
磁盘调度
数据是磁盘控制器控制磁头组合来读取数据的,但是磁头组合只有一个,而页面请求顺序是随意的,我们要在最短的时间内完成最多的页面请求,这就要通过磁盘调度算法。
注意磁盘也会根据内存的分页机制来进行分页,保持和内存基本大小单位一致,这是由操作系统决定的。
FCFS–先来先服务调度算法
原理:磁盘页面请求排成一个队列,先请求的我们先读它,后请求的我们后来再读它。
优点:公平
缺点:效率太低
题目:
假设磁盘访问序列:98,183,37,122,14,124,65,67。读写头起始位置:53。求:磁头服务序列和磁头移动总距离(道数)。
如下图
图片来源百度百科
SSTF–最短寻道时间算法
原理:优先选择当前距离磁头最近的请求,离我最近的我肯定访问最快。
优点:改善了平均耗时
缺点:某些请求比如距离磁头比较远的请求可能长时间得不到响应。
如下图
图片来源百度百科
SCAN–电梯调度算法
原理:当有访问请求时,磁头按一个方向移动,此方向服务完毕后,转换方向,类似电梯,一次从底层到顶曾送完人,在从顶层向底层送,不会乎高乎低。磁盘也是高速旋转设备,让它停止并转换方向也是非常耗时的。
优点:寻道性能好,可避免饥饿现象。
如下图
图片来源百度百科
磁盘预读和磁盘缓冲
这二者都是为了提高性能和效率,如何衡量性能和效率呢,就是磁盘IO的次数,次数越少说明性能和效率越高。
磁盘预读:每次磁盘读取数据时,总会多读几页数据,因为存储是顺序存储的,用到此块数据很大可能会用到相邻的后几块数据,提前从磁盘读出可以减少磁盘IO次数。预读的页一般是证书呗
磁盘缓冲:磁盘缓冲也是,我们每次写磁盘文件时并不会立刻写入到磁盘中去,比如你给文件中一个字母a,它如果立刻写入磁盘那效率可就太低了,实际上是先写到缓冲中,等到缓冲满或者有必要时才刷新到磁盘中去。
磁盘就简单介绍到这里,如果想详细了解磁盘内部的一些知识,推荐去看《数据库系统实现》这本书的磁盘部分,讲的比较详细。
计算机中的存储模型通过这几篇文章我就简单介绍到这里,我的目的是希望能构建出一个存储模型的体系结构,很多地方并没有深入,个人觉得如果能形成一个存储体系结构在脑海中,这部分知识就算是理解了,接着再想了解或深入其他相关的知识直接去看就好。
完