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

首頁 > 學院 > 開發設計 > 正文

Memory Management (內存管理)

2019-11-17 05:40:00
字體:
來源:轉載
供稿:網友

  內存治理子系統是操作系統的重要部分。從計算機發展早期開始,就存在對于大于系統中物理能力的內存需要。為了克服這種限制,開發了許多種策略,其中最成功的就是虛擬內存。虛擬內存通過在競爭進程之間共享內存的方式使系統顯得擁有比實際更多的內存。

虛擬內存不僅僅讓你的計算機內存顯得更多,內存治理子系統還提供:


Large Address Spaces(巨大的地址空間)操作系統使系統顯得擁有比實際更大量的內存。虛擬內存可以比系統中的物理內存大許多倍。

PRotection(保護)系統中的每一個進程都有自己的虛擬地址空間。這些虛擬的地址空間是相互完全分離的,所以運行一個應用程序的進程不會影響另外的進程。另外,硬件的虛擬內存機制答應對內存區寫保護。這可以防止代碼和數據被惡意的程序覆蓋。

Memory Mapping(內存映射)內存映射用來將映像和數據映射到進程的地址空間。用內存映射,文件的內容被直接連結到進程的虛擬地址空間。

Fair Physics Memory Allocation(公平分配物理內存)內存治理子系統答應系統中每一個運行中的進程公平地共享系統的物理內存

Shared Virtual Memory(共享虛擬內存)雖然虛擬內存答應進程擁有分離(虛擬)的地址空間,有時你也需要進程之間共享內存。例如,系統中可能有多個進程運行命令解釋程序bash。雖然可以在每一個進程的虛擬地址空間都擁有一份bash的拷貝,更好的是在物理內存中只擁有一份拷貝,所有運行bash的進程共享代碼。動態連接庫是多個進程共享執行代碼的另一個常見例子。共享內存也可以用于進程間通訊(ipC)機制,兩個或多個進程可以通過共同擁有的內存交換信息。linux系統支持系統V的共享內存IPC機制。 

3.1 An Abstract Model of Virtual Memory(虛擬內存的抽象模型)

 
在考慮Linux支持虛擬內存的方法之前,最好先考慮一個抽象的模型,以免被太多的細節搞亂。
 

在進程執行程序的時候,它從內存中讀取指令并進行解碼。解碼指令也許需要讀取或者存儲內存特定位置的內容,然后進程執行指令并轉移到程序中的下一條指令。進程不管是讀取指令還是存取數據都要訪問內存?!?

在一個虛擬內存系統中,所有的地址都是虛擬地址而非物理地址。處理器通過操作系統保存的一組信息將虛擬地址轉換為物理地址。 

為了讓這種轉換更簡單,將虛擬內存和物理內存分為適當大小的塊,叫做頁(page)。頁的大小一樣。(當然可以不一樣,但是這樣一來系統治理起來比較困難)。Linux在Alpha AXP系統上使用8K字節的頁,而在Intel x86系統上使用4K字節的頁。每一頁都賦予一個唯一編號:page frame number(PFN 頁編號)。在這種分頁模型下,虛擬地址由兩部分組成:虛擬頁號和頁內偏移量。假如頁大小是4K,則虛擬地址的位11到0包括頁內偏移量,位12和以上的位是頁編號。每一次處理器碰到虛擬地址,它必須提取出偏移和虛擬頁編號。處理器必須將虛擬頁編號轉換到物理的頁,并訪問物理頁的正確偏移處。為此,處理器使用了頁表(page tables)。

有效標志 表示頁表本條目是否有效

本頁表條目描述的物理頁編號

訪問控制信息 描述本頁如何使用:是否可以寫?是否包括執行代碼?

 

頁表通過虛擬頁標號作為偏移來訪問。虛擬頁編號5是表中的第6個元素(0是第一個元素)

要將虛擬地址轉換到物理地址,處理器首先找出虛擬地址的頁編號和頁內偏移量。使用2的冪次的頁尺寸,可以用掩碼或移位簡單地處理?!?

