日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux mmu的实现的讲解_Linux中的段

發布時間:2024/1/23 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux mmu的实现的讲解_Linux中的段 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Intel 微處理器的段機制是從8086 開始提出的, 那時引入的段機制解決了從CPU 內部

16 位地址到20 位實地址的轉換。為了保持這種兼容性,386 仍然使用段機制,但比以前復雜。

因此,Linux 內核的設計并沒有全部采用Intel 所提供的段方案,僅僅有限度地使用

了一下分段機制。這不僅簡化了Linux 內核的設計,而且為把Linux 移植到其他平臺創造了

條件,因為很多RISC 處理器并不支持段機制。但是,對段機制相關知識的了解是進入Linux

內核的必經之路。

從2.2 版開始,Linux 讓所有的進程(或叫任務)都使用相同的邏輯地址空間,因此就

沒有必要使用局部描述符表LDT。但內核中也用到LDT,那只是在VM86 模式中運行Wine 時,

即在Linux 上模擬運行Windows 軟件或DOS 軟件的程序時才使用。

linux的GDT

Linux 在啟動的過程中設置了段寄存器的值和全局描述符表GDT 的內容,段的定義在include/asm-i386/segment.h 中:

#define __KERNEL_CS 0x10 /* 內核代碼段, index=2,TI=0,RPL=0 */ #define __KERNEL_DS 0x18 /* 內核數據段, index=3,TI=0,RPL=0 */ #define __USER_CS 0x23 /* 用戶代碼段, index=4,TI=0,RPL=3 */ #define __USER_DS 0x2B /* 用戶數據段, index=5,TI=0,RPL=3 */

從定義看出,沒有定義堆棧段,實際上,Linux 內核不區分數據段和堆棧段,這也體現

了Linux 內核盡量減少段的使用。因為沒有使用LDT,因此,TI=0,并把這4 個段都放在GDT

中, index 就是某個段在GDT 表中的下標。內核代碼段和數據段具有最高特權,因此其RPL

為0,而用戶代碼段和數據段具有最低特權,因此其RPL 為3。可以看出,Linux 內核再次簡

化了特權級的使用,使用了兩個特權級而不是4 個。

全局描述符表的定義在arch/i386/kernel/head.S 中:

ENTRY(gdt_table) .quad 0x0000000000000000 /* NULL descriptor */ .quad 0x0000000000000000 /* not used */ .quad 0x00cf9a000000ffff /* 0x10 kernel 4GB code at 0x00000000 */ .quad 0x00cf92000000ffff /* 0x18 kernel 4GB data at 0x00000000 */ .quad 0x00cffa000000ffff /* 0x23 user 4GB code at 0x00000000 */ .quad 0x00cff2000000ffff /* 0x2b user 4GB data at 0x00000000 */ .quad 0x0000000000000000 /* not used */ .quad 0x0000000000000000 /* not used */ /* * The APM segments have byte granularity and their bases * and limits are set at run time. */ .quad 0x0040920000000000 /* 0x40 APM set up for bad BIOS's */ .quad 0x00409a0000000000 /* 0x48 APM CS code */ .quad 0x00009a0000000000 /* 0x50 APM CS 16 code (16 bit) */ .quad 0x0040920000000000 /* 0x58 APM DS data */ .fill NR_CPUS*4,8,0 /* space for TSS's and LDT's */

從代碼可以看出,GDT 放在數組變量gdt_table 中。按Intel 規定,GDT 中的第一項為

空,這是為了防止加電后段寄存器未經初始化就進入保護模式而使用GDT 的。第二項也沒用。

從下標2~5 共4 項對應于前面的4 種段描述符值。對照圖2.10,從描述符的數值可以得出:

  • 段的基地址全部為0x00000000;
  • 段的上限全部為0xffff;
  • 段的粒度G 為1,即段長單位為4KB;
  • 段的D 位為1,即對這4 個段的訪問都為32 位指令;
  • 段的P 位為1,即4 個段都在內存。

由此可以得出,每個段的邏輯地址空間范圍為0~4GB。讀者可能對此不太理解,但這種設置既簡單又巧妙。因為每個段的基地址為0,因此,邏輯地

址到線性地址映射保持不變,也就是說,偏移量就是線性地址,我們以后所提到的邏輯地址

(或虛擬地址)和線性地址指的也就是同一地址。看來,Linux 巧妙地把段機制給繞過去了,

而完全利用了分頁機制。

從邏輯上說,Linux 巧妙地繞過了邏輯地址到線性地址的映射,但實質上還得應付Intel

所提供的段機制。只不過,Linux 把段機制變得相當簡單,它只把段分為兩種:用戶態(RPL

=3)的段和內核態(RPL=0)的段。另外,用戶段和內核段的區別也僅僅在其

RPL 不同,因此內核根本無需訪問描述符投影寄存器,當然也無需訪問GDT,而僅從段寄存器

的最低兩位就可以獲取RPL 的信息。Linux 這樣設計所帶來的好處是顯而易見的,Intel 的分

段部件對Linux 性能造成的影響可以忽略不計。

按Intel 的規定,每個進程有一個任務狀態段(TSS)和局部描述符表LDT,但Linux 也

