国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

ludi的個人空間 http://m.qingdxww.cn/space-uid-138953.html [收藏] [復制] [RSS]

博客

嵌入式Linux內存管理的一些知識點總結

已有 1364 次閱讀2017-11-20 14:31 |個人分類:c語言

感覺這個內存管理的知識點還真的需要專門的去理解一下,今天我們一起來學習學習。要求

1.不涉及linux內核的匯編知識,僅C語言層面解析

1.回答:匯編主要處理的是寄存器地址(包括內容)的計算,進行一部分的地址轉換工作(當然,它是重要的);C語言處理了極大部分的系統(tǒng)內存管理工作。

 

2.虛擬地址、線性地址、物理地址三者映射關系

回答:

1.虛擬地址:程序員(在縮小范圍估計是:應用程序員)直接看到的

2.線性地址:操作系統(tǒng)控制

3.物理地址:CPU內存地址(或者外部內存)

 

3.總結一點:虛擬地址通過段管理機制首先變換成一種中間地址形式--cpu32位的線性地址,然后使用分頁管理機制將此地址映射到物理地址。

 

例子解析:

一個變量定義在一個進程里面,在程序中使用&操作符獲取的地址(估計是偏移地址),將怎么映射呢?(或者它是什么地址,在進程中的位置如何)

 

1. 回答:因為,程序使用的都是虛擬地址,所以程序員拿到的變量地址是虛擬地址(它是經(jīng)過編譯器處理過的,并由系統(tǒng)指映射線性地址,分配物理內存的)。

2. 同時,一個變量的地址(虛擬地址)是不會改變的(只要程序代碼不改變,或者不在編譯),但是,改變運行(不同的時間,相隔一段時間在運行的話),物理地址是會改變的。正是因為操作系統(tǒng)的內存管理作用(線性地址映射到物理地址,是一個動態(tài)的過程)。

 

malloc函數(shù)從調用、分配到返回的過程是?

1. 回答:函數(shù)調用系統(tǒng)函數(shù),系統(tǒng)函數(shù)進入了內核態(tài),引起中斷(或其他,異常處理等工作),操作系統(tǒng)得知需要額外的增長空間以提供使用,所以使用分頁機制來映射到可以使用的物理地址(沒有有用數(shù)據(jù),或不被映射),從而使得虛擬地址有了真實的物理地址映射管理,可以正常使用了。

2. malloc實際上,并不是用戶調用malloc后馬上對物理地址與虛擬地址之間進行映射,只有在用戶對申請的內存空間進行讀寫異常操作才會發(fā)生映射。(具體看《注釋》的13.1.6需求加載機制),總結一句:在實際需要時才加載執(zhí)行文件中頁面的方式。

 

頁表和頁目錄表存放位置(所處的系統(tǒng)空間)是?

1. 回答:系統(tǒng)初始化過程中,主動往物理內存填寫頁表信息。這就是我們操作系統(tǒng)需要做的事情,填寫和修改表的程序代碼的編寫。

 

線性地址轉物理地址是誰來做呢?

1. 回答:設置好頁表信息后,CPU每次訪問內存都通過MMU來查表并轉換出物理地址。是硬件自動操作。

 

所謂的內存(物理內存,或物理地址,或物理空間)是指?

1. 回答:就是內存,RAMrw),而磁盤(或者是其他的硬盤性質的存儲介質)是作為程序或數(shù)據(jù)存儲的空間,它并不參與到與CPU的指令(數(shù)據(jù))傳輸,而是先將它自己的數(shù)據(jù)放到內存(也就是RAM,物理內存里面),再由內存和CPU之間處理。

 

只是作為一個例子,讓我們假定您的程序正在訪問地址為 629 的內存。不過,虛擬內存系統(tǒng)不需要將其存儲在位置為 629 RAM 中。實際上,它甚至可以不在 RAM —— 如果物理 RAM 已經(jīng)滿了,它甚至可能已經(jīng)被轉移到硬盤上!由于這類地址不必反映內存所在的物理位置,所以它們被稱為虛擬內存。操作系統(tǒng)維持著一個虛擬地址到物理地址的轉換的表,以便計算機硬件可以正確地響應地址請求。嵌入式物聯(lián)網(wǎng)等系統(tǒng)學習請加企鵝意義氣嗚嗚吧久零就易,并且,如果地址在硬盤上而不是在 RAM 中,那么操作系統(tǒng)將暫時停止您的進程,將其他內存轉存到硬盤中,從硬盤上加載被請求的內存, 然后再重新啟動您的進程。這樣,每個進程都獲得了自己可以使用的地址空間,可以訪問比您物理上安裝的內存更多的內存。

 

