精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

梳理Linux內存尋址之分段機制

系統 Linux 系統運維
最近在學習Linux內核,讀到《深入理解Linux內核》的內存尋址一章。原本以為自己對分段分頁機制已經理解了,結果發現其實是一知半解。于是,查找了很多資料,最終理順了內存尋址的知識。現在把我的理解記錄下來,希望對內核學習者有一定幫助,也希望大家指出錯誤之處。

  [[151258]]

【引自ShareHub的博客】一、前言

  最近在學習Linux內核,讀到《深入理解Linux內核》的內存尋址一章。原本以為自己對分段分頁機制已經理解了,結果發現其實是一知半解。于是,查找了很多資料,最終理順了內存尋址的知識。現在把我的理解記錄下來,希望對內核學習者有一定幫助,也希望大家指出錯誤之處。

  二、分段到底是怎么回事

  相信學過操作系統課程的人都知道分段分頁,但是奇怪的是書上基本沒提分段分頁是怎么產生的,這就導致我們知其然不知其所以然。下面我們先扒一下分段機制產生的歷史。

  實模式的誕生(16位處理器及尋址)

  在8086處理器誕生之前,內存尋址方式就是直接訪問物理地址。8086處理器為了尋址1M的內存空間,把地址總線擴展到了20位。但是,一個 尷尬的問題出現了,ALU的寬度只有16位,也就是說,ALU不能計算20位的地址。為了解決這個問題,分段機制被引入,登上了歷史舞臺。

  為了支持分段,8086處理器設置了四個段寄存器:CS,DS,SS, ES。每個段寄存器都是16位的,同時訪問內存的指令中的地址也是16位的。但是,在送入地址總線之前,CPU先把它與某個段寄存器內的值相加。這里要注 意:段寄存器的值對應于20位地址總線中的高16位,所以相加時實際上是內存總線中的高12位與段寄存器中的16位相加,而低4位保留不變,這樣就形成一 個20位的實際地址,也就實現了從16位內存地址到20位實際地址的轉換,或者叫“映射”。

  保護模式的誕生(32位處理器及尋址)

  ◆80286處理器的地址總線為24位,尋址空間達16M,同時引入了保護模式(內存段的訪問受到限制)

  ◆80386處理器是一個32位處理器,ALU和地址總線都是32位的,尋址空間達 4G。也就是說它可以不通過分段機制,直接訪問4G的內存空間。雖然它是新時代的小王子,超越它的無數前輩,然而,它需要背負家族的使命—兼容前代的處理 器。也就是說,它必須支持實模式和保護模式。所以,80386在段寄存器的基礎上構筑保護模式,并且保留16位的段寄存器。

  ◆從80386之后的處理器,架構基本相似,統稱為IA32(32 Bit Intel Architecture)。

  三、IA32的內存尋址機制

  尋址硬件

  在 8086 的實模式下,把某一段寄存器左移4位,然后與地址ADDR相加后被直接送到內存總線上,這個相加后的地址就是內存單元的物理地址,而程序中的這個地址就叫 邏輯地址(或叫虛地址)。在IA32的保護模式下,這個邏輯地址不是被直接送到內存總線而是被送到內存管理單元(MMU)。MMU由一個或一組芯片組成, 其功能是把邏輯地址映射為物理地址,即進行地址轉換,如圖所示。  

MMU

  IA32的三種地址

  ◆邏輯地址:機器語言指令仍用這種地址指定一個操作數的地址或一條指令的地址。 這種尋址方式在Intel的分段結構中表現得尤為具體,它使得MS-DOS或Windows程序員把程序分為若干段。每個邏輯地址都由一個段和偏移量組成。

  ◆線性地址:線性地址是一個32位的無符號整數,可以表達高達232(4GB)的地址。通常用16進制表示線性地址,其取值范圍為0x00000000~0xffffffff。

  ◆物理地址:也就是內存單元的實際地址,用于芯片級內存單元尋址。 物理地址也由32位無符號整數表示。

  MMU地址轉化過程

  MMU是一種硬件電路,它包含兩個部件,一個是分段部件,一個是分頁部件,在此,我們把它們分別叫做分段機制和分頁機制,以利于從邏輯的角度來理解硬件的實現機制。分段機制把一個邏輯地址轉換為線性地址;接著,分頁機制把一個線性地址轉換為物理地址。  


