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

嵌入式Linux內(nèi)存管理的一些知識(shí)點(diǎn)總結(jié)

發(fā)布時(shí)間:2018-3-23 10:24    發(fā)布者:技術(shù)小白
關(guān)鍵詞: 嵌入式 , linux , 內(nèi)存管理
這個(gè)內(nèi)存管理的知識(shí)點(diǎn)還真的需要我們專門(mén)的去理解一下,今天大家一起來(lái)學(xué)習(xí)學(xué)習(xí)嵌入式Linux內(nèi)存管理的知識(shí)。

1.不涉及l(fā)inux內(nèi)核的匯編知識(shí),僅C語(yǔ)言層面解析
1.回答:匯編主要處理的是寄存器地址(包括內(nèi)容)的計(jì)算,進(jìn)行一部分的地址轉(zhuǎn)換工作(當(dāng)然,它是重要的);C語(yǔ)言處理了極大部分的系統(tǒng)內(nèi)存管理工作。

2.虛擬地址、線性地址、物理地址三者映射關(guān)系
回答:
1.虛擬地址:程序員(在縮小范圍估計(jì)是:應(yīng)用程序員)直接看到的
2.線性地址:操作系統(tǒng)控制
3.物理地址:CPU內(nèi)存地址(或者外部?jī)?nèi)存)
3.總結(jié)一點(diǎn):虛擬地址通過(guò)段管理機(jī)制首先變換成一種中間地址形式--cpu32位的線性地址,然后使用分頁(yè)管理機(jī)制將此地址映射到物理地址。

例子解析:
一個(gè)變量定義在一個(gè)進(jìn)程里面,在程序中使用&操作符獲取的地址(估計(jì)是偏移地址),將怎么映射呢?(或者它是什么地址,在進(jìn)程中的位置如何)
1. 回答:因?yàn)椋绦蚴褂玫亩际翘摂M地址,所以程序員拿到的變量地址是虛擬地址(它是經(jīng)過(guò)編譯器處理過(guò)的,并由系統(tǒng)指映射線性地址,分配物理內(nèi)存的)。
2. 同時(shí),一個(gè)變量的地址(虛擬地址)是不會(huì)改變的(只要程序代碼不改變,或者不在編譯),但是,改變運(yùn)行(不同的時(shí)間,相隔一段時(shí)間在運(yùn)行的話),物理地址是會(huì)改變的。正是因?yàn)椴僮飨到y(tǒng)的內(nèi)存管理作用(線性地址映射到物理地址,是一個(gè)動(dòng)態(tài)的過(guò)程)。

malloc函數(shù)從調(diào)用、分配到返回的過(guò)程是?
1. 回答:函數(shù)調(diào)用系統(tǒng)函數(shù),系統(tǒng)函數(shù)進(jìn)入了內(nèi)核態(tài),引起中斷(或其他,異常處理等工作),操作系統(tǒng)得知需要額外的增長(zhǎng)空間以提供使用,所以使用分頁(yè)機(jī)制來(lái)映射到可以使用的物理地址(沒(méi)有有用數(shù)據(jù),或不被映射),從而使得虛擬地址有了真實(shí)的物理地址映射管理,可以正常使用了。

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

頁(yè)表和頁(yè)目錄表存放位置(所處的系統(tǒng)空間)是?
1. 回答:系統(tǒng)初始化過(guò)程中,主動(dòng)往物理內(nèi)存填寫(xiě)頁(yè)表信息。這就是我們操作系統(tǒng)需要做的事情,填寫(xiě)和修改表的程序代碼的編寫(xiě)。
線性地址轉(zhuǎn)物理地址是誰(shuí)來(lái)做呢?
1. 回答:設(shè)置好頁(yè)表信息后,CPU每次訪問(wèn)內(nèi)存都通過(guò)MMU來(lái)查表并轉(zhuǎn)換出物理地址。是硬件自動(dòng)操作。

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

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

一個(gè)進(jìn)程被創(chuàng)建,linux系統(tǒng)肯定是分配給他一個(gè)0的虛擬地址?
回答:對(duì)的,每個(gè)進(jìn)程空間的0x00虛擬地址開(kāi)始的線性區(qū)都會(huì)被映射到一個(gè)用戶態(tài)沒(méi)有權(quán)限訪問(wèn)的頁(yè)上,通過(guò)這樣的映射,內(nèi)核可以保證沒(méi)有別的頁(yè)會(huì)映射到這個(gè)區(qū)域。
如同IBM:內(nèi)存管理的內(nèi)幕提及到的,malloc內(nèi)部的系統(tǒng)調(diào)用函數(shù),也就是實(shí)現(xiàn)malloc的內(nèi)部算法
1. 在mallo從內(nèi)部使用映射函數(shù)(系統(tǒng)調(diào)用),brk()和mmap():鏈接1

