有教做點(diǎn)心的網(wǎng)站嗎網(wǎng)絡(luò)營銷的定義
目錄
1.為什么要抽象
2.邏輯抽象_版本1
2.1sector數(shù)組?
?2.2index轉(zhuǎn)化CHS
3.邏輯抽象_版本2
3.1LBA數(shù)組
3.2LAB下標(biāo)轉(zhuǎn)化sector下標(biāo)
- 文件其實就是在磁盤中占有幾個扇區(qū)的問題?
- 文件是很多個sector的數(shù)組下標(biāo)?
- 文件是有很多塊構(gòu)成的?
- ?文件由很多扇區(qū)構(gòu)成------>文件由很多的index構(gòu)成----->文件由很多的塊構(gòu)成
1.為什么要抽象
- 硬件的存儲結(jié)構(gòu)發(fā)生改變,OS軟件隨之發(fā)生變化。直接使用CHS的耦合度太高,不想軟件直接拿著硬件的參數(shù)去訪問。
- 為了后面編碼設(shè)計,為了方便內(nèi)核進(jìn)行磁盤管理
- OS需要也需要對大量的磁盤文件管理?
- 管理啊:先描述再組織?
- 下面我們走一遍OS對磁盤這樣的設(shè)備進(jìn)行管理和抽象。
- OS對磁盤的管理轉(zhuǎn)化成了對數(shù)組的管理,先描述再組織。
- 描述:描述成數(shù)字
- 組織:組織成數(shù)組
2.邏輯抽象_版本1
2.1sector數(shù)組?
- 圓形結(jié)構(gòu)變成了線性結(jié)構(gòu)。磁盤抽象成線性結(jié)構(gòu)。
- 線性結(jié)構(gòu)的每一段都是一個扇區(qū)。
- 這個線性結(jié)構(gòu)可以看成一個數(shù)組,數(shù)組元素是一個一個的扇區(qū)。
- 天然就存在一個東西:數(shù)組下標(biāo)表示sector(相當(dāng)于對扇區(qū)進(jìn)行了編址)
2.2index轉(zhuǎn)化CHS
- OS是拿到下標(biāo)index就可以訪問扇區(qū)
- 硬件是使用CHS來進(jìn)行扇區(qū)尋址
- 磁盤的每個盤面的容量大小一樣(磁道數(shù)/扇區(qū)數(shù)是一樣大小的)
- 二者的轉(zhuǎn)化算法是很簡單的,并且這個工作是磁盤內(nèi)部完成的。
- index------>硬件電路------->磁盤內(nèi)部轉(zhuǎn)化-------->CHS地址--------->磁盤的硬件定位扇區(qū)
前提:已知 磁盤總?cè)萘亢兔總€扇區(qū)的大小=扇區(qū)數(shù),磁道數(shù)。
磁盤的每個盤面:有1000個扇區(qū),10個磁道(每一個磁道都有100個扇區(qū))
index / 扇區(qū)數(shù) = 定位的盤面(H)
index % 扇區(qū)數(shù) = tmp
tmp / 100 ?= 定位磁道(C)
tmp % 100 ?= 定位扇區(qū)(S)
3.邏輯抽象_版本2
3.1LBA數(shù)組
- 內(nèi)存和外設(shè)之間進(jìn)行IO交互。512字節(jié)會不會太小了。OS覺得有點(diǎn)小。(C語言訪問內(nèi)存是1字節(jié),經(jīng)常性是4/8字節(jié)訪問)
- 站在硬件的角度:每次往內(nèi)存拷貝加載數(shù)據(jù),512字節(jié)。
- 站在OS的角度:效率低,能不能拷貝更多數(shù)據(jù)??梢?KB。
- 基本單位是:4KB(可以修改需要重新編譯OS,大部分場景夠用,一次性讀8個扇區(qū))
- ?4KB的大小是規(guī)定出來的。有塊號(規(guī)定)
- ?OS:4KB = 8個連續(xù)的扇區(qū) = 數(shù)據(jù)塊(塊大小)= 文件塊
- 大頁式內(nèi)核:4MB
- 1KB = 1024字節(jié)
3.2LAB下標(biāo)轉(zhuǎn)化sector下標(biāo)
- 邏輯區(qū)塊地址(Logical Block Address,?LBA)是描述計算機(jī)存儲設(shè)備上數(shù)據(jù)所在區(qū)塊的通用機(jī)制,一般用在像硬盤這樣的輔助記憶設(shè)備。
- 8個扇區(qū)為1個塊
- 塊號?8(一個塊的扇區(qū)數(shù))= 一個塊的第一個扇區(qū)sector的下標(biāo)
- 整個塊的下標(biāo):第一個sector知道了,往后連續(xù)數(shù)7個就是這個塊。01234567。每一個塊的扇區(qū)的下標(biāo)都知道了。再通過版本1的計算方法就可以知道CHS地址了。
- 對于OS而言,未來我們讀取數(shù)據(jù),可以以塊為單位了?磁盤可以看成很多的塊。
- 只要知道第一個塊號,就可以知道全部的塊號了。(前提知道磁盤的總大小——總大小/4即可)只要知道一個起始,和磁盤的總大小,有多少塊,每個塊的塊號,如何準(zhǔn)換到對應(yīng)的多個CHS地址,全部都知道了?
- 總大小/4KB=總塊數(shù)=塊的編號LBA---------->每個塊的第一個起始地址=sector的下標(biāo)----------->每個塊中全部的sector的下標(biāo)--------->每個下標(biāo)index通過計算得到CHS地址---------->定位到硬件里面的扇區(qū)。