MMU_translate

 

  IA32的段寄存器

  IA32中有六個16位段寄存器:CS,DS,SS,ES,FS,GS。跟8086的段寄存器不同的是,這些寄存器存放的不再是某個段的基地址,而是某個段的選擇符(Selector)。

#p#

  四、分段機制的實現

  段是虛擬地址空間的基本單位,分段機制必須把虛擬地址空間的一個地址轉換為線性地址空間的一個線性地址。

  為了實現這種映射,僅僅用段寄存器來確定一個基地址是不夠的,至少還得描述段的長度,并且還需要段的一些其他信息,比如訪問權之類。所以,這里需要的是一個數據結構,這個結構包括三個方面的內容:

  1.段的基地址(Base Address):在線性地址空間中段的起始地址。

  2.段的界限(Limit):在虛擬地址空間中,段內可以使用的***偏移量。

  3.段的保護屬性(Attribute):表示段的特性。例如,該段是否可被讀出或寫入,或者該段是否作為一個程序來執行,以及段的特權級等等。

  上面的數據結構我們稱為段描述符,多個段描述符組成的表稱為段描述符表

  段描述符

  所謂描述符(Descriptor),就是描述段的屬性的一個8字節存儲單元。在實模式下,段的屬性不外乎是代碼段、堆棧段、數據段、段的起始地址、段的長度等等,而在保護模式下則復雜一些。IA32將它們結合在一起用一個8字節的數表示,稱為描述符 。  