為什么進(jìn)程創(chuàng)建后,子進(jìn)程會(huì)繼承父進(jìn)程的一部分信息呢?
1. 回答:子進(jìn)程實(shí)際上的父進(jìn)程的一個(gè)拷貝,共同擁有相同的物理頁(yè)面,為了節(jié)約空間,子進(jìn)程以只讀方式共享父進(jìn)程的物理頁(yè)面(同時(shí)父進(jìn)程也把它自己設(shè)置為只讀方式),任意一方進(jìn)行寫(xiě)操作,就會(huì)出現(xiàn)異常(之后就是內(nèi)核處理異常)。總結(jié)一句:這樣可以避免不必要的內(nèi)存頁(yè)面復(fù)制的開(kāi)銷。

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

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

至于虛擬內(nèi)存的哪個(gè)頁(yè)面映射到物理內(nèi)存的哪個(gè)頁(yè)幀,這是通過(guò)頁(yè)表(Page Table)來(lái)描述的,頁(yè)表保存在物理內(nèi)存中,MMU會(huì)查找頁(yè)表來(lái)確定一個(gè)虛擬地址應(yīng)該映射到什么物理地址。總結(jié)一下這個(gè)過(guò)程:
1. 在操作系統(tǒng)初始化或者分配、釋放內(nèi)存時(shí),會(huì)執(zhí)行一些指令在物理內(nèi)存中填寫(xiě)頁(yè)表,然后用指令設(shè)置MMU,告訴MMU頁(yè)表在物理內(nèi)存中的什么位置。
2. 設(shè)置好之后, CPU每次執(zhí)行訪問(wèn)內(nèi)存的指令都會(huì)自動(dòng)引發(fā)MMU做查表和地址轉(zhuǎn)換的操作,地址轉(zhuǎn)換操作完全由硬件完成,不需要用指令控制MMU去做。

MMU除了提供地址轉(zhuǎn)換機(jī)制之外,還提供內(nèi)存保護(hù)機(jī)制,解析如下:
1. 用戶模式和特權(quán)(也就是內(nèi)核)模式的區(qū)分
2. 設(shè)置每個(gè)內(nèi)存頁(yè)面的訪問(wèn)權(quán)限(讀、寫(xiě)、執(zhí)行)
1. 注意:物理內(nèi)存本身是不限制訪問(wèn)的,正是MMU的內(nèi)存保護(hù)機(jī)制的作用

具體的處理過(guò)程如下:
這樣設(shè)定好之后,當(dāng)CPU要訪問(wèn)一個(gè)VA時(shí), MMU會(huì)檢查CPU當(dāng)前處于用戶模式還是特權(quán)模式,訪問(wèn)內(nèi)存的目的是讀數(shù)據(jù)、寫(xiě)數(shù)據(jù)還是取指令,如果和操作系統(tǒng)設(shè)定的頁(yè)面權(quán)限相符,就允許訪問(wèn),把它轉(zhuǎn)換成PA,否則不允許訪問(wèn),產(chǎn)生一個(gè)異常(Exception)。
宋工企鵝號(hào):35--24-65--90-88   Tel/WX:173--17--95--19--08
以下課程可免費(fèi)試聽(tīng)C語(yǔ)言、電子PCBSTM32、Linux、FPGA、JAVA、安卓等。
想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽(tīng)課了


本文地址:http://www.qingdxww.cn/thread-523855-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來(lái)節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久99青青久久99久久 | 午夜网站在线播放 | 亚洲不卡在线观看 | 男同在线免费观看 | 精品一区二区三区的国产在线观看 | 久久成人福利视频 | 四虎在线网址 | 一级片网站在线观看 | 妻子的诱惑在线免费观看正片 | xxxxb | 毛片无码国产 | 青青草国产精品欧美成人 | 成人在线视频免费看 | 亚洲欧美综合视频 | 另类视频在线 | 国内自拍偷拍网 | 免费香蕉成视频成人网 | 91视频日韩| 台湾最新电视剧 | 天天艹天天艹 | 91免费资源网站入口 | 天美麻豆精东果冻天美传媒 | 欧美a免费 | a级黄色毛片三个搞一 | 免费在线观看亚洲 | 亚洲欧美日韩精品高清 | 欧美日本免费 | 日韩美女在线视频 | 日本中文字幕在线播放 | 中文字幕一区2区3区 | 在线观看国产精品入口 | 最好免费观看韩国+日本 | 日韩黄色中文字幕 | 涩涩久久| 免费jjzz在在线播放国产成人 | 五月天婷婷免费观看视频在线 | 狠狠狠狠操 | 网色| 欧美日韩一区二区三区在线观看 | 日韩国产欧美在线观看一区二区 | 国产午夜免费不卡精品理论片 |