




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
嵌入式操作系統(tǒng)陳香蘭
xlanchen@/~xlanchenSpring2007中國科學(xué)技術(shù)大學(xué)計(jì)算機(jī)系xlanchen@2007.6.251EmbeddedOperatingSystems上周一中斷/異常上周二系統(tǒng)調(diào)用時(shí)鐘內(nèi)存管理xlanchen@2007.6.252EmbeddedOperatingSystems本次課進(jìn)程地址空間Linux中的信號用戶態(tài)進(jìn)程之間的通信xlanchen@2007.6.253EmbeddedOperatingSystems進(jìn)程地址空間xlanchen@2007.6.25xlanchen@2007.6.254EmbeddedOperatingSystems內(nèi)核態(tài)和用戶態(tài)分配內(nèi)存的不同內(nèi)核中的函數(shù)以直接了當(dāng)?shù)姆绞将@得動態(tài)內(nèi)存內(nèi)核是操作系統(tǒng)中優(yōu)先級最高的成分。內(nèi)核信任自己采用我們上次課介紹的頁面級內(nèi)存分配和小內(nèi)存分配給用戶態(tài)進(jìn)程分配內(nèi)存時(shí)請求被認(rèn)為是不緊迫的用戶進(jìn)程不可信任xlanchen@2007.6.255EmbeddedOperatingSystems內(nèi)核態(tài)和用戶態(tài)分配內(nèi)存的不同因此,當(dāng)用戶態(tài)進(jìn)程請求動態(tài)內(nèi)存時(shí),并沒有立即獲得實(shí)際的物理頁框,而僅僅獲得對一個(gè)新的線性地址區(qū)間的使用權(quán)這個(gè)線性地址區(qū)間會成為進(jìn)程地址空間的一部分,稱作線性區(qū)(memoryareas)xlanchen@2007.6.256EmbeddedOperatingSystems進(jìn)程地址空間進(jìn)程最多能訪問4GB的線性地址空間但進(jìn)程在訪問某個(gè)線性空間之前,必須獲得該線性空間的許可因此,一個(gè)進(jìn)程的地址空間是由允許該進(jìn)程訪問的全部線性地址組成內(nèi)核使用線性區(qū)資源來表示線性地址空間每個(gè)線性區(qū)由起始線性地址、長度和一些存取權(quán)限描述xlanchen@2007.6.257EmbeddedOperatingSystems與進(jìn)程地址空間相關(guān)的描述符xlanchen@2007.6.258EmbeddedOperatingSystems線性區(qū)的開始和結(jié)束都必須4KB對齊進(jìn)程獲得新線性區(qū)的一些典型情況:剛剛創(chuàng)建的新進(jìn)程使用exec系統(tǒng)調(diào)用裝載一個(gè)新的程序運(yùn)行將一個(gè)文件(或部分)映射到進(jìn)程地址空間中當(dāng)用戶堆棧不夠用的時(shí)候,擴(kuò)展堆棧對應(yīng)的線性區(qū)……xlanchen@2007.6.259EmbeddedOperatingSystems線性區(qū)(memoryarea)比如0x08048000——0x0804C000這段線性地址空間被分配給了一個(gè)進(jìn)程,進(jìn)程就可以訪問這段地址空間進(jìn)程只能訪問某個(gè)有效的memoryarea。進(jìn)一步講,這個(gè)area可以被標(biāo)志為只讀或者不可執(zhí)行(nonexecutable)如果進(jìn)程試圖訪問一個(gè)有效的area之外的地址或者用不正確的方式訪問一個(gè)有效的area,內(nèi)核將通過段異常(segmentationfault)殺死這個(gè)進(jìn)程xlanchen@2007.6.2510EmbeddedOperatingSystems線性區(qū)中可以包含各種內(nèi)容可執(zhí)行文件代碼段的內(nèi)存映射,就是.textsection數(shù)據(jù)段的內(nèi)存映射,.datasectionzeropage的內(nèi)存映射用來包含未初始化的全局變量,.bsssection為庫函數(shù)和鏈接器附加的代碼、數(shù)據(jù)、bss段文件的內(nèi)存映射共享內(nèi)存的映射匿名內(nèi)存區(qū)域的映射,比如通過malloc()函數(shù)申請的內(nèi)存區(qū)域xlanchen@2007.6.2511EmbeddedOperatingSystems進(jìn)程地址空間中所有有效的線性地址都確定的存在于一個(gè)area中memoryareas不重疊進(jìn)程中每個(gè)單獨(dú)的area對應(yīng)一個(gè)不同內(nèi)存區(qū):堆棧、二進(jìn)制代碼、全局變量、文件映射等等task_struct中的內(nèi)存描述符xlanchen@2007.6.2512EmbeddedOperatingSystems內(nèi)核使用內(nèi)存描述符來描述進(jìn)程的整個(gè)地址空間(即進(jìn)程的全部線性區(qū))xlanchen@2007.6.2513EmbeddedOperatingSystems內(nèi)存描述符內(nèi)存描述符包含了跟進(jìn)程地址空間相關(guān)的所有信息mm_users表示共享這個(gè)地址空間的進(jìn)程數(shù)目比如兩個(gè)輕量級進(jìn)程共享了這個(gè)area,mm_users就等于2mmap和mm_rb是兩個(gè)不同的數(shù)據(jù)結(jié)構(gòu),但是包含了相同的東西:進(jìn)程地址空間中所有的memoryareas前者使用鏈表存儲areas后者用紅黑樹存儲areas所有的mm_struct結(jié)構(gòu)通過mmlist域鏈接在一個(gè)雙向鏈表上。這個(gè)鏈表的第一個(gè)元素是idle進(jìn)程的mm_struct結(jié)構(gòu)xlanchen@2007.6.2514EmbeddedOperatingSystems分配一個(gè)內(nèi)存描述符copy_mm函數(shù)用來在fork()調(diào)用中從父進(jìn)程拷貝內(nèi)存描述符而mm_struct數(shù)據(jù)結(jié)構(gòu)本身的空間是從mm_cachep指向的slab緩存中通過allocate_mm()宏分配得到的如果父進(jìn)程在fork()創(chuàng)建子進(jìn)程時(shí),通過一些標(biāo)志指明要和子進(jìn)程共享地址空間。那么,只需要childtask->mm=parent->mmxlanchen@2007.6.2515EmbeddedOperatingSystems釋放一個(gè)內(nèi)存描述符在進(jìn)程退出時(shí),exit_mm()函數(shù)被調(diào)用首先做一些清除工作,更新一些內(nèi)核全局統(tǒng)計(jì)數(shù)據(jù)接著調(diào)用mmput(),這個(gè)函數(shù)減內(nèi)存描述符的mm_users域如果mm_users域變成了0,就調(diào)用mmdrop()函數(shù)來減mm_count域如果mm_count域變成了0,就由free_mm()宏調(diào)用kmem_cache_free()函數(shù)把mm_struct返還給mm_cachp指向slab緩存xlanchen@2007.6.2516EmbeddedOperatingSystems線性區(qū)(memoryareas)每個(gè)線性區(qū)由一個(gè)vm_area_struct結(jié)構(gòu)來表示這個(gè)結(jié)構(gòu)描述了一段給定的內(nèi)存區(qū)間區(qū)間中的地址都有同樣的屬性,比如同樣的存取權(quán)限和相關(guān)的操作函數(shù)用這個(gè)結(jié)構(gòu)可以表示各種線性區(qū),比如映射可執(zhí)行的二進(jìn)制代碼的線形區(qū)、用作用戶態(tài)堆棧的線形區(qū)等等xlanchen@2007.6.2517EmbeddedOperatingSystemsxlanchen@2007.6.2518EmbeddedOperatingSystems線性區(qū)的存取權(quán)限vm_flags域描述有關(guān)這個(gè)線性區(qū)全部頁的信息。例如,進(jìn)程訪問每個(gè)頁的權(quán)限是什么。還有一些標(biāo)志描述線性區(qū)自身,例如它應(yīng)該如何增長VM_READ,VM_WRITE,VM_EXECVM_SHAREDVM_RESERVEDVM_GROWSUPxlanchen@2007.6.2519EmbeddedOperatingSystems線性區(qū)的鏈表和紅黑樹通過內(nèi)存描述符中的兩個(gè)域mmap和mm_rb都可以訪問線性區(qū)。事實(shí)上,它們都指向了同一個(gè)vm_area_struct結(jié)構(gòu),只是鏈接的方式不同mmap指向的線性區(qū)鏈表用來遍歷整個(gè)進(jìn)程的地址空間紅黑樹用來定位一個(gè)給定的線性地址落在進(jìn)程地址空間中的哪一個(gè)線性區(qū)中xlanchen@2007.6.2520EmbeddedOperatingSystems處理線性區(qū)內(nèi)核進(jìn)程需要對一個(gè)線性區(qū)進(jìn)行處理,比如確定一個(gè)給定線性地址是否存在于一個(gè)線性地址空間中find_vma(),查找一個(gè)線性地址兩個(gè)參數(shù):進(jìn)程內(nèi)存描述符的地址mm和線性地址addrxlanchen@2007.6.2521EmbeddedOperatingSystems創(chuàng)建一個(gè)線性區(qū)間mmap()和do_mmap(),創(chuàng)建一個(gè)線性區(qū)根據(jù)file參數(shù)映射指定的文件中偏移量為offset,長度為len的一段內(nèi)容addr參數(shù)指明從何處開始查找一段可用的空閑線性地址區(qū)間Prot參數(shù)指定這個(gè)區(qū)間所包含的頁的存取權(quán)限flags參數(shù)指定這個(gè)創(chuàng)建的線性區(qū)本身的一些標(biāo)志staticinlineunsignedlongdo_mmap(structfile*file, unsignedlongaddr, unsignedlonglen, unsignedlongprot, unsignedlongflag, unsignedlongoffset)
xlanchen@2007.6.2522EmbeddedOperatingSystems刪除一個(gè)線性區(qū)間munmap()和do_munmap()do_munmap()函數(shù)從進(jìn)程地址空間中刪除一段線性空間mm參數(shù)指向了當(dāng)前進(jìn)程的內(nèi)存描述符addr參數(shù)為線性區(qū)的起始地址len參數(shù)指明要刪除的區(qū)間大小int
do_munmap
(struct
mm_struct*mm,unsignedlongaddr, size_t
len) xlanchen@2007.6.2523EmbeddedOperatingSystems缺頁異常(i386中14號異常)如前所述,內(nèi)核只是通過mmap()等調(diào)用分配了一些線性地址空間給進(jìn)程,并沒有真正的把實(shí)際的物理頁框分配給進(jìn)程當(dāng)進(jìn)程試圖訪問這些分配給它的地址空間時(shí),比如一段線性地址空間映射的是二進(jìn)制代碼,則進(jìn)程被調(diào)度執(zhí)行的時(shí)候會跳轉(zhuǎn)到這個(gè)地址上去執(zhí)行。此時(shí),并沒有物理頁框?qū)?yīng)于這些線性
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45639-2025交換標(biāo)頭封裝包技術(shù)規(guī)范
- 材料力學(xué)與智能材料性能研究拓展重點(diǎn)基礎(chǔ)知識點(diǎn)
- 行政法學(xué)精英訓(xùn)練試題及答案
- 行政法學(xué)復(fù)習(xí)資料的使用與反饋:試題及答案
- 時(shí)空組學(xué) 數(shù)據(jù)集格式規(guī)范 征求意見稿
- 行政管理應(yīng)用能力試題與答案
- 火災(zāi)人亡后續(xù)應(yīng)急預(yù)案(3篇)
- 小學(xué)生遇到火災(zāi)應(yīng)急預(yù)案(3篇)
- 法學(xué)概論考試的內(nèi)容適應(yīng)性研究試題及答案
- 2025年網(wǎng)絡(luò)管理員考試心得及試題與答案
- 道德與法治教育資源整合與利用方案
- 《WEBGIS編程入門教程》課件
- 2024年合肥濱湖投資控股集團(tuán)有限公司招聘真題
- 醫(yī)?;鸸芾韺m?xiàng)整治部署
- 2024年濟(jì)南市工程咨詢院招聘考試真題
- 小兒推拿培訓(xùn)合同協(xié)議
- 防塵防潮倉庫管理制度
- 酒店房價(jià)體系管理制度
- 2025至2030年中國內(nèi)脫模劑數(shù)據(jù)監(jiān)測研究報(bào)告
- 金屬壁板隔墻施工方案
- 銷售商品收入
評論
0/150
提交評論