linux存儲(chǔ)器管理

linux存儲(chǔ)器管理

ID:40559906

大?。?16.00 KB

頁數(shù):36頁

時(shí)間:2019-08-04

linux存儲(chǔ)器管理_第1頁
linux存儲(chǔ)器管理_第2頁
linux存儲(chǔ)器管理_第3頁
linux存儲(chǔ)器管理_第4頁
linux存儲(chǔ)器管理_第5頁
資源描述:

《linux存儲(chǔ)器管理》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫

1、Linux存儲(chǔ)器管理一、linux存儲(chǔ)器管理概述Linux的設(shè)計(jì)目標(biāo)是支持絕大多數(shù)主流的CPU,而很多CPU使用的是RISC體系結(jié)構(gòu),并沒有分段機(jī)制(采用虛擬分頁存儲(chǔ)管理方法),所以2.6版內(nèi)核只有在80x86結(jié)構(gòu)下才使用分段,而且只是象征性地使用了一下:所有Linux進(jìn)程僅僅使用四種段來對(duì)指令和數(shù)據(jù)尋址。運(yùn)行在用戶態(tài)的進(jìn)程使用所謂的用戶代碼段和用戶數(shù)據(jù)段。類似地,運(yùn)行在內(nèi)核態(tài)的所有Linux進(jìn)程都使用一對(duì)相同的段對(duì)指令和數(shù)據(jù)尋址:它們分別叫做內(nèi)核代碼段和內(nèi)核數(shù)據(jù)段。下表顯示了這四個(gè)重要段的段描述符字段的值:段BaseLimitDPL用戶代碼段0x000000000xf

2、ffff3用戶數(shù)據(jù)段0x000000000xfffff3內(nèi)核代碼段0x000000000xfffff0內(nèi)核數(shù)據(jù)段0x000000000xfffff0相應(yīng)的段描述符由宏__USER_CS,__USER_DS,__KERNEL_CS,和__KERNEL_DS分別定義。例如,為了對(duì)內(nèi)核代碼段尋址,內(nèi)核只需要把__KERNEL_CS宏產(chǎn)生的值裝進(jìn)cs段寄存器即可。注意,與段相關(guān)的線性地址(段內(nèi)地址)從0開始,達(dá)到232-1的尋址限長。這就意味著在用戶態(tài)或內(nèi)核態(tài)下的所有進(jìn)程可以使用相同的邏輯地址。所有段基址都是0x00000000,這可以得出另一個(gè)重要結(jié)論,那就是在Linux下邏

3、輯地址與線性地址是一致的,即邏輯地址的偏移量字段的值與相應(yīng)的線性地址的值總是一致的。如前所述,CPU的當(dāng)前特權(quán)級(jí)(CPL)反映了進(jìn)程是在用戶態(tài)還是內(nèi)核態(tài),并由存放在cs寄存器中的段選擇符的RPL字段指定。只要當(dāng)前特權(quán)級(jí)被改變,一些段寄存器必須相應(yīng)地更新。例如,當(dāng)CPL=3時(shí)(用戶態(tài)),ds寄存器必須含有用戶數(shù)據(jù)段的段選擇符,而當(dāng)CPL=0時(shí),ds寄存器必須含有內(nèi)核數(shù)據(jù)段的段選擇符。類似的情況也出現(xiàn)在ss寄存器中。當(dāng)CPL為3時(shí),它必須指向一個(gè)用戶數(shù)據(jù)段中的用戶棧,而當(dāng)CPL為0時(shí),它必須指向內(nèi)核數(shù)據(jù)段中的一個(gè)內(nèi)核棧。當(dāng)從用戶態(tài)切換到內(nèi)核態(tài)時(shí),Linux總是確保ss寄存器

