亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Linux > 正文

linux之虛擬內存相關介紹

2020-05-27 13:50:51
字體:
來源:轉載
供稿:網友

什么是虛存?為什么需要它? 我們知道程序代碼和數據必須駐留在內存中才能得以運行,然而系統內 存數量很有限,往往不能容納一個完整程序的所有代碼和數據,更何況在多任務系統中,可能需要同時打開子處理程序,畫圖程序,瀏覽器等很多任務,想讓內存駐 留所有這些程序顯然不太可能。因此首先能想到的就是將程序分割成小份,只讓當前系統運行它所有需要的那部分留在內存,其它部分都留在硬盤。當系統處理完當 前任務片段后,再從外存中調入下一個待運行的任務片段。的確,老式系統就是這樣處理大任務的,而且這個工作是由程序員自行完成。但是隨著程序語言越來越高 級,程序員對系統體系的依賴程度降低了,很少有程序員能非常清楚的駕馭系統體系,因此放手讓程序員負責將程序片段化和按需調入輕則降低效率,重則使得機器 崩潰;再一個原因是隨著程序越來越豐富,程序的行為幾乎無法準確預測,程序員自己都很難判斷下一步需要載入哪段程序。因此很難再靠預見性來靜態分配固定大 小的內存,然后再機械地輪換程序片進入內存執行。系統必須采取一種能按需分配而不需要程序員干預的新技術。 虛擬內存(之所以稱為虛 擬內存,是和系統中的邏輯內存和物理內存相對而言的,邏輯內存是站在進程角度看到的內存,因此是程序員關心的內容。而物理內存是站在處理器角度看到的內 存,由操作系統負責管理。虛擬內存可以說是映射到這兩種不同視角內存的一個技術手段。)技術就是一種由操作系統接管的按需動態內存分配的方法,它允許程序 不知不覺中使用大于實際物理空間大小的存儲空間(其實是將程序需要的存儲空間以頁的形式分散存儲在物理內存和磁盤上),所以說虛擬內存徹底解放了程序員, 從此程序員不用過分關心程序的大小和載入,可以自由編寫程序了,繁瑣的事情都交給操作系統去做吧。 實現虛擬內存 虛擬內存是將系統硬盤空間和系統實際內存聯合在一起供進程使用,給進程提供了一個比內存大得多的虛擬空間。在程序運行時,只要把虛擬地址空間的一小部分 映射到內存,其余都存儲在硬盤上(也就是說程序虛擬空間就等于實際物理內存加部分硬盤空間)。當被訪問的虛擬地址不在內存時,則說明該地址未被映射到內 存,而是被存貯在硬盤中,因此需要的虛擬存儲地址隨即被調入到內存;同時當系統內存緊張時,也可以把當前不用的虛擬存儲空間換出到硬盤,來騰出物理內存空 間。系統如此周而復始地運轉——換入、換出,而用戶幾乎無法查覺,這都是拜虛擬內存機制所賜。 Linux的swap分區就是硬盤專門為虛擬存儲空間預留的空間。經驗大小應該是內存的兩倍左右。有興趣的話可以使用 swapon -s 查看交換分區大小。 大道理很好理解,無非是用內存和硬盤空間合成為虛擬內存空間。但是這一過程中反復運行的地址映射(虛擬地址映射到物理地址)和虛擬地址換入換出卻值得仔細推敲。系統到底是怎么樣把虛擬地址映射到物理地址上的呢?內存又如何能不斷地和硬盤之間換入換出虛擬地址呢? 利用段機制能否回答上述問題呢?邏輯地址通過段機制后變為一個32位的地址,足以覆蓋4G的內存空間,當程序需要的虛擬地址不在內存時,只依靠段機制很 難進行虛擬空間地換入換出,因為不大方便把整段大小的虛擬空間在內存和硬盤之間調來調去(老式系統中,會笨拙地換出整段內存甚至整個進程,想想這樣做會有 那些惡果吧?。?。所以很有必要尋找一個更小更靈活的存儲表示單位,這樣才方便虛擬地址在硬盤和內存之間調入調出。這個更小的存儲管理單位便是頁(4K大 ?。?。管理頁換入換出的機制被稱為頁機制。 因為使用頁機制的原因,通過段機制轉換得到的地址僅僅是作為一個中間地址——線性地址, 該地址不代表實際物理地址,而是代表整個進程的虛擬空間地址。在線性地址的基礎上,頁機制接著會處理線性地址映射:當需要的線性地址(虛擬空間地址)不在 內存時,便以頁為單位從磁盤中調入需要的虛擬內存;當內存不夠時,又會以頁為單位把內存中虛擬空間的換出到磁盤上??梢?,利用頁來管理內存和磁盤(虛擬內 存)大大方便了內存管理的工作。毫無疑問,頁機制和虛擬內存管理簡直是“絕配”。 使用頁機制,4G空間被分成2的20次方個4K大小的 頁面(頁面也可定為4M大?。?,因此定位頁面需要的索引表(頁表)中每個索引項至少需要20位,但是在頁表項中往往還需要附加一些頁屬性,所以頁表項實際 為32位,其中12位用來存放諸如“頁是否存在于內存”或“頁的權限”等信息。 前面我們提到了線性地址是32位。它其中高20位是對頁表的索引,低12位則給出了頁面中的偏移。線性地址經過頁表找到頁面基地址后和低12位偏移量相加就形成了最終需要的物理地址了。 在實際使用中,并非所有頁表項都是被存放在一個大頁表里,因為每個頁表項占4個字節,如果要在一個表中存放2的20次方個頁表項,就需要4M的連續存儲空間。這么大的連續空間可不好找,因此往往會把頁表分級存儲,比如分兩級,那么每級頁表只需要4k連續空間了。 兩級頁表搜索如同看章回小說,先找到在哪一章里,然后在找在該章下的哪一節。具體過程看看下圖: linux之虛擬內存相關介紹  武林網綜上所述,地址轉換工作需要兩種技術,一是段機制,二是頁機制。段機制處理邏輯地址向線性地址的映射;頁機制則負責把線性地址映射為物理地址。兩級映射共同完成了從程序員看到的邏輯地址轉換到處理器看到的物理地址這一艱巨任務。 你可以將這兩種機制分別比作一個地址轉換函數,段機制的變量是邏輯地址,函數值是線性地址;頁機制的變量是線性地址,函數值是物理地址。地址轉換過程如下所示。 邏輯地址——(段函數)——>線性地址——(頁函數)——>物理地址。 雖然段機制和頁機制都參與映射,但它們分工不同,而且相互獨立互不干擾,彼此之間不必知道對方是否存在。 下面我們結合Linux實例簡要地看看段頁機制如何使用。 Linux中的分段策略 段機制在Linux里用得有限,并沒有被完全利用。每個任務并未分別安排各自獨立的數據段,代碼段,而是僅僅最低限度的利用段機制來隔離用戶數據和系統 數據——Linux只安排了四個范圍一樣的段,內核數據段,內核代碼段,用戶數據段,用戶代碼段,它們都覆蓋0-4G的空間,所不同的是各段屬性不同,內 核段特權級為0,用戶段特權級為3。這樣分段,避免了邏輯地址到線性地址的轉換步驟(邏輯地址就等于線性地址),但仍然保留了段的等級這層最基本保護。 每個用戶進程都可以看到4G大小的線性空間,其中0-3G是用戶空間,用戶態進程可以直接訪問;從3G-4G空間為內核空間,存放內核代碼和數據,只有內核態進程能夠直接訪問,用戶態進程不能直接訪問,只能通過系統調用和中斷進入內核空間,而這時就要進行的特權切換。 說 到特權切換,就離不開任務門,陷阱門/中斷門等概念。陷阱門和中斷門是在發生陷阱和中斷時,進入內核空間的通道。調用門是用戶空間程序相互訪問時所需要的 通道,任務門比較特殊,它不含任何地址,而是服務于任務切換(但linux任務切換時并未真正采用它,它太麻煩了)。 對于各種門系統都會有對應的門描述符,和段描述符結構類似,門描述符也是由對應的門選擇字索引,并且最終會產生一個指向特定段內偏移地址的指針。這個指針指向的就是將要進入的入口。利用門的目的就是保證入口可控,不至于進入到內核中不該訪問的位置。 Linux中的分頁策略 看看linux中如何使用分頁。 Linux中每個進程都會有各自不同的頁表,也就是說進程的映射函數互不相同,保證每個進程虛擬地址不會映射到相同的物理地址上。這是因為進程之間必須相互獨立,各自的數據必須隔離,防止信息泄漏。 需要注意的是,內核作為必須保護的單獨部分,它有自己獨立的頁表來映射內核空間(并非全部空間,僅僅是物理內存大小的空間),該頁表 (swapper_pg_dir)被靜態分配,它只來映射內核空間(swapper_pg_dir只用到768項以后的項——768個頁目錄可映射3G空 間)。這個獨立頁表保證了內核虛擬空間獨立于其他用戶程序空間,也就是說其他進程通常狀態下和內核是沒有聯系的(在編譯內核的時候,內核代碼被指定鏈接到 3G以上空間),因而內核數據也就自然被保護起來了。 那么在用戶進程需要訪問內核空間時如何做呢? Linux采用了個巧妙的方法:用戶進程頁表的前768項映射進程空間(<3G,因為LDT 中只指定基地址為0,范圍只能到0xc0000000),如果進程要訪問內核空間,如調用系統調用,則進程的頁目錄中768項后的表項將指向 swapper_pg_dir的768項后的項,所以一旦用戶陷入內核,就開始使用內核的頁表swapper_pg_dir了,也就是說可以訪問內核空間 了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩专区| 亚洲欧美精品伊人久久| 欧美一级在线亚洲天堂| 欧美一级在线亚洲天堂| 国产一区红桃视频| 91中文字幕在线观看| 91大神福利视频在线| 国产成人久久久精品一区| 操人视频在线观看欧美| 欧美视频在线观看免费网址| 国产精品流白浆视频| 久久久久久久爱| 欧美高清第一页| 国产精品女主播视频| 欧美精品激情blacked18| 国产精品99久久久久久久久久久久| 自拍偷拍亚洲一区| 国产女人18毛片水18精品| 成人免费自拍视频| 亚洲在线观看视频网站| 97香蕉超级碰碰久久免费软件| 91禁国产网站| 91九色视频在线| 久久久亚洲精品视频| 亚洲自拍高清视频网站| 成人激情视频在线| 91欧美精品午夜性色福利在线| 韩国国内大量揄拍精品视频| 国产日产久久高清欧美一区| 国产欧美在线观看| 久久精品国产69国产精品亚洲| 欧美成人性色生活仑片| 欧美最猛性xxxxx免费| 亚洲桃花岛网站| 亚洲精品理论电影| 亚洲视频在线观看| 国产精品扒开腿爽爽爽视频| 久久精品中文字幕一区| 欧美午夜电影在线| 成人午夜激情免费视频| 亚洲精品国产精品国产自| 欧美成人精品三级在线观看| 国产精品久久一区主播| 中文字幕久久亚洲| 欧美日在线观看| 自拍亚洲一区欧美另类| 亚洲成年网站在线观看| 18性欧美xxxⅹ性满足| 国产成人精品电影| 国产精品视频大全| 亚洲国产精品久久久| 欧美在线免费观看| 中文字幕视频一区二区在线有码| 国产美女精彩久久| 久久99国产精品自在自在app| 日韩中文在线中文网三级| 欧美激情一区二区三区成人| 欧美专区第一页| 精品久久久一区| 国产精品久久久久久av福利软件| 欧美老少做受xxxx高潮| 日韩在线视频一区| 欧美日韩国产限制| 美乳少妇欧美精品| 秋霞成人午夜鲁丝一区二区三区| 亚洲日韩中文字幕在线播放| 97色在线播放视频| 国产精品视频久久久| 美女久久久久久久久久久| 欧美激情日韩图片| 亚洲精品美女久久| 亚洲第一页中文字幕| 日韩精品在线观看视频| 最新亚洲国产精品| 国产一区二区三区直播精品电影| 国产精品免费久久久| 欧美日韩国产影院| 浅井舞香一区二区| 中文字幕国产日韩| 欧美日韩中文字幕| 亚洲国产成人精品一区二区| 日韩av123| 欧美高清一级大片| 57pao成人永久免费视频| 日韩**中文字幕毛片| 91美女片黄在线观| 97婷婷大伊香蕉精品视频| 国产精品久久久久久久久借妻| 亚洲大胆人体av| 久久久欧美精品| 在线观看国产精品淫| 精品欧美一区二区三区| 国内自拍欧美激情| 国产一区二区三区在线播放免费观看| 国产在线观看精品| 国产成人免费av电影| 精品国产视频在线| 久久久精品网站| 91九色在线视频| 国产一区二区三区欧美| zzijzzij亚洲日本成熟少妇| 国产精品 欧美在线| 国产一区二区动漫| 日韩av色在线| 欧美极度另类性三渗透| 国产精品一区二区三区在线播放| 国外成人在线视频| 欧美精品第一页在线播放| 亚洲电影在线观看| 亚洲奶大毛多的老太婆| 黑人巨大精品欧美一区二区一视频| 91亚洲va在线va天堂va国| 国产成人精品在线观看| 美女福利精品视频| 国产精品老牛影院在线观看| 精品人伦一区二区三区蜜桃网站| 欧美精品videosex牲欧美| 日本久久久久亚洲中字幕| 中文字幕精品影院| 日韩美女在线观看| 亚洲人成五月天| 美日韩精品免费观看视频| 国产激情999| 亚洲日韩中文字幕| 日韩精品免费在线视频| 夜夜嗨av色综合久久久综合网| 亚洲国产福利在线| 欧美日韩在线一区| 91精品视频一区| 中文国产成人精品久久一| 成人av资源在线播放| 亚洲美女精品成人在线视频| 成人黄色午夜影院| 综合激情国产一区| 欧美国产日韩免费| 亚洲精品中文字幕av| 久久久久久久av| 欧美性xxxx极品hd欧美风情| 久久免费视频这里只有精品| 欧美极品少妇xxxxⅹ裸体艺术| 日韩精品福利在线| 欧美一区三区三区高中清蜜桃| 精品高清美女精品国产区| 国产在线高清精品| 日韩大片免费观看视频播放| 国内精品久久久久影院 日本资源| 欧美重口另类videos人妖| 亚洲精品免费网站| 久久香蕉国产线看观看av| 成年无码av片在线| 国产精品欧美日韩一区二区| 欧美高清视频在线| 97**国产露脸精品国产| 热久久美女精品天天吊色| 日韩中文字幕亚洲| 日韩欧美一区二区三区| 亚洲人成电影网站色www| 国产精品 欧美在线| 成人激情视频在线观看| 国产精品视频免费在线观看| 久久亚洲国产精品成人av秋霞| 丝袜美腿精品国产二区| 欧美尤物巨大精品爽| 国产亚洲精品激情久久|