沒有完全遵循Intel 的設計思路。如前所述,Linux 的進程沒有使用LDT,而對TSS 的使用也

非常有限,每個CPU 僅使用一個TSS。

通過上面的介紹可以看出,Intel 的設計可謂周全細致,但Linux 的設計者并沒有完全

陷入這種沼澤,而是選擇了簡潔而有效的途徑,以完成所需功能并達到較好的性能為目標。

段寄存器與段選擇子

段寄存器CS 、DS 、ES 、FS 、GS 、SS ,在實模式下時,段中存儲的是段基地址,即內存段的起始地址。

而在保護模式下時,由于段基址已經存入了段描述符中,所以段寄存器中再存放段基址是沒有意義的,在段寄

存器中存入的是一個叫作選擇子的東西– selector。用此索引值在段描述符表中索引相應的段描述符,這樣,便在段描述符

中得到了內存段的起始地址和段界限值等相關信息。

由于段寄存器是16 位,所以選擇子也是16 位,在其低2 位即第O~ 1 位,

用來存儲RPL,即請求特權級,可以表示0、1 、2 、3 四種特權級。在選

擇子的第2 位是TI位,即Table Indicator,用來指示選擇子是在GDT 中,還是LDT 中索引描述符。TI

為0 表示在GDT 中索引描述符, TI 為1 表示在LDT 中索引描述符。選擇子的高13 位,即第3~ 15 位是

描述符的索引值,用此值在GDT 中索引描述符。

學而不思則罔

計算機系統從最初發展到現在,硬件、軟件都在發展著,而且二者的發展有些地方是目的相同的。例如多任務這個方向,內存管理是實現多任務的必要條件,硬件在這方面的發展是MMU去支持內存管理,而軟件的發展就是內核去配合MMU,從而才能實現內存管理的虛擬空間、分頁。

分析新處理器上的內核代碼時,可以分析處理器新功能帶來的更新。例如arm處理器,由于arm處理器架構比較靈活,一般說arm寄存器并沒有內存管理相關的寄存器,只說7種模式下的16個寄存器,其實arm的內存管理需要協處理器CP15去支持。另外arm處理器的內存管理也沒有段機制,直接就是頁機制。

總結

以上是生活随笔為你收集整理的linux mmu的实现的讲解_Linux中的段的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕第三页 | 中文字幕第80页 | 亚洲熟妇av一区二区三区 | 欧美三日本三级少妇三 | 91尤物视频 | 小柔的淫辱日记(h | 超碰国产在线观看 | 天天草影院 | 日本一二三区视频 | 夜夜干天天操 | 黑人玩弄人妻一区二区三区影院 | 热热热色| 亚洲精品a | 超碰人人射 | 毛片视频免费观看 | 爱啪啪影视 | 男女无遮挡猛进猛出 | 欧美精品手机在线 | 亚洲永久免费精品 | 九色精品视频 | 香蕉钻洞视频 | 精品99在线| 亚洲13p| 国产综合福利 | 91亚洲天堂 | 无码乱人伦一区二区亚洲 | 天天干 夜夜操 | 国产精品hd| 尤物视频网站在线观看 | 超碰五月天 | 草草影院在线观看 | 黄视频网站在线观看 | 97人妻精品一区二区三区视频 | 丰满人妻一区二区三区免费视频棣 | 午夜极品视频 | 欧美老女人xx | 无码gogo大胆啪啪艺术 | 成人三级影院 | 69久人妻无码精品一区 | 成人高清视频在线观看 | 91在线免费视频 | 国产香蕉一区二区三区 | 国产在线视频资源 | 五月婷婷综合激情 | 色婷av | 一级国产黄色片 | 欧美成人日韩 | 中文字幕人妻一区二 | 四虎在线看片 | 日本做爰全过程免费看 | 日韩欧美精品在线 | www亚洲成人 | 日本夜夜操| 色久阁| 真实的国产乱xxxx在线91 | 女儿的朋友在线播放 | 国产一国产精品一级毛片 | 成人动漫在线观看视频 | 性色在线 | 奇米亚洲 | 肥臀av| 亚洲精品免费在线视频 | 少妇欧美激情一区二区三区 | 欧美日韩不卡视频 | 蜜臀久久99精品久久久画质超高清 | 久久婷婷影院 | 国产成人91精品 | 黄色av片三级三级三级免费看 | www.黄色.| 亚洲综合在线中文字幕 | 亚洲精品乱码久久久久久蜜桃不卡 | 国产三级精品在线观看 | 超碰日韩| 欧美性猛交乱大交xxxx | 97超碰在线资源 | 中文字幕欧美激情 | 中文一区二区在线观看 | 在线观看毛片av | 激情www | 播播网色播播 | 日韩 欧美 亚洲 | 亚洲日本一区二区三区 | 91免费视频观看 | 好紧好爽再浪一点视频 | 日韩中文在线播放 | 成人黄色免费观看 | 偷拍一区二区 | 免费一级片网站 | 国产亚洲欧美一区二区 | 国产精品一区二区麻豆 | 精品无码黑人又粗又大又长 | 欧美在线网 | 秋霞欧美在线观看 | 91精品久久久久久久 | 黄色成人av | 绿帽视频 | 五月天中文字幕在线 | 激情国产在线 | av我不卡 |