處理器使用虛擬頁編號作為索引在進程的頁表中找到它的頁表的條目。假如該條目有效,處理器從該條目取出物理的頁編號。假如本條目無效,就是進程訪問了它的虛擬內存中不存在的區域。在這種情況下,處理器無法解釋地址,必須將控制權傳遞給操作系統來處理。

處理器具體如何通知操作系統進程在訪問無法轉換的無效的虛擬地址,這個方式是和處理器相關的。處理器將這種信息(page fault)進行傳遞,操作系統得到通知,虛擬地址出錯,以及出錯的原因。

 

假設這是一個有效的頁表條目,處理器取出物理頁號并乘以頁大小,得到了物理內存中本頁的基礎地址。最后,處理器加上它需要的指令或數據的偏移量。


通過這種方式將虛擬地址映射到物理地址,虛擬內存可以用任意順序映射到系統的物理內存中。 

3.1.1 Demand Paging 

因為物理內存比虛擬內存少得多,操作系統必須避免無效率地使用物理內存。節省物理內存的一種方法是只加載執行程序正在使用的虛擬頁。例如:一個數據庫程序可能正在數據庫上運行一個查詢。在這種情況下,并非所有的數據必須放到內存中,而只需要正被檢查的數據記錄。假如這是個查找型的查詢,那么加載程序中增加記錄的代碼就沒什么意義。這種進行訪問時才加載虛擬頁的技術叫做demand paging?!?


當一個進程試圖訪問當前不在內存中的虛擬地址的時候處理器無法找到引用的虛擬頁對應的頁表條目。例如:圖3.1中進程X的頁表中沒有虛擬頁2 的條目,所以假如進程X試圖從虛擬頁2中的地址讀取時,處理器無法將地址轉換為物理地址。這時處理器通知操作系統發生page fault?!?

假如出錯的虛擬地址無效意味著進程試圖訪問它不應該訪問的虛擬地址。也許是程序出錯,例如向內存中任意地址寫。這種情況下,操作系統會中斷它,從而保護系統中其他的進程。

假如出錯的虛擬地址有效但是它所在的頁當前不在內存中,操作系統必須從磁盤映像中將相應的頁加載到內存中。相對來講磁盤存取需要較長時間,所以進程必須等待直到該頁被取到內存中。假如當前有其他系統可以運行,操作系統將選擇其中一個運行。取到的頁被寫到一個空閑的頁面,并將一個有效的虛擬頁條目加到進程的頁表中。然后這個進程重新運行發生內存錯誤的地方的機器指令。這一次虛擬內存存取進行時,處理器能夠將虛擬地址轉換到物理地址,所以進程得以繼續運行?!?

Linux使用demand paging技術將可執行映像加載到進程的虛擬內存中。當一個命令執行時,包含它的文件被打開,它的內容被映射到進程的虛擬內存中。這個過程是通過修改描述進程內存映射的數據結構來實現,也叫做內存映射(memory mapping)。但是,實際上只有映像的第一部分真正放在了物理內存中。映像的其余部分仍然在磁盤上。當映像執行時,它產生page fault,Linux使用進程的內存映像表來確定映像的那一部分需要加載到內存中執行。 

3.1.2 Swapping(交換) 

假如進程需要將虛擬頁放到物理內存中而此時已經沒有空閑的物理頁,操作系統必須廢棄物理空間中的另一頁,為該頁讓出空間?!?

假如物理內存中需要廢棄的頁來自磁盤上的映像或者數據文件,而且沒有被寫過所以不需要存儲,則該頁被廢棄。假如進程又需要該頁,它可以從映像或數據文件中再次加載到內存中。

但是,假如該頁已經被改變,操作系統必須保留它的內容以便以后進行訪問。這種也叫做dirty page,當它從物理內存中廢棄時,被存到一種叫做交換文件的非凡文件中。因為訪問交換文件的速度和訪問處理器以及物理內存的速度相比很慢,操作系統必須判定是將數據頁寫到磁盤上還是將它們保留在內存中以便下次訪問?!?

