有了孩子以后,精力确实有限。珍惜如今的全部的所谓的清闲时光吧。linux
以前在妇幼医院看过电梯,上面写着:算法
层层都停,小程序
单层停靠,windows
双层停靠,缓存
1-8层停靠,安全
医院人多满载后就不开门了。并发
还有咱们常常见的高层电梯,低层电梯。优化
我就想闲下来的时候写个电梯控制的小程序。弥补一下空虚的心灵。spa
夜深人静的晚上我就在想,若是让我写我会怎么写?操作系统
客户端(也就是各个楼梯层上的上下按钮)发送指令?
总控中心入队指令?控制电梯运行?
若是是4部电梯,采用什么算法来控制电梯?
若是睡眠时,电梯停在哪里?
我想:
思考过了这个问题,果断搜索一下电梯运行算法,看到是电梯运行相似于都写算法。继续搜索硬盘读写算法:
1、硬盘调度算法
硬盘的读写算法,主要是分为4类演进:
一、先来先服务算法(FCFS):
这个也是最容易想到最简单的算法,一个队列接收命令,先进先出原则进行读写处理。
咱们也知道硬盘读写须要寻道,这种简单暴力的算法,对寻道没有优化,导致响应时间过长。
二、最短寻道时间优先算法(SSTF):
为了解决寻道算法,那我每次都处理离我最近的指令就好了,这样寻道最短,时间也就最短,我能够很快滴给出相应。
若是请求并发较大,我可能对离我较远的指令处理不及时甚至很长时间才能给出相应。
由于咱们须要很长时间在一个地方将请求处理完才能移动到下个位置。
三、扫描算法(SCAN):
那我既要兼顾寻道最短,还要尽可能避免磁头方向的转换,形成的饥饿现象的出现。
那我就按照磁头方向寻找离我最近的而且是同一方向的请求。这样一点一点向边缘移动。
这个算法和电梯调度算法相似,因此能够称之为电梯算法。
若是我从中间的请求开始处理,磁头一次一次向外边缘推动来处理请求。当我到达最外边缘时,磁头调转方向向内边缘进攻。
这里的问题是,里我身后越近请求越少,由于我刚刚处理过。极有多是理我较远的磁道有请求指令的几率比较大数量比较多。
根据正态分布规律,落在中间的几率大于落在两端的几率。这样仍是会出现两边请求处理不及时的问题。
四、循环扫描算法(CSCAN):
根据以上问题,咱们进行优化,磁头的处理方向只能是一个方向,好比从里到外运行。
当我到达最外边缘的磁道,我掉头返回到最里面的磁道,而后仍是向外处理请求。
请求命令一直是从小到大排序让最小的磁道紧挨着最大磁道,这样就会磁头从里到外循环处理。既保证了寻道最短,也确保了请求处理的及时。
看到硬盘的读写算法,以前对硬盘的读写原理比较模糊,也是比较好奇硬盘怎么就能将数据写到磁盘上,并进行读取的?那就再看看硬盘是怎么读写的。
2、硬盘组成
说到硬盘,硬件了嘛,先看看硬盘的组成,看图:
盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存
看到这,我带着一些疑问打算再深刻了解一下这些构造:
总的来讲,磁盘上有不少的磁柱,磁柱上有不少的磁道,磁道上划分了不少的扇区。
盘片:每一个盘片都有一个读写磁头,由于N个盘片两面均可以读写数据,因此就有2N个盘面,2N个磁头。
磁头由上到下从0开始编号,固然也对应着对应的盘面编号。如今咱们有盘面编号了。
磁柱:全部盘面的同一磁道造成的圆柱。
磁道:以主轴马达为中心,碟片上的同心圆环。最外侧磁道是0,最里侧的是磁头归位不存储数据。
Q:磁道为何最外侧是0号而不是最内侧为0?
A:由于当时老式磁盘设计每一个磁道上的磁区是同样的,也就是说里侧的数据分布密度大,
外侧的数据分布密度小,密度小数据相对来讲安全。
定位0磁道:就是磁头梦开始和梦结束的地方,读取数据读取完毕磁头休息的地方。
物理0磁道:0柱面,0磁道,1扇区。这个厉害了,物理0磁道只是一个扇区,它是磁盘的第一个物理扇区,也就是第一个物理地址。
那么它来干什么呢?MBR引导程序和分区表信息都存储在这。硬盘低级格式化从这开始。
逻辑0磁道:硬盘的第一个逻辑扇区,通常在0柱面,1磁头,1磁道,系统读写时的第一个扇区。硬盘高级格式化从这开始。
Q:什么是低级格式化?什么是高级格式化?
A:低级格式化就是硬盘厂商将空白的磁盘划分出柱面和磁道,再将磁道划分为若干个扇区,每一个扇区又划分出标识部分ID、间隔区GAP和数据区 DATA等。
高级格式化就是清除硬盘上的数据、生成引导区信息、初始化FAT表、标注逻辑坏道等。好比重装系统分区,好比手动格式化分区。
扇区:一小段磁道弧线,每一个磁区通常会携带0.5KB数据。扇区是磁盘中最小的物理存储单位。
Q:为何每一个扇区是0.5KB?
A:如今硬盘厂商会提供4k大小扇区
老式是512bit,新式为了扩大容量是4096bit(4KB),可是为了兼容系统,将4KB模拟成8个512bit.
磁盘块: 操做系统中最小的逻辑存储单位。windows上叫簇,linux叫块。将几个相邻的扇区合并一块儿组成逻辑磁盘块,便于操做系统管理扇区和硬盘寻址。
磁盘块是文件系统操做文件的基本单位。扇区是硬盘基本单位。
由于存在逻辑存储单位和物理存储单位的映射,因此磁头控制器另外一个功能是负责二者的映射关系。
4K对齐:以前是512,须要物理扇区和逻辑块进行映射关系。
对于如今的4KB硬盘,以windows为例,NTFS文件系统的默认逻辑分区是4KB(比武咱们格式化硬盘,会有文件系统和默认分配单元大小)
这样物理扇区和逻辑块一一对应,能够加快硬盘的读取速度。
操做系统常常与内存和硬盘这两种存储设备进行通讯,相似于“块”的一种虚拟的基本单位。内存操做--页;硬盘--块。
3、硬盘读写原理
写数据:
系统将文件存储到磁盘上时,按柱面、磁头、扇区的方式进行,即最早是第0磁道的第一磁头下的全部扇区。
而后,是同一柱面的下一磁头,……,一个柱面存储满后就推动到下一个柱面,直到把文件内容所有写入磁盘。
按照柱面来写数据,电子控制磁头,写到下一柱面才会有机械控制磁头。减小了频繁寻道时间。
读取数据:
根据文件存储的 三维坐标:柱面、磁头和扇区确认数据的起始位置。
磁头控制器选择对应的磁头步进到相应的柱面上,而后等待旋转过来的对应的磁区。
校验坐标,根据读写标识转换电极,进行相应的读取操做。
局部性原理和数据预读取:
这里主要指的是空间局部性原理,思想是与数据相邻的数据用到的几率比较大。
因此读取数据时会将此数据的必定的相邻数据一并都取出来,也就是数据预读取。