亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

您現在的位置是:首頁 > 技術閱讀 >  為什么要分頁?如何分頁?分頁后地址如何轉化?

為什么要分頁?如何分頁?分頁后地址如何轉化?

時間:2024-02-12

喵哥技術交流群發現了很多水平很高的朋友,歡迎大家來加喵哥微信,進群一起討論計算機知識!

程序喵大人微信

分頁機制是內存管理系統里很重要的一部分,但是分頁機制卻是在內存管理系統建立之前啟用的。本文圍繞分頁機制展開,講述分頁機制的特點,分頁機制是如何啟用的,以及地址轉化的問題。提綱導圖如下:


01

邏輯地址,線性地址,虛擬地址,物理地址傻傻分不清?

在了解分頁機制之前,得先清楚各類地址的含義。

邏輯地址

IA-32架構下,分段是必須的,而分頁并不是必須的。不論分頁與否,訪問內存都必須采用“段基址:段內偏移地址”的策略。


因此訪問內存需要16&32共48位的地址信息,這便是邏輯地址,高12位為段選擇子,后面32位為段內偏移地址。


線性地址

使用選擇子索引到段描述符取得32位的段基址,與邏輯地址內的32位段內偏移地址相加后,得到一個32位的地址信息,這便是線性地址。


虛擬地址

如果不啟用分頁機制,線性地址就是物理地址,而如果啟用分頁機制的話,線性地址又叫做虛擬地址。


物理地址

物理地址,不用多說,內存單元的真正地址。


01

為什么分頁?

分頁的本質就是將各種大小不同的內存段拆分成大小相同的內存塊(通常4KB),以便進行內存管理的一種機制。


在純分段情況下會出現許多問題,如應用程序過多,或者內存碎片過多而無法容納新進程;又或者重新加載某內存段(之前交換出去的)時,找不到合適的內存區域。


造成這情況的原因:只分段的情況下,線性地址就是物理地址,兩者都是連續的,不夠靈活,不可能每次都能找到合適的內存區域。而分頁的話,線性地址需要進一步轉化為物理地址,線性地址是連續的,但是物理地址可以不連續。


這意味著可以在物理內存上隨便(不是真隨便,有塊大小限制)找塊地,只要線性地址和物理地址建立起映射關系就好。這樣的話尋找合適的內存區域時就很靈活,解決了上述問題。


03

分頁機制

頁表(基于32位)

分頁機制的核心是實現虛擬地址到物理地址的轉化,如何轉化呢?靠的是頁表將虛擬地址和物理地址建立起映射關系,有了這映射關系,便可將虛擬地址轉化成實際的物理地址。


總的思想是:將虛擬地址的高20位視作索引號,在頁表中進行索引頁表項,得到物理基址,將其與虛擬地址的低12位偏移地址相加后便得到最后的物理地址。


這也是一級頁表下虛擬地址轉化為物理地址的方式,然而一級頁表并不適用,一般會使用多級頁表。下面以二級頁表為例講解,先看其表項結構:


頁目錄項,頁表項

頁目錄項和頁表項的結構以及屬性位簡介如下:


二級頁表地址轉換

二級頁表下虛擬地址到物理地址轉化的原理與一級頁表下轉化的原理相同,只是多進行了一步轉化。具體流程先看圖:


第一步:使用段選擇子去GDT中索引段描述符,“取出”段基址,段部件將段基址與偏移地址相加得到線性地址,也即虛擬地址。


第二步:將虛擬地址的高10位作為索引號,索引頁目錄表中的頁目錄項,具體操作:將虛擬地址高10位乘4加上CR3中的頁目錄物理地址,得到所要的頁目錄項的地址,即a+0x4*4。


第三步:將虛擬地址的中10位作為索引號索引二級頁表中的頁表項,具體操作:“取出”頁目錄項中的20位頁表物理地址,即0x1000。再加上虛擬地址中10位乘4,得到物理頁地址,即0x1000+0x234*4。


第四步:虛擬地址的后12位偏移地址和第三步得到的物理頁地址相加得到最后實際的物理地址。如圖中所示:0xfa000+0x567=0xfa567為最后target的物理地址。


以上就是二級頁表下地址轉化的過程,三級乃至多級頁表下地址轉化的方法都一樣,不過是多重復了第三步的操作。


注:分頁機制的作用是將虛擬地址轉化為物理地址,但在實際轉化的過程中相當于在關閉分頁機制條件下進行的。即地址轉化的過程中涉及的地址(CR3中頁目錄地址,頁目錄項地址,頁表項地址)都是實際的物理地址,不會被分頁機制繼續轉化,否則的話會無限遞歸下去。


為什么一級頁表不適用?

1個4B大小的頁表項指向4K的頁面,映射整個4G空間的話需要4G / 4K = 1M 個頁表項,因此整個頁表大小為4M。