一個進程被創(chuàng)建,linux系統(tǒng)肯定是分配給他一個0的虛擬地址?

回答:對的,每個進程空間的0x00虛擬地址開始的線性區(qū)都會被映射到一個用戶態(tài)沒有權限訪問的頁上,通過這樣的映射,內核可以保證沒有別的頁會映射到這個區(qū)域。

 

如同IBM:內存管理的內幕提及到的,malloc內部的系統(tǒng)調用函數(shù),也就是實現(xiàn)malloc的內部算法

 

1. mallo從內部使用映射函數(shù)(系統(tǒng)調用),brk()mmap():鏈接1

 

為什么進程創(chuàng)建后,子進程會繼承父進程的一部分信息呢?

1. 回答:子進程實際上的父進程的一個拷貝,共同擁有相同的物理頁面,為了節(jié)約空間,子進程以只讀方式共享父進程的物理頁面(同時父進程也把它自己設置為只讀方式),任意一方進行寫操作,就會出現(xiàn)異常(之后就是內核處理異常)。總結一句:這樣可以避免不必要的內存頁面復制的開銷。

 

CPU的內存管理(MMU)和linux系統(tǒng)的內存管理兩者的理解:

 

 

 

上面的一段話,其實是告訴我們:在CPU提供MMU的情況下(也就是分段、分頁機制),首先是分段機制做第一步的虛擬地址到線性地址轉換,然后由操作系統(tǒng)實現(xiàn)(這就是意味著linux系統(tǒng)會有大量的內存管理代碼的實現(xiàn)方法)分頁機制(同時選擇CPU某一引腳來決定是否采用分頁機制),直到進程的虛擬地址映射到可用的物理地址上面。

 

這意味著,從虛擬地址到物理地址的轉換情況如下:

至于虛擬內存的哪個頁面映射到物理內存的哪個頁幀,這是通過頁表(Page Table)來描述的,頁表保存在物理內存中,MMU會查找頁表來確定一個虛擬地址應該映射到什么物理地址。總結一下這個過程:

1. 在操作系統(tǒng)初始化或者分配、釋放內存時,會執(zhí)行一些指令在物理內存中填寫頁表,然后用指令設置MMU,告訴MMU頁表在物理內存中的什么位置。

 

2. 設置好之后, CPU每次執(zhí)行訪問內存的指令都會自動引發(fā)MMU做查表和地址轉換的操作,地址轉換操作完全由硬件完成,不需要用指令控制MMU去做。

 

MMU除了提供地址轉換機制之外,還提供內存保護機制,解析如下:

1. 用戶模式和特權(也就是內核)模式的區(qū)分

2. 設置每個內存頁面的訪問權限(讀、寫、執(zhí)行)

1. 注意:物理內存本身是不限制訪問的,正是MMU的內存保護機制的作用

具體的處理過程如下:

這樣設定好之后,當CPU要訪問一個VA時, MMU會檢查CPU當前處于用戶模式還是特權模式,訪問內存的目的是讀數(shù)據(jù)、寫數(shù)據(jù)還是取指令,如果和操作系統(tǒng)設定的頁面權限相符,就允許訪問,把它轉換成PA,否則不允許訪問,產(chǎn)生一個異常(Exception)。 

 


路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

facelist

您需要登錄后才可以評論 登錄 | 立即注冊

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
返回頂部
主站蜘蛛池模板: 四虎影视在线永久免费观看 | 国产伦精品一区二区三区免费下载 | 精品一区二区三区在线观看 | 99精品国产免费久久国语 | 麻豆久久婷婷综合五月国产 | 久久综合性 | ww欧洲ww在线视频免费观看 | 亚洲视频在线一区二区三区 | 国产精选91热在线观看 | 人人搞人人干 | 污污视频网站免费在线观看 | 午夜看毛片 | 国产在线观看自拍 | www.日本高清视频.com | 久久久久久久国产高清 | 男人天堂网站在线 | 欧美日本二区 | 成人黄色免费在线观看 | 色老头综合免费视频 | 国产aaa毛片 | 91好色视频| 四虎永久精品免费观看 | 四虎8848永久在线 | 国产高清国产专区国产精品 | 内裤奇缘在线 | 国产一级高清免费观看 | 欧美一区=区三区 | 久久国产经典 | 日韩手机在线视频 | 国产成人福利在线视频播放尤物 | 日韩在线观看第一页 | 亚洲免费人成在线视频观看 | 日本免费在线看 | 日韩高清专区 | 色yeye成人免费视频 | 成人羞羞视频在线观看 | 台湾精品视频在线播放 | 亚洲播播播 | 四虎最新影院 | 一色屋精品视频在线观看 | 欧美成人免费高清二区三区 |