4、裝有內(nèi)核數(shù)據(jù)段的段選擇符。當(dāng)對(duì)指向指令或者數(shù)據(jù)結(jié)構(gòu)的指針進(jìn)行保存時(shí),內(nèi)核根本不需要為其設(shè)置邏輯地址的段選擇符,因?yàn)閏s寄存器就含有當(dāng)前的段選擇符。例如,當(dāng)內(nèi)核調(diào)用一個(gè)函數(shù)時(shí),它執(zhí)行一條call匯編語言指令,該指令僅指定它邏輯地址的偏移量部分,而段選擇符不用設(shè)置,其隱含在cs寄存器中了。因?yàn)椤霸趦?nèi)核態(tài)執(zhí)行”的段只有一種,叫做代碼段,由宏_KERNEL_CS定義,所以只要當(dāng)CPU切換入內(nèi)核態(tài)時(shí)足可以將__KERNEL_CS裝載入cs。同樣的道理也適用于指向內(nèi)核數(shù)據(jù)結(jié)構(gòu)的指針(隱含地使用ds寄存器)以及指向用戶數(shù)據(jù)結(jié)構(gòu)的指針(內(nèi)核顯式地使用es寄存器)。二、linux進(jìn)程的虛

5、存區(qū)域361.內(nèi)核空間和用戶空間l進(jìn)程運(yùn)行時(shí)能訪問的存儲(chǔ)空間只是它的虛擬內(nèi)存空間。對(duì)當(dāng)前該進(jìn)程而言只有屬于它的虛擬內(nèi)存是可見的。l在進(jìn)程的虛擬內(nèi)存包含著進(jìn)程本身的程序代碼和數(shù)據(jù)。l進(jìn)程在運(yùn)行中還必須得到操作系統(tǒng)的支持。進(jìn)程的虛擬內(nèi)存中還包含著操作系統(tǒng)內(nèi)核。lLinux把進(jìn)程的虛擬內(nèi)存分成兩部分,內(nèi)核區(qū)和用戶區(qū)。l操作系統(tǒng)內(nèi)核的代碼和數(shù)據(jù)等被映射到內(nèi)核區(qū)。l進(jìn)程的可執(zhí)行映像(代碼和數(shù)據(jù))映射到虛擬內(nèi)存的用戶區(qū)。l進(jìn)程虛擬內(nèi)存的內(nèi)核區(qū)的訪問權(quán)限設(shè)置為0級(jí),用戶區(qū)為3級(jí)。l內(nèi)核訪問虛存的權(quán)限為0級(jí),而進(jìn)程的訪問權(quán)限為3級(jí)Linux運(yùn)行在x86時(shí),進(jìn)程的虛擬內(nèi)存為4GB。進(jìn)程虛

6、存空間的劃分在系統(tǒng)初始化時(shí)由GDT確定,它定義在/arch/i386/kernel/head.S文件中:.quad0x0000000000000000/*NULL描述符*/.quad0x0000000000000000/*未使用*/.quad0xc0c39a000000ffff/*內(nèi)核代碼段1GB在0xc0000000*/.quad0xc0c392000000ffff/*內(nèi)核數(shù)據(jù)段1GB在0xc0000000*/.quad0x00cbfa000000ffff/*用戶代碼段3GB在0x00000000*/.quad0x00cbf2000000ffff/*用戶數(shù)據(jù)段3GB在

7、0x00000000*/.quad0x0000000000000000/*未使用*/.quad0x0000000000000000/*未使用*/.fill2*NR_TASKS,8,0/*各個(gè)進(jìn)程LDT描述符和TSS描述符的空間*/Linux的存儲(chǔ)管理主要是管理進(jìn)程虛擬內(nèi)存的用戶區(qū)。進(jìn)程虛擬內(nèi)存的用戶區(qū)分成代碼段、數(shù)據(jù)段、堆棧以及進(jìn)程運(yùn)行的環(huán)境變量、參數(shù)傳遞區(qū)域等。2.linux描述進(jìn)程虛擬地址空間的數(shù)據(jù)結(jié)構(gòu)(1)進(jìn)程虛擬地址空間mm_struct結(jié)構(gòu)每一個(gè)進(jìn)程,用一個(gè)mm_struct結(jié)構(gòu)體來定義它的虛存用戶區(qū)。該結(jié)構(gòu)體首地址在進(jìn)程的任務(wù)

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。