操作系統是計算機相關專業本科課程中最重要的課程!
操作系統是計算機相關專業本科課程中最重要的課程!
操作系統是計算機相關專業本科課程中最重要的課程!
重要的事情說三遍。大學讀了兩年半了,學習了3,4門硬件課程。我發現在我的大學中,本科硬件課程總體偏理論,旨在構建計算機硬件理論體系。之前匯編,組成原理和之後的體系結構,其實都是一輪一輪的在學生腦海中構建計算機硬件體系結構。作為硬件課程的核心課程,操作系統的重要性不言而喻。
接下來開始介紹相關信息。
LDT,即local descriptor table,局部解釋器表,由ldtr這個寄存器找到。ldtr存放的是selector值,selector就是段選擇子,用來存放段信息。段選擇子是一個16位寄存器,它各位的含義如下圖:
其中RPL是請求特權級,當訪問一個段時,處理器要檢查RPL和CPL(放在cs的位0和位1中,用來表示當前代碼的特權級),即使程序有足夠的特權級(CPL)來訪問一個段,但如果RPL(如放在ds中,表示請求數據段)的特權級不足,則仍然不能訪問,即如果RPL的數值大於CPL(數值越大,權限越小),則用RPL的值覆蓋CPL的值。而段選擇子中的TI是表指示標記,如果TI=0,則表示段描述符(段的詳細信息)在GDT(全局描述符表)中,即去GDT中去查;而TI=1,則去LDT(局部描述符表)中去查。
在32位處理器下,邏輯地址是我們獲得的第一個地址。那麼什麼是邏輯地址呢?
邏輯地址:intel 8086實模式下,邏輯地址就是物理地址。什麼是實模式?
實模式:intel8086采取按1M內存索引的方式。因此,intel8086總線一共20位。在此模式下,段基址左移1位(乘16)之後加上段偏移,再模1M,就得到物理地址。在實模式下,段選擇子叫“段選擇器”,在保護模式下,段選擇器叫“段選擇子”
回到LDT。邏輯地址高13位作為索引,下一位作為LDT 或者GDT選擇符。邏輯地址高16位的最後兩位就是優先級策略,一共4個等級。LDT和GDT的結構一樣,每項占8個字節。
接下來看看段描述符裡面放置的是什麼內容:
可以看到,段描述符是一個64位二進制的數,存放了段基址和段限長等重要的數據。其中位P(Present)是段是否存在的標記;位S用來表示是系統段描述符(S=0)還是代碼或數據段描述符(S=1);四位TYPE用來表示段的類型,如數據段、代碼段、可讀、可寫等;DPL是段的權限,和CPL、RPL對應使用;位G是粒度,G=0表示段限長以位為單位,G=1表示段限長以4KB為單位;其他內容就不詳細解釋了。
假設我們找到的段描述符為:0x00003fff 0x10c0f300,我們來提取重要信息:
首先,第一個0000位基地址高16位。10c0f300中的高二和低二組合:1000,連接上剛才的0000,即為:10000000,這就是我們找到的基地址。加上段偏移,即可得到線性地址。
從線性地址到物理地址,我們需要用到分頁管理方式。假如不存在分頁管理方式,那麼線性地址就是物理地址。首先,我們辛辛苦苦找到的32位的線性地址得分成10+10+12的模式。前十位作為頁目錄號,用來在頁目錄表中找到頁表值。如下圖:
頁目錄表的位置由CR3寄存器指引。頁目錄表和頁表都是10位,尋址范圍為1k,由於每個地址存放4B(32位)的地址,因此頁目錄表加上頁表總共占內存8k。頁目錄表找到頁表之後,中間十位在頁表中找到物理地址基址,加上最後的12位,就得到 了內存條上看得見摸得著的物理地址。
頁目錄表和頁表每條目錄都是32位,其中前20位存放的是地址,而後12位存放其他屬性,我們需要的是前20位。
我們按照以上方法,就能逐步根據邏輯地址找到物理地址。最後,什麼是虛擬地址呢?虛擬地址是一種擴展內存的策略。打個比方,我要從哈爾濱去沈陽,我其實沒必要鋪上這將近600公裡的鐵路。起始,我只需要10公裡的鐵軌就行----每行駛完10公裡,就把末端的鐵軌拆下來鋪到火車前面即可。當然,這個過程需要很快。計算機中就可以執行這麼快,因此計算機可以拆後軌鋪前軌。這就是虛擬地址的原理。
http://xxxxxx/Linuxjc/1180962.html TechArticle