電梯引起的思考

有了孩子以後,精力確實有限。珍惜如今的全部的所謂的清閒時光吧。linux

以前在婦幼醫院看過電梯,上面寫着:算法

  層層都停,小程序

        單層停靠,windows

        雙層停靠,緩存

       1-8層停靠,安全

       醫院人多滿載後就不開門了。併發

    還有咱們常常見的高層電梯,低層電梯。優化

 我就想閒下來的時候寫個電梯控制的小程序。彌補一下空虛的心靈。spa

 夜深人靜的晚上我就在想,若是讓我寫我會怎麼寫?操作系統

         客戶端(也就是各個樓梯層上的上下按鈕)發送指令?

         總控中心入隊指令?控制電梯運行?

   若是是4部電梯,採用什麼算法來控制電梯?

   若是睡眠時,電梯停在哪裏?

我想:

  • 設計頂層一部,一樓一部,其餘的都停靠在中間層?
  • 仍是說,都所有停靠在同一樓層?
  • 仍是說,運行到那個樓層就在哪裏停靠?
  • 爲何我按下了5樓,從16層下來比較快的電梯不拉我?從14層下來比較慢的電梯才拉我?

思考過了這個問題,果斷搜索一下電梯運行算法,看到是電梯運行相似於都寫算法。繼續搜索硬盤讀寫算法:

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磁道的第一磁頭下的全部扇區。

  而後,是同一柱面的下一磁頭,……,一個柱面存儲滿後就推動到下一個柱面,直到把文件內容所有寫入磁盤。

  按照柱面來寫數據,電子控制磁頭,寫到下一柱面纔會有機械控制磁頭。減小了頻繁尋道時間。

讀取數據:

  根據文件存儲的 三維座標:柱面、磁頭和扇區確認數據的起始位置。

        磁頭控制器選擇對應的磁頭步進到相應的柱面上,而後等待旋轉過來的對應的磁區。

  校驗座標,根據讀寫標識轉換電極,進行相應的讀取操做。

局部性原理和數據預讀取:

  這裏主要指的是空間局部性原理,思想是與數據相鄰的數據用到的機率比較大。

        因此讀取數據時會將此數據的必定的相鄰數據一併都取出來,也就是數據預讀取。

相關文章
相關標籤/搜索