一個進程便需要4M大小的頁表,如果說有很多進程則會花費許多內存來儲存頁表。再者這還只是32位的系統,內存空間只有232B = 4GB,若是64位系統,則需要 264 / 212 = 252個頁表項 ,那簡直不可想象。


多級頁表為什么比一級頁表省空間?

首先頁表就是一個整體,一級頁表下4M(32位)的頁表就是一個整體,需要全部創建,所以每個進程都要有4M的頁表,這樣的話頁表所占用的空間的確很多。


多級頁表只會為進程實際使用的那部分虛擬內存建立頁表,只用一級頁表需要建立所有的頁表項,而多級頁表只建立了需要的頁表,如此當然更省空間。

那為什么多級頁表下就只需要建立需要的那部分頁表呢?


多級頁表相當于對一級頁表再次進行分頁,將一張大頁表拆成了多張小頁表,以后想用幾張便做幾張,這樣就很靈活而且省空間。


操作系統虛擬內存管理系統對物理頁的分配也是這么實現的,只有某個虛擬地址需要一張新頁表來映射時,才會為它分配物理頁,這就做到了需要才建立的原則,因而比一級頁表更省空間。


04

如何建立分頁機制?(大致思路,與實際操作系統可能有出入)

分頁機制是計算機啟動時進行的,可以算是操作系統加載器的工作,建立起用分頁機制大致要做以下幾件事情:


1、建立初始頁表,計算機啟動時是在 1M 的實模式下工作,頁表的建立相對來說較簡單。而建立頁表就是建立映射關系,建立映射關系就是添加頁表項。操作系統內核的虛擬地址在0xc0000000以上,而最開始我們工作的地址是在物理內存的低端1M,所以這里的映射關系為將物理內存的低端1M映射到虛擬地址空間的0xc0000000以上。


2、GDT,內核棧等等都應放在內核中,需要修改其地址值,還有一些描述符中的段基址也需要修改,因為原來記錄的地址是實際的物理地址,啟用分頁后應采用虛擬地址。


3、把頁目錄地址賦給CR3寄存器。


4、將CR0寄存器的PE位置1,開啟分頁機制。


5、地址轉換的第一步就是去GDT中找段基址,現GDT發生了變化,需要使用 lgdt 指令重新加載GDT。


至此便啟用了分頁機制,隨后系統運行中出現的地址都是虛擬地址,需要經過上述圖中所示的轉化來獲得實際的物理地址。


05

分頁的缺點?如何解決?

分頁雖然很靈活,但是需要做多次計算,多次訪問內存。每一個虛擬地址都要重復上述操作的話,處理器的負擔過重,時間也花費過多。


如何解決呢?利用局部性原理為地址轉換建立了一個高速緩存,TLB,俗稱快表。有了TLB,處理器在尋址之前會先利用虛擬地址的高20位在TLB中查找相應條目,如果命中,則返回虛擬地址所映射的物理頁地址,否則便去查詢頁表,找到相應物理頁地址后再更新TLB。


C++學習資料免費獲取方法:關注程序喵大人,后臺回復“程序喵”即可免費獲取40萬字C++進階獨家學習資料。





往期推薦


1、少寫點
if-else吧,它的效率有多低你知道嗎?
2、年度原創好文匯總
3、全網首發?。++20新特性全在這一張圖里了
4、
他來了,他來了,C+
+17新特性精華都在這了
5、一文讓你搞懂設計模式
6、C++11新特性,所有知識點都在這了!


亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情小说另类小说亚洲欧美| 欧美另类在线观看| 美女在线一区二区| 国产欧美一级| 久久久www免费人成黑人精品| 国产乱码精品| 久久久综合网站| 亚洲激情啪啪| 国产精品国产三级国产aⅴ9色| 午夜免费电影一区在线观看| 国产综合色产在线精品| 久热精品视频在线| 一区二区三区日韩精品| 国产真实精品久久二三区| 欧美 日韩 国产一区二区在线视频| 在线看一区二区| 欧美日韩成人在线视频| 欧美一区=区| 亚洲免费观看高清完整版在线观看熊 | 在线观看日韩av电影| 久久视频一区二区| 亚洲国产日韩一级| 国产午夜精品理论片a级探花 | 日韩视频精品在线| 欧美日韩一级黄| 性亚洲最疯狂xxxx高清| 9l国产精品久久久久麻豆| 在线电影国产精品| 国产亚洲欧美一区在线观看| 欧美电影免费观看| 午夜日本精品| 亚洲精品色图| 136国产福利精品导航网址应用| 欧美日本免费| 欧美在线看片| 亚洲一级二级| 99热这里只有精品8| 激情久久久久久久| 欧美午夜寂寞影院| 久久这里只精品最新地址| 性久久久久久久久久久久| 日韩亚洲成人av在线| …久久精品99久久香蕉国产| 国产亚洲一区在线播放| 欧美性久久久| 国产精品久久久久久久浪潮网站 | 一本色道久久综合狠狠躁篇的优点| 国模吧视频一区| 国产日韩欧美麻豆| 国产午夜精品麻豆| 国产欧美亚洲视频| 国产九九视频一区二区三区| 国产精品第一区| 欧美性感一类影片在线播放| 欧美三日本三级三级在线播放| 欧美精品18+| 欧美日韩爆操| 国产精品v欧美精品v日韩精品| 欧美小视频在线观看| 国产精品久久久久久久一区探花 | 午夜精品区一区二区三| 亚洲图片在区色| 亚洲一区二区久久| 亚洲欧美日韩中文播放| 亚洲欧美国产不卡| 欧美在线一级视频| 欧美一区二区在线| 久久精品人人做人人综合| 久久人91精品久久久久久不卡| 久久视频一区二区| 欧美精品在线视频观看| 欧美日韩综合在线免费观看| 国产精品成人免费视频| 国产美女精品视频| 国产一在线精品一区在线观看| 一区一区视频| 亚洲精品一二| 欧美亚洲免费电影| 欧美mv日韩mv国产网站| 国产精品多人| 国产综合激情| 亚洲美女视频网| 久久国产黑丝| 欧美国产精品| 国产精品免费看片| 亚洲国产精品成人久久综合一区| 99re6这里只有精品| 欧美一区二区精品| 欧美精品一区二区精品网| 国产日本欧洲亚洲| 亚洲国内高清视频| 午夜视频在线观看一区| 欧美高清视频www夜色资源网| 国产综合色产在线精品| 亚洲国产黄色| 亚洲欧美国产精品va在线观看| 久久久久这里只有精品| 欧美日韩高清在线一区| 国产综合色一区二区三区| 亚洲免费观看高清在线观看 | 久久全球大尺度高清视频| 欧美另类极品videosbest最新版本| 国产精品自在欧美一区| 亚洲最新色图| 欧美h视频在线| 激情久久久久久久| 亚洲综合另类| 欧美日韩精品一区二区| 亚洲高清不卡在线| 久久久久久9999| 国产日韩欧美一区| 亚洲一级电影| 欧美三级精品| 亚洲最新在线| 欧美日韩成人综合| 亚洲精品日韩综合观看成人91| 性久久久久久久久| 久久av红桃一区二区小说| 久久久夜夜夜| 欧美日韩在线播放三区四区| 国产一区二区高清| 亚洲在线观看视频| 国产精品狠色婷| 亚洲视频999| 欧美视频免费看| 亚洲国产91| 麻豆freexxxx性91精品| 国产一区二区三区四区三区四| 99在线精品视频| 欧美日韩国产综合在线| 日韩一级大片在线| 欧美日韩免费在线| 99精品视频免费观看视频| 欧美美女喷水视频| 在线一区观看| 国产精品国产a级| 亚洲欧美日韩精品久久久| 国产精品日韩在线| 亚洲欧美在线另类| 国产日韩欧美三区| 老牛嫩草一区二区三区日本| 亚洲第一精品福利| 奶水喷射视频一区| 亚洲欧洲一区二区在线播放| 欧美激情精品| 一本到高清视频免费精品| 欧美日韩直播| 亚洲在线视频观看| 国产视频不卡| 久久精品一级爱片| 亚洲国产精品高清久久久| 欧美精品在线极品| 亚洲综合999| 国外成人性视频| 欧美黄色一级视频| 亚洲香蕉伊综合在人在线视看| 国产九区一区在线| 久久婷婷国产麻豆91天堂| 加勒比av一区二区| 欧美日韩一区国产| 欧美一区二区久久久| 在线观看成人网| 欧美午夜精品久久久久久浪潮 | 久久国产精品久久精品国产| 狠狠色综合网| 欧美日本簧片| 久久激情五月激情| 亚洲作爱视频| 在线成人性视频| 国产精品久久久久久av下载红粉| 久久精品在线免费观看| 亚洲精品乱码久久久久久| 国产精品视频免费观看| 麻豆精品精品国产自在97香蕉| av成人国产| 永久域名在线精品| 国产精品qvod| 免费日韩成人| 久久福利电影| 亚洲一品av免费观看| 激情国产一区二区| 国产精品久久午夜夜伦鲁鲁| 欧美xx69| 久久亚洲私人国产精品va媚药| 亚洲无线观看| 亚洲美女性视频| 亚洲第一黄色网| 红桃视频一区| 国产欧美大片| 国产精品男女猛烈高潮激情| 欧美日本在线播放| 欧美大片免费| 免费高清在线一区| 久久免费精品日本久久中文字幕| 亚洲综合日本| 亚洲免费视频观看| 亚洲视频中文| 亚洲制服少妇| 亚洲一区999| 亚洲免费在线|