計算機為什麼要設定線性位址,從邏輯位址到線性位址再到實體地址?

時間 2021-05-12 01:10:52

1樓:Sinaean Dean

首先,並不是所有的CPU都有邏輯位址。邏輯位址是段式記憶體管理單元的輸入的,有些CPU的,比如說典型的ARM是沒有段式記憶體管理單元的。所以linux為了相容所有CPU,只使用了頁式記憶體管理單元,對段式記憶體管理單元只是敷衍了一下,讓它的所有輸入與輸出相等。

然後,GDT, LDT的輸入是邏輯位址,輸出是線性位址,頁式記憶體管理單元的輸入是線性位址,輸出是系統匯流排位址(實體地址)。 GDT, LDT都是x86的概念,ARM上沒有。

再然後,IDTR, TR的選擇符在x86上是要通過邏輯位址去標記的,但如果像linux那樣把段式記憶體管理單元敷衍一下的話,IDTR, TR的輸入位址與執行緒位址是致的。

最後,對x86而言,段式記憶體管理單元出現在先,頁式記憶體管理單元出現再後,頁式記憶體管理顯然有先進性,段式記憶體管理單元更像是歷史遺留問題。

zhuanlan /mode

rn-computing?utm_source=com.android.email&utm_medium=social

2樓:湧潮

就題目本身而言,設定邏輯位址到線性位址的轉換,一般稱為分段機制。在x86上面是基於這個做的核心態與使用者態的記憶體中的分離。而線性位址到實體地址的轉換,稱為分頁機制,x86-64是基於這個做的核心態與使用者態的記憶體中的分離(Linux).

然後分段和分頁的目的一般在作業系統教材上都有吧。

3樓:小崔

保留邏輯位址是因為相容性吧

從當年為了解決16位資料匯流排與20位位址匯流排的問題引入的分段。現在看起來更像累贅。大家都用全域性乙個段繞過分段了

所以把線性位址理解成虛擬位址更容易理解一點。或者說保護模式用線性位址和分頁代替了邏輯位址與分段。而為了相容性,還把邏輯位址留了下來

4樓:Goldhorn

GDT和LDT還有段這些都是X86的特性,其實Linux作業系統都繞開了。其它的架構都沒這麼麻煩,題主完全可以認為它們沒什麼用。

5樓:龔黎明

邏輯位址是給作業系統之上的軟體看的。他們不需要知道硬體是怎麼設計的,只需要一台理想的虛擬機器就可以了。這樣是為了同樣的軟體應用於不同的硬體上。

線性位址是給CPU看的。CPU不需要知道有多少外設,什麼種類的外設,反正它都是用位址來訪問。印表機也好,硬碟也好,遊戲手柄也好,記憶體也好,任何亂七八糟的外設也好,它都是分配個位址來訪問。

這叫做統一編址,也屬於線性編址。讓所有的外設,都可以像訪問記憶體一樣,線性訪問。目的是為了讓CPU可以接各種外設,不需要知道外設是怎麼實現的。

比如說硬碟,根本就不是線性位址,其有多個扇面,扇面又被劃分成很多小塊,磁頭的移動絕對不是線性的。你不需要知道硬碟是怎麼樣的物理結構,你只需要把它想象成一排格仔,每一格是乙個sector。你甚至不需要知道硬碟只能以sector讀寫,你也可以只讀寫一位元組,硬碟控制器會幫你搞定你想要的。

簡言之,線性位址能讓CPU把任何裝置當成記憶體。

實體地址是給實際的硬體看的。光碟機控制器給讀寫頭的控制訊號,硬碟控制器給磁頭發出的讀寫位址,記憶體匯流排上的位址是實體地址。硬體只對這個位址做響應。

邏輯位址要經過作業系統轉換成線性位址給CPU,CPU發出線性位址給解碼器,解碼器根據線性位址找到合適的外設,外設自身的控制器再將線性位址進行解碼得到實體地址送給實際的裝置。

當然,真正的IC裡面,位址比這個模型複雜多了。

為什麼數學專業要學計算機?

Yanx 應該不怎麼涉及硬體 只有軟體層面吧 程式設計是一種思想,一種嚴謹的富有邏輯性的思想和數學是相輔相成的 而且很多問題都要用到計算機輔助啊 求乙個微分方程到數值解 迭代五六次還能手算 五六十次的呢 對於本科階段 用計算機去印證所學所想,對學習更有幫助 更何況作為理工科的學生 C語言很難嗎 私以...

為什麼大學計算機專業要學高數?

心臟跳動 數學對計算機意義重大 計算機計算功能本質原理是數學,沒有數學知識就沒有計算機。作為計算機普通使用者來講,一直享受軟體應用帶來的方便,但一般沒有去思考如何實現。計算機所形成的生態系統中數學起到了相當大的作用,比如應用中使用到的非對稱加密,理論基礎是數論的知識,計算機網路中拓撲學有很大幫助,生...

計算機中乙個程序的邏輯位址為什麼往往比實體地址要多?

英雄不問出處 有mmu這個東西,可以分配虛擬位址 題中邏輯位址,下同 再加上核心的支援,可以提公升物理記憶體的利用率。講一下Linux Kernel的處理,當執行乙個程式時,核心並不會把整個程式完全載入到物理記憶體中,而是分配好虛擬位址,載入可執行檔案的部分到物理記憶體,只分配了虛擬位址而程式未載入...