假如決定哪些頁需要廢棄或者交換的算法效率不高,則會發生顛簸(thrashing)。這時,頁不斷地被寫到磁盤上,又被讀回,操作系統過于繁忙而無法執行實際的工作。例如在圖3.1中,假如物理頁號1經常被訪問,那么就不要將它交換到硬盤上。進程正在使用的也叫做工作集(working set)。有效的交換方案應該保證所有進程的工作集都在物理內存中?!?

Linux使用LRU(Least Recently Used最近最少使用)的頁面技術來公平地選擇需要從系統中廢棄的頁面。這種方案將系統中的每一頁都賦予一個年齡,這個年齡在頁面存取時改變。頁面訪問越多,年紀越輕,越少訪問,年紀越老越陳舊。陳舊的頁面是交換的好候選?!?

3.1.3 Shared Vitual Memory(共享虛擬內存) 

虛擬內存使多個進程可以方便地共享內存。所有的內存訪問都是通過頁表,每一個進程都有自己的頁表。對于兩個共享一個物理內存頁的進程,這個物理頁編號必須出現在兩個進程的頁表中。


3.1.4 Physical and Vitual Addressing Modes(物理和虛擬尋址模式) 

對于操作系統本身而言,運行在虛擬內存中沒有什么意義。假如操作系統必須維護自身的頁表,這將會是一場噩夢。大多數多用途的處理器同時支持物理地址模式和虛擬地址模式。物理尋址模式不需要頁表,處理器在這種模式下不需要進行任何地址轉換。Linux核心運行在物理地址模式。 

Alpha AXP處理器沒有非凡的物理尋址模式。它將內存空間分為幾個區,將其中兩個指定為物理映射地址區。核心的地址空間叫做KSEG地址空間,包括從0xfffffc0000000000向上的所有地址。為了執行連接在KSEG的代碼(核心代碼)或者訪問那里的數據,代碼必須在核心態執行。Alpha 上的Linux核心連接到從地址0xfffffc0000310000執行。


3.1.5 access Control(訪問控制) 

頁表條目也包括訪問控制信息。當處理器使用頁表條目將進程的虛擬地址映射到物理地址的時候,它很輕易利用訪問控制信息控制進程不要用不答應的方式進行訪問。 