IA32的一個通用的段描述符的結構

  從圖可以看出,一個段描述符指出了段的32位基地址和20位段界限(即段長)。這里我們只關注基地址和段界限,其他的屬性略過。

  1.段描述符表

  各種各樣的用戶描述符和系統描述符,都放在對應的全局描述符表、局部描述符表和中斷描述符表中。描述符表(即段表)定義了IA32系統的所有段 的情況。所有的描述符表本身都占據一個字節為8的倍數的存儲器空間,空間大小在8個字節(至少含一個描述符)到64K字節(至多含8K)個描述符之間。

  2.全局描述符表(GDT)

  全局描述符表GDT(Global Descriptor Table),除了任務門,中斷門和陷阱門描述符外,包含著系統中所有任務都共用的那些段的描述符。 它的***個8字節位置沒有使用。

  3.中斷描述符表IDT(Interrupt Descriptor Table)

  中斷描述符表IDT(Interrupt Descriptor Table),包含256個門描述符。IDT中只能包含任務門、中斷門和陷阱門描述符,雖然IDT表最長也可以為64K字節,但只能存取2K字節以內的描述符,即256個描述符,這個數字是為了和8086保持兼容。

  局部描述符表(LDT)

  局部描述符表LDT(local Descriptor Table),包含了與一個給定任務有關的描述符,每個任務各自有一個的LDT。 有了LDT,就可以使給定任務的代碼、 數據與別的任務相隔離。每一個任務的局部描述符表LDT本身也用一個描述符來表示,稱為LDT描述符,它包含了有關局部描述符表的信息,被放在全局描述符表GDT中。

  總結

  IA32的內存尋址機制完成從邏輯地址—線性地址—物理地址的轉換。其中,邏輯地址的段寄存器中的值提供段描述符,然后從段描述符中得到段基址和段界限,然后加上邏輯地址的偏移量,就得到了線性地址,線性地址通過分頁機制得到物理地址。

  首先,我們要明確,分段機制是IA32提供的尋址方式,這是硬件層面的。就是說,不管你是windows還是linux,只要使用IA32的CPU訪問內存,都要經過MMU的轉換流程才能得到物理地址,也就是說必須經過邏輯地址—線性地址—物理地址的轉換。

  五、Linux中分段的實現

  前面說了那么多關于分段機制的實現,其實,對于Linux來說,并沒有什么卵用。因為,Linux基本不使用分段的機制,或者說,Linux中的分段機制只是為了兼容IA32的硬件而設計的。

  Intel微處理器的段機制是從8086開始提出的, 那時引入的段機制解決了從CPU內部16位地址到20位實地址的轉換。為了保持這種兼容性,386仍然使用段機制,但比以前復雜得多。因此,Linux內 核的設計并沒有全部采用Intel所提供的段方案,僅僅有限度地使用了一下分段機制。這不僅簡化了Linux內核的設計,而且為把Linux移植到其他平 臺創造了條件,因為很多RISC處理器并不支持段機制。但是,對段機制相關知識的了解是進入Linux內核的必經之路。

  從2.2版開始,Linux讓所有的進程(或叫任務)都使用相同的邏輯地址空間,因此就沒有必要使用局部描述符表LDT。但內核中也用到LDT,那只是在VM86模式中運行Wine,因為就是說在Linux上模擬運行Winodws軟件或DOS軟件的程序時才使用。

  在 IA32 上任意給出的地址都是一個虛擬地址,即任意一個地址都是通過“選擇符:偏移量”的方式給出的,這是段機制存訪問模式的基本特點。所以在IA32上設計操作 系統時無法回避使用段機制。一個虛擬地址最終會通過“段基地址+偏移量”的方式轉化為一個線性地址。 但是,由于絕大多數硬件平臺都不支持段機制,只支持分頁機制,所以為了讓 Linux 具有更好的可移植性,我們需要去掉段機制而只使用分頁機制。但不幸的是,IA32規定段機制是不可禁止的,因此不可能繞過它直接給出線性地址空間的地址。 萬般無奈之下,Linux的設計人員干脆讓段的基地址為0,而段的界限為4GB,這時任意給出一個偏移量,則等式為“0+偏移量=線性地址”,也就是說 “偏移量=線性地址”。另外由于段機制規定“偏移量<4GB”,所以偏移量的范圍為0H~FFFFFFFFH,這恰好是線性地址空間范圍,也就是說 虛擬地址直接映射到了線性地址,我們以后所提到的虛擬地址和線性地址指的也就是同一地址。看來,Linux在沒有回避段機制的情況下巧妙地把段機制給繞過 去了。

  另外,由于IA32段機制還規定,必須為代碼段和數據段創建不同的段,所以Linux必須為代碼段和數據段分別創建一個基地址為0,段界限為4GB 的段描述符。不僅如此,由于Linux內核運行在特權級0,而用戶程序運行在特權級別3,根據IA32段保護機制規定,特權級3的程序是無法訪問特權級為 0的段的,所以Linux必須為內核用戶程序分別創建其代碼段和數據段。這就意味著Linux必須創建4個段描述符——特權級0的代碼段和數據段,特權級3的代碼段和數據段。

  六、總結

  分段機制是IA32架構CPU的特色,并不是操作系統尋址方式的必然選擇。Linux為了跨平臺,巧妙的繞開段機制,主要使用分頁機制來尋址。

  參考資料

  《深入分析Linux內核源碼》

責任編輯:火鳳凰 來源: ShareHub博客
相關推薦

2015-10-09 10:22:47

分頁內存尋址Linux

2009-12-17 11:00:47

Linux內存管理

2020-09-30 06:50:35

Linux內存尋址

2010-06-10 10:59:33

Internet協議

2013-09-29 15:11:46

Linux運維內存管理

2018-10-10 05:12:35

2025-04-15 06:00:00

2015-06-04 09:38:39

Java垃圾回收機

2021-07-07 11:35:17

Linux內存段尋址

2010-06-02 11:33:26

Linux 內存監控

2025-09-18 09:17:46

2011-01-18 09:51:59

Linux磁盤分區

2021-10-08 07:53:01

Go 尋址元素

2020-06-22 08:30:42

Linux內存手動釋放

2011-01-18 10:25:19

Linux磁盤分區

2025-04-09 05:22:00

2013-04-01 10:07:19

Java內存回收機制

2010-09-26 13:23:13

JVM內存管理機制

2022-06-01 16:01:58

MySQL內存管理系統

2009-08-26 14:52:19

.NET Framew
點贊
收藏

51CTO技術棧公眾號

