不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學習啦>學習電腦>電腦知識大全>

邏輯地址如何轉(zhuǎn)換成物理地址

時間: 春健736 分享

  邏輯地址和物理地址是什么?邏輯地址如何轉(zhuǎn)換成物理地址?看到很多人都在問這個問題,小編為大家分享了邏輯地址如何轉(zhuǎn)換成物理地址的方法,下面大家跟著學習啦小編一起來了解一下吧。

  邏輯地址轉(zhuǎn)換成物理地址

  CPU將一個虛擬內(nèi)存空間中的地址轉(zhuǎn)換為物理地址,需要進行兩步:首先將給定一個邏輯地址(其實是段內(nèi)偏移量,這個一定要理解!!!),CPU要利用其段式內(nèi)存管理單元,先將為個邏輯地址轉(zhuǎn)換成一個線程地址,再利用其頁式內(nèi)存管理單元,轉(zhuǎn)換為最終物理地址。

  物理地址(physical address)

  用于內(nèi)存芯片級的單元尋址,與處理器和CPU連接的地址總線相對應。

  ——這個概念應該是這幾個概念中最好理解的一個,但是值得一提的是,雖然可以直接把物理地址理解成插在機器上那根內(nèi)存本身,把內(nèi)存看成一個從0字節(jié)一直到最大空量逐字節(jié)的編號的大數(shù)組,然后把這個數(shù)組叫做物理地址,但是事實上,這只是一個硬件提供給軟件的抽像,內(nèi)存的尋址方式并不是這樣。所以,說它是“與地址總線相對應”,是更貼切一些,不過拋開對物理內(nèi)存尋址方式的考慮,直接把物理地址與物理的內(nèi)存一一對應,也是可以接受的。也許錯誤的理解更利于形而上的抽像。

  虛擬內(nèi)存(virtual memory)

  這是對整個內(nèi)存(不要與機器上插那條對上號)的抽像描述。它是相對于物理內(nèi)存來講的,可以直接理解成“不直實的”,“假的”內(nèi)存,例如,一個0x08000000內(nèi)存地址,它并不對就物理地址上那個大數(shù)組中0x08000000 - 1那個地址元素;

  之所以是這樣,是因為現(xiàn)代操作系統(tǒng)都提供了一種內(nèi)存管理的抽像,即虛擬內(nèi)存(virtual memory)。進程使用虛擬內(nèi)存中的地址,由操作系統(tǒng)協(xié)助相關(guān)硬件,把它“轉(zhuǎn)換”成真正的物理地址。這個“轉(zhuǎn)換”,是所有問題討論的關(guān)鍵。

  有了這樣的抽像,一個程序,就可以使用比真實物理地址大得多的地址空間。(拆東墻,補西墻,銀行也是這樣子做的),甚至多個進程可以使用相同的地址。不奇怪,因為轉(zhuǎn)換后的物理地址并非相同的。

  ——可以把連接后的程序反編譯看一下,發(fā)現(xiàn)連接器已經(jīng)為程序分配了一個地址,例如,要調(diào)用某個函數(shù)A,代碼不是call A,而是call 0x0811111111 ,也就是說,函數(shù)A的地址已經(jīng)被定下來了。沒有這樣的“轉(zhuǎn)換”,沒有虛擬地址的概念,這樣做是根本行不通的。

  邏輯地址(logical address)

  Intel為了兼容,將遠古時代的段式內(nèi)存管理方式保留了下來。邏輯地址指的是機器語言指令中,用來指定一個操作數(shù)或者是一條指令的地址。以上例,我們說的連接器為A分配的0x08111111這個地址就是邏輯地址。

  ——不過不好意思,這樣說,好像又違背了Intel中段式管理中,對邏輯地址要求,“一個邏輯地址,是由一個段標識符加上一個指定段內(nèi)相對地址的偏移量,表示為 [段標識符:段內(nèi)偏移量],也就是說,上例中那個0x08111111,應該表示為[A的代碼段標識符: 0x08111111],這樣,才完整一些”

  線性地址(linear address)或也叫虛擬地址(virtual address)

  跟邏輯地址類似,它也是一個不真實的地址,如果邏輯地址是對應的硬件平臺段式管理轉(zhuǎn)換前地址的話,那么線性地址則對應了硬件頁式內(nèi)存的轉(zhuǎn)換前地址。

  在早期的硬盤中,由于每個磁道的扇區(qū)數(shù)相等,外磁道的記錄密度遠低于內(nèi)磁道,因此造成很多磁盤空間的浪費。為了解決這一問題,人們改用等密度結(jié)構(gòu),即外圈磁道的扇區(qū)比內(nèi)圈磁道多。此種結(jié)構(gòu)的硬盤不再具有實際的3D參數(shù),尋址方式也改為以扇區(qū)為單位的線性尋址,這種尋址模式便是LBA(Logic Block Address, 邏輯塊地址)。在這種模式下,硬盤的物理地址與邏輯地址的轉(zhuǎn)換問題有一定必要性和復雜性,本文對此進行討論,希望對感興趣的讀者有所幫助。

  2 轉(zhuǎn)換過程

  所謂邏輯扇區(qū)是物理扇區(qū)的一組連續(xù)數(shù)字的編號,操作系統(tǒng)采用的一種扇區(qū)編號方式,其編號是從0開始到某個最大值方式排列,并連成一條線。使用邏輯扇區(qū)主要有以下兩個優(yōu)點:第一,邏輯扇區(qū)的概念使硬盤的讀寫操作脫離了柱面、磁頭和扇區(qū)的硬件參數(shù);第二,在硬盤中每一定數(shù)目的扇區(qū)組成了數(shù)據(jù)文件的最小單位—— 簇,在對一個具體的簇進行讀寫操作時,操作系統(tǒng)劃分一個一維的邏輯扇區(qū)號要比使用三維物理扇區(qū)號簡單的多,如果一個簇的扇區(qū)跨越在兩個盤片,則使用“柱面、磁頭和扇區(qū)”的表示方法就更加復雜了。那么硬盤的物理地址和邏輯地址是如何轉(zhuǎn)換的呢?下面具體介紹其相互轉(zhuǎn)換方法。

  2.1 硬盤物理地址轉(zhuǎn)換為邏輯地址

  首先我們先來了解一下從C/H/S到LBA線性地址的轉(zhuǎn)換規(guī)則。為了與使用C/H/S尋址的老軟件兼容,于是在硬盤控制器內(nèi)部安裝了一個地址翻譯器,它負責將C/H/S參數(shù)翻譯成LBA地址。

  同時,由于系統(tǒng)在寫入數(shù)據(jù)時是按照從柱面到柱面的方式,當上一個柱面寫滿數(shù)據(jù)后才移動磁頭到下一個柱面,而且是從柱面的第一個磁頭的第一個扇區(qū)開始寫入,從而使磁盤性能最優(yōu)。那么在對物理扇區(qū)進行線性編址時,也是按照這種方式進行。即把第一柱面(0柱)第一磁頭(0面)的第一扇區(qū)(1扇區(qū))編為邏輯“0”扇區(qū),把第一柱面(0柱)第一磁頭(0面)的第二扇區(qū)(2扇區(qū))編為邏輯“1”扇區(qū),直至第一柱面(0柱)第一磁頭(0面)的第63扇區(qū)(63扇區(qū))編為邏輯“62”扇區(qū),然后將磁頭轉(zhuǎn)到第一柱面(0柱)第二磁頭(1面)的第一扇區(qū)(1扇區(qū)),接著上面其對應的邏輯編號為第“63”扇區(qū),0柱面所有扇區(qū)編號完畢后才轉(zhuǎn)到1柱面的0磁頭1扇區(qū),依次向下進行,直到將所有的扇區(qū)都編上號。我們需要注意的是,物理扇區(qū)C/H/S中的扇區(qū)編號是從“1”至“63”,而邏輯扇區(qū)LBA方式下扇區(qū)是從“0”開始編號,所有扇區(qū)編號按順序進行。

  在此轉(zhuǎn)換過程中,我們必須要知道的物理量有:

  C1—起始扇區(qū)的柱面號

  H1—起始扇區(qū)的磁頭號

  S1—起始扇區(qū)的扇區(qū)號

  NS—每磁道的扇區(qū)數(shù)

  NH—硬盤每柱面磁道數(shù)

  C、H、S表示硬盤當前的柱面號、磁頭號和扇區(qū)號,則計算柱面C、磁頭H、扇區(qū)S對應的相對邏輯扇區(qū)號RS的公式為:

  邏輯扇區(qū)RS=NH×NS×(C-C1)+NS×(H-H1)+(S-S1),為驗證此公式,下面我們來舉個例子。

  實例:已知有一個4磁頭(硬盤每柱面的磁道數(shù)為4),每磁道有17個扇區(qū)的硬盤,其中有一個邏輯硬盤D:,它的第一個扇區(qū)在硬盤的柱面號為120,磁頭號為1,扇區(qū)號為1的位置,則計算柱面號為160,磁頭號為3,扇區(qū)號為6的邏輯扇區(qū)號RS是多少?

  分析:

  根據(jù)前面的說明,已知條件有:C1=120, H1=1, S1=1, NS=17, NH=4,C=160,H=3,S=6,則代入上面公式可得到邏輯扇區(qū)號RS=4×17×(160-120)+17×(3-1)+(6-1)=2759,即硬盤柱面號為160,磁頭號為3,扇區(qū)號為6的邏輯扇區(qū)號為2759.

  硬盤邏輯地址轉(zhuǎn)換成物理地址

  在對硬盤進行故障維護或者進行相關(guān)軟件開發(fā)時,不僅需要將硬盤的物理地址轉(zhuǎn)換成邏輯地址,有時還需要知道邏輯地址轉(zhuǎn)換為物理地址的方法。

  根據(jù)計算機中符號的常用法則,我們用“div”表示除法運算,用“mod”表示取余數(shù)運算,其他參數(shù)如C、H、S依然表示硬盤當前的柱面、磁頭和扇區(qū)號,C1、H1、S1、NS和NH含義也和上面一致。在已知硬盤邏輯地址即邏輯扇區(qū)號LS的情況下,求硬盤對應的物理地址的柱面號C、磁頭號H和扇區(qū)號S的方法如下:

  C=((Ls div NS)div NH)+ C1

  H=((Ls div NS)mod NH)+ H1

  S=(Ls mod NH)+ S1

  實例:設硬盤的磁頭號為4,每磁道17個扇區(qū),其中邏輯硬盤D的第一個扇區(qū)在硬盤的柱面120、磁頭1、扇區(qū)1上,求邏輯D盤上邏輯扇區(qū)為2757編號對應的物理地址是多少?

  分析:根據(jù)上面的已知條件,我們可知C1=120, H1=1,S1=1,NS=17,NH=4,Ls=2757,則將這些數(shù)據(jù)代入上面的公式可得:

  C=((2757 div 17)div 4)+120=160

  H=((2757 div 17)mod 4)+1=3

  S=(2757 mod 17)+1=4

  即邏輯扇區(qū)號Ls為2757的硬盤對應的物理地址為柱面號是160、磁頭號是3和扇區(qū)號為4。

看過“ 邏輯地址如何轉(zhuǎn)換成物理地址”的人還看了:

1.物理地址與虛擬地址映射

2.物理地址與虛擬地址怎么轉(zhuǎn)換

3.linux虛擬地址怎么映射物理地址

4.虛擬地址空間映射到物理地址空間

5.物理地址和邏輯地址的區(qū)別

720817