有很多原因你希望限制對于內存區域的訪問。一些內存,比如包含執行

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩国产高清视频在线| 精品国产乱码久久久久久天美| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲天堂久久av| 国产精品直播网红| 欧美日韩精品在线| 狠狠色狠色综合曰曰| 日本91av在线播放| 亚洲美腿欧美激情另类| 国产精品高潮呻吟久久av野狼| 亲子乱一区二区三区电影| 久久不射电影网| 国产亚洲精品美女久久久久| 国产亚洲精品久久久久久777| 亚洲第一精品夜夜躁人人爽| 午夜精品蜜臀一区二区三区免费| 久久精品国产一区二区三区| 亚洲香蕉成人av网站在线观看| 中文字幕在线视频日韩| 91高潮在线观看| 亚洲福利在线视频| 91丨九色丨国产在线| 高清欧美性猛交xxxx| 日韩欧美一区二区三区久久| 欧美激情成人在线视频| 欧美性videos高清精品| 亚洲欧美999| 欧美精品一二区| 国产不卡av在线免费观看| 欧美老少配视频| 欧美高清视频一区二区| 国语自产精品视频在线看| 日韩免费在线免费观看| 国产亚洲精品久久久久久777| 亚洲级视频在线观看免费1级| 福利微拍一区二区| 91老司机在线| 91麻豆国产语对白在线观看| 亚洲热线99精品视频| xvideos亚洲| 久久露脸国产精品| 国产精品视频专区| 91免费在线视频| 日韩www在线| 懂色av中文一区二区三区天美| 亚洲码在线观看| 久久久精品亚洲| 国产精品视频在线观看| 国产成人精品免高潮在线观看| 久久综合免费视频影院| 日本欧美一级片| 国产ts人妖一区二区三区| 欧美大胆在线视频| 精品国内产的精品视频在线观看| 久久国产精品网站| 中文字幕在线观看日韩| 日韩在线视频线视频免费网站| 欧美午夜视频一区二区| 欧美精品在线极品| 国产精品美女免费看| 亚洲精品久久久一区二区三区| 国产精品高潮呻吟视频| 亚洲韩国欧洲国产日产av| 欧美激情第三页| 亚洲天堂2020| 亚洲精品98久久久久久中文字幕| 欧美高清无遮挡| 九九视频直播综合网| 精品久久中文字幕| 欧美一级电影免费在线观看| 国产精品免费在线免费| 久久久久久久久久久亚洲| 国产欧美最新羞羞视频在线观看| 中文综合在线观看| 亚洲国产小视频在线观看| 久久91亚洲人成电影网站| 在线视频欧美性高潮| 综合网日日天干夜夜久久| 18久久久久久| 亚洲天堂免费在线| 国产精品私拍pans大尺度在线| 日韩在线免费视频| 成人免费高清完整版在线观看| 亚洲а∨天堂久久精品喷水| 亚洲2020天天堂在线观看| 久久久久久久久久久成人| 欧美成人精品三级在线观看| 亚洲欧美另类在线观看| 97不卡在线视频| 国内精品视频一区| 亚洲视频777| 亚洲国产婷婷香蕉久久久久久| 国产欧美日韩亚洲精品| 2019最新中文字幕| 精品自在线视频| 日韩人在线观看| 久久精品久久精品亚洲人| 亚洲免费电影一区| 欧美激情二区三区| 国产成人a亚洲精品| 亚洲成人xxx| 精品亚洲一区二区三区| 色婷婷久久一区二区| 国产女人18毛片水18精品| 欧美主播福利视频| 亚洲欧美另类在线观看| 亚洲精品成a人在线观看| 欧美劲爆第一页| 亚洲欧美日本精品| 国产一区二区三区视频在线观看| 91国语精品自产拍在线观看性色| 操人视频在线观看欧美| 亚洲精品国产suv| 欧美国产亚洲精品久久久8v| 精品中文字幕在线2019| 日韩免费在线电影| 欧美不卡视频一区发布| 久久影视免费观看| 欧美理论片在线观看| 97视频在线观看视频免费视频| 欧美日韩国产va另类| 日韩中文在线观看| 综合激情国产一区| 欧美日韩国产专区| 亚洲精品黄网在线观看| 久久精品这里热有精品| 永久免费看mv网站入口亚洲| 欧美小视频在线| 国产成人欧美在线观看| 人人澡人人澡人人看欧美| 久久久久久综合网天天| 久久免费少妇高潮久久精品99| 国产精品免费久久久久久| 国产精品99久久久久久白浆小说| 久久久久久69| 日韩电影中文字幕在线观看| 狠狠综合久久av一区二区小说| 成人免费视频xnxx.com| 性欧美办公室18xxxxhd| 欧美孕妇性xx| 欧美另类暴力丝袜| 日韩欧美精品网址| 亚洲国产成人精品久久久国产成人一区| 国产成人av在线| 日韩电影大片中文字幕| 久久久久久九九九| 91精品国产综合久久香蕉的用户体验| 国产欧洲精品视频| 亚洲电影免费观看高清完整版| 国产精品福利小视频| 伊人久久久久久久久久久久久| 久久婷婷国产麻豆91天堂| 亚洲国产中文字幕在线观看| 日韩欧亚中文在线| 国产精品视频专区| 国产精品人成电影| 九九热视频这里只有精品| 亚洲视频在线播放| 亚洲图片欧美日产| 欧美日韩国产中文精品字幕自在自线| 在线看国产精品| 蜜臀久久99精品久久久无需会员| 日韩成人在线电影网| 日韩精品在线观看一区二区|