欧美黑人一区| 中文字幕av影视| ccyy激情综合| 五月天亚洲婷婷| 欧美连裤袜在线视频| 免费毛片一区二区三区| 77成人影视| 疯狂蹂躏欧美一区二区精品| 欧美一级爱爱| 97精品人妻一区二区三区| 亚洲香蕉av| 亚洲激情 国产| 老司机午夜av| 黄色网在线免费看| 成人福利在线看| 国产成人精品久久| 国产美女网站视频| jizz性欧美2| 色婷婷亚洲精品| 日韩视频在线观看视频| 黄色小视频免费在线观看| 亚洲国产一区二区精品专区| 亚洲а∨天堂久久精品9966| 红桃av在线播放| 国内精品不卡| 久久理论电影网| 91久久久久久久久| 中日韩黄色大片| 97精品国产一区二区三区| 精品久久久久久久久久久院品网| 日本黄色三级大片| 超碰在线网址| 久久久亚洲精品一区二区三区| 2019亚洲男人天堂| 国产午夜手机精彩视频| 自拍视频一区| 精品国产成人在线影院 | 成人毛片在线| 日韩精品在线网站| 黄色三级视频在线| 丁香花视频在线观看| 欧美国产精品一区| 黑人另类av| 99国产在线播放| 日韩高清在线一区| 91精品国产91久久久久| 久久久久久久久久97| 亚洲涩涩av| 91麻豆精品国产91久久久| 国产亚洲天堂网| 99re6在线精品视频免费播放| 国产精品国产三级国产三级人妇| 久久久一本精品99久久精品66| 国产又粗又猛又爽又黄视频 | 中文国产成人精品| 欧产日产国产精品98| 欧美亚洲人成在线| 在线免费不卡视频| 色欲av无码一区二区人妻| 美女精品视频| 尤物在线观看一区| 老汉色影院首页| 在线观看完整版免费| 不卡影院免费观看| 91高跟黑色丝袜呻吟在线观看| 亚洲精品一区二三区| 99成人在线| 国模精品系列视频| 久久久久人妻一区精品色欧美| 91中文字幕精品永久在线| 亚洲一级黄色片| 黄色正能量网站| 欧美日韩一本| 精品性高朝久久久久久久| 欧亚乱熟女一区二区在线| 亚洲综合资源| 在线免费观看视频一区| 情侣黄网站免费看| 成人免费看黄| 色婷婷综合久久久中文一区二区| 2022亚洲天堂| 惠美惠精品网| 欧美在线短视频| wwwwxxxx日韩| 欧美一级网址| 欧美一卡二卡在线观看| 日本黄色一级网站| 荡女精品导航| 日韩av中文字幕在线免费观看| 天天插天天射天天干| 久久综合五月婷婷| 亚洲精品在线观看www| 欧美色图亚洲激情| 青青草97国产精品麻豆| 久久精品国产亚洲精品2020| 欧美成人手机视频| av成人天堂| 国产精品国产三级国产aⅴ浪潮| 国产成人麻豆免费观看| 久久精品国产99| www久久99| 欧美色18zzzzxxxxx| 国产精品久久看| 伊人网在线免费| sm久久捆绑调教精品一区| 精品magnet| 久热精品在线播放| 伊人久久噜噜噜躁狠狠躁| 亚洲电影免费观看高清| 无码人妻精品一区二区三| 亚洲日本va| 国产小视频国产精品| 三上悠亚作品在线观看| 亚洲第一伊人| 国产精品亚洲精品| 欧美在线 | 亚洲| 国产日韩欧美电影| 日韩久久久久久久久久久久| 亚洲国产成人二区| 欧美一区二区三区四区久久| 插吧插吧综合网| 欧美激情1区2区| 日韩av电影中文字幕| 国产精品亚洲lv粉色| av在线综合网| 亚洲欧美日韩不卡| 亚洲欧美电影| 日韩视频免费观看高清完整版 | www日韩大片| 中文字幕黄色大片| 国产黄色大片在线观看| 欧美丝袜丝nylons| 99久久国产精| 中文字幕一区二区精品区| 国产91精品在线播放| 成人毛片视频免费看| 国产精品天天看| 日韩小视频在线播放| 欧美第一在线视频| 欲色天天网综合久久| 美日韩一二三区| 国产91丝袜在线播放九色| 亚洲国产日韩欧美| 俺来也官网欧美久久精品| 在线观看视频一区二区| 一级欧美一级日韩片| 亚洲高清影视| 国产精品一区av| 国产爆初菊在线观看免费视频网站 | 99久久久久久中文字幕一区| 国产aaa精品| 午夜影院在线视频| 一区二区三区在线视频免费观看| youjizzxxxx18| 女人av一区| 久久久亚洲成人| 国产视频第二页| 亚洲人成网站精品片在线观看| xx欧美撒尿嘘撒尿xx| 国产伦精品一区二区三区千人斩| 97国产精品免费视频| 亚洲AV无码成人片在线观看| 亚洲欧美日韩国产综合| av中文字幕网址| 99精品美女| 国产日产久久高清欧美一区| 1769在线观看| 欧美日韩成人在线| 少妇愉情理伦三级| 久久久久久久欧美精品| 欧美精品一区二区视频| 在线看的毛片| 亚洲人精选亚洲人成在线| 久久青青草原亚洲av无码麻豆| 99热这里都是精品| 99精品在线免费视频| 欧美交a欧美精品喷水| 欧美伊久线香蕉线新在线| 九色在线免费| 欧美午夜精品一区二区蜜桃| 性色国产成人久久久精品| 国产真实乱子伦精品视频| 亚洲三区四区| 色播一区二区| 97成人精品区在线播放| 天堂在线一二区| 在线亚洲一区二区| 国产精品夜夜夜爽阿娇| 国产激情视频一区二区三区欧美 | 亚洲精品a级片| 97神马电影| 久草在线中文最新视频| 亚洲人成在线观| 136福利视频导航| 一区二区三区四区国产精品| 亚洲成人av免费在线观看| 久久一二三四| 日本三级福利片| 久久a级毛片毛片免费观看| 欧美影院久久久| 黄色在线播放网站| 亚洲国产精品99久久| 久久久久久av无码免费看大片| 国产精品三级电影| 8x8x成人免费视频| 亚洲精品1234| 涩涩涩999| 成人动态视频| 国产精品久久久久av免费| www在线免费观看视频| 亚洲精品国产综合区久久久久久久| 欧美人一级淫片a免费播放| 亚洲人成网站精品片在线观看| 先锋资源av在线| 狠狠色综合日日| 人妻熟妇乱又伦精品视频| 婷婷亚洲五月| 精品综合久久| 亚洲精品第一| 欧美精品18videosex性欧美| 狠狠色伊人亚洲综合网站l| 91麻豆精品国产自产在线观看一区 | 精品少妇人妻av一区二区| 日韩有码一区| 成人午夜高潮视频| 草草影院在线| 免费99精品国产自在在线| 男人av在线| 精品国产乱码久久久久久夜甘婷婷| 日韩在线视频不卡| 亚洲妇熟xx妇色黄| 永久免费看片视频教学| 久久综合999| 风韵丰满熟妇啪啪区老熟熟女| 免费一区二区视频| r级无码视频在线观看| 久久理论电影| 日本在线免费观看一区| 欧美电影免费网站| 91久久偷偷做嫩草影院| 欧美一级做一级爱a做片性| 日本精品久久久| 久久男人av资源站| 国内精品小视频在线观看| av软件在线观看| 久久伊人精品天天| 在线看黄色av| 国产午夜精品全部视频在线播放| 亚洲精品久久久狠狠狠爱| 91麻豆精品国产91久久久资源速度| 欧美日韩 一区二区三区| 欧美性xxxxx极品| 国产一级做a爱片久久毛片a| 亚洲一二三区不卡| 欧美日韩中文字幕在线观看| 亚洲色图一区二区三区| 欧美特黄一级片| 亚洲免费在线电影| 中文字幕五月天| 亚洲女人的天堂| 激情五月少妇a| 亚洲午夜av在线| 动漫精品一区一码二码三码四码| 亚洲精品欧美在线| 国产这里有精品| 亚洲影院久久精品| 久久久久免费看| 亚洲午夜免费福利视频| 久热这里只有精品在线| 亚洲香肠在线观看| 精品无码久久久久久久| 亚洲国产视频一区二区| 国产亚洲精品久久久久久打不开| 亚洲一区二区视频| 国产中文字字幕乱码无限| 精品久久久视频| 天天干天天操天天爱| 日韩欧美福利视频| 韩国av中文字幕| 在线视频你懂得一区二区三区| 樱花视频在线免费观看| 欧美日韩国产电影| 国产伦理吴梦梦伦理| 精品蜜桃在线看| 香港一级纯黄大片| 亚洲午夜女主播在线直播| 午夜在线免费观看视频| 欧美麻豆久久久久久中文| 欧美xxxx免费虐| 欧美美女18p| 免费h在线看| 国产精品最新在线观看| 免费看日产一区二区三区| 国产精品一区二区三区免费观看| 婷婷综合福利| 伊人久久大香线蕉av一区| 欧美日韩一区自拍| 国产l精品国产亚洲区久久| 久久99热国产| 激情小说欧美色图| 久久人人97超碰com| 美女视频久久久| 精品久久久久久国产| www.五月婷婷.com| 精品黑人一区二区三区久久| 狠狠色伊人亚洲综合网站l| 欧美大片va欧美在线播放| 性欧美freesex顶级少妇| 国产精品高清免费在线观看| 亚洲国产伊人| 久久精品一区二区三区不卡免费视频| 久久影院一区| www精品久久| 麻豆久久一区二区| 最新在线黄色网址| 亚洲你懂的在线视频| 精品国产乱子伦| 精品欧美久久久| 天堂аⅴ在线地址8| 久久久久久久一区二区三区| av一区在线播放| 激情小说综合区| 欧美激情1区2区| 精品亚洲一区二区三区四区| 91一区二区在线| 一区二区三区免费高清视频| 欧美精品123区| 天天av天天翘| 日韩在线中文字| 婷婷综合六月| 久久超碰亚洲| 亚洲精品1234| 丰满人妻一区二区三区53视频| 欧美激情中文字幕一区二区| 国产欧美日韩另类| 精品日韩一区二区三区| 麻豆网在线观看| 国产精品综合不卡av| 亚洲资源网你懂的| 中文字幕乱码免费| 久久狠狠亚洲综合| 精品人妻一区二区三区蜜桃视频| 亚洲五月六月丁香激情| va婷婷在线免费观看| 日韩网站在线观看| 成人精品高清在线视频| 日本不卡在线播放| 日韩精品欧美精品| 毛片久久久久久| 91麻豆精品国产自产在线| 四虎影视成人| 国产伦视频一区二区三区| 国产精品女主播一区二区三区 | 国产精品乱码一区二三区小蝌蚪| 香蕉污视频在线观看| 在线视频精品一| 伊人久久综合网另类网站| 久久久无码中文字幕久...| 成人在线视频首页| 五月天综合激情网| 尤物yw午夜国产精品视频明星| 亚洲欧洲专区| 欧洲精品在线播放| 97久久超碰国产精品电影| 色老头一区二区| xvideos国产精品| 国产ts一区| 亚洲精品高清无码视频| 国产精品嫩草影院com| 成人激情四射网| 日本精品一区二区三区在线| 97精品国产福利一区二区三区| 激情小说欧美色图| 日本国产一区二区| 乱人伦中文视频在线| 国产经品一区二区| 日韩电影一二三区| 日韩一级片av| 亚洲欧美色图片| 日韩高清在线观看一区二区| 97xxxxx| 亚洲人一二三区| 亚洲欧美综合在线观看| 国产主播精品在线| 亚洲少妇一区| 日韩av手机在线免费观看| 亚洲精品videossex少妇| 国产亚洲欧美日韩精品一区二区三区 | 麻豆国产精品777777在线| 18精品爽视频在线观看| 亚洲最大在线视频| av成人综合| 一道本在线免费视频| 天天做天天摸天天爽国产一区| av网在线观看| 国产精选在线观看91| 麻豆精品久久精品色综合| 日本黄色片视频| 另类天堂视频在线观看| 免费观看不卡av|