




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、看圖說話:學(xué)習(xí)Linux內(nèi)核(1)-ver1.0 以內(nèi)存管理為線索騰訊研究院/北京分院/無線組周曉波(xiaobozhou)2010-03-29提綱 前言 概述 Linux發(fā)展簡史 Linux內(nèi)核簡介 內(nèi)存管理 實(shí)模式 保護(hù)模式 虛擬地址到物理地址的總體映射關(guān)系(分區(qū)) 進(jìn)程內(nèi)存空間布局 內(nèi)核態(tài)虛擬地址空間 異常、中斷、陷入、軟中斷、軟件中斷、底半(BH) 上下文、搶占、內(nèi)核棧、中斷??偨Y(jié)前言 內(nèi)核 操作系統(tǒng) 內(nèi)核:管理硬件資源,提供進(jìn)程運(yùn)行環(huán)境 設(shè)備管理 進(jìn)程管理 內(nèi)存管理 文件管理 操作系統(tǒng):內(nèi)核+系統(tǒng)軟件+其他常用軟件 核心進(jìn)程 編輯器 交互界面等前言(cont.1) 操作系統(tǒng)(內(nèi)核)的
2、講法 內(nèi)存管理 系統(tǒng)調(diào)用 中斷處理 內(nèi)核同步 I/O管理 文件系統(tǒng). 我們 以內(nèi)存管理為線索,把部分幾個串起來提綱 前言 概述 Linux發(fā)展簡史 Linux內(nèi)核簡介 內(nèi)存管理 實(shí)模式 保護(hù)模式 虛擬地址到物理地址的總體映射關(guān)系(分區(qū)) 進(jìn)程內(nèi)存空間布局 內(nèi)核態(tài)虛擬地址空間 異常、中斷、陷入、軟中斷、軟件中斷、底半(BH) 上下文、搶占、內(nèi)核棧、中斷??偨Y(jié)概述 約定 用Linux表示使用Linux內(nèi)核的操作系統(tǒng),即發(fā)行版本,如Debian 用Linux內(nèi)核來表達(dá)一個內(nèi)核 Linux發(fā)展簡史 Linux是一個UNIX-like操作系統(tǒng)內(nèi)核 UNIX是個商標(biāo),被Open Group擁有 UNIX用
3、來表達(dá)符合Unix標(biāo)準(zhǔn)的操作系統(tǒng) 被Open Group的“Single UNIX Specification”認(rèn)證通過才可使用UNIX商標(biāo),否則被稱為UNIX-like系統(tǒng) Linux發(fā)展的三條線索 UNIX的發(fā)展 GNU的發(fā)展 Linux內(nèi)核的出現(xiàn)概述(cont.1) Linux發(fā)展的三條線索 UNIX的發(fā)展 世界上沒有一個操作系統(tǒng)叫UNIX白馬非馬 1969年,Ken Thompson和Dennis Ritchie在AT&T貝爾實(shí)驗(yàn)室實(shí)現(xiàn)了UnixMultics涅磐 1973年,用C語言重寫Unix飛速發(fā)展 AT&T以分發(fā)許可證的方式,把Unix分發(fā)給大學(xué)和研究機(jī)構(gòu),及至
4、Unix第六版,AT&T意識到商業(yè)價值,成立USL,并宣布對Unix所有權(quán)開放到封閉 同時伯克利成立CSRG,開發(fā)并發(fā)布BSD UnixTcp/IP AT&T引入BSD的一些優(yōu)點(diǎn),發(fā)布Unix System V它和BSD成為現(xiàn)代UNIX的兩個分支 很多公司基于這兩個分支發(fā)布自己的系統(tǒng)Solaris,HP-UX,AIX等商業(yè)版本繁榮 POSIX標(biāo)準(zhǔn)化概述(cont.2) Linux發(fā)展的三條線索 GNU的發(fā)展 UNIX并不是免費(fèi)的,其軟件也不是開源的 Richard Stallman在1983年發(fā)起開源軟件項(xiàng)目,為了構(gòu)建一個免費(fèi)的操作系統(tǒng):包括編輯器、編譯器、文本處理和內(nèi)核等 很
5、多UNIX上的軟件都被重寫,并以GPL發(fā)布 Emacs和GCC是旗艦項(xiàng)目概述(cont.3) Linux發(fā)展的三條線索 Linux內(nèi)核出現(xiàn) GNU已經(jīng)完成了對幾乎全部UNIX的軟件的重寫,除了內(nèi)核 GNU的內(nèi)核項(xiàng)目Hurd,進(jìn)展緩慢 1991年,Linus Torvalds在一個教學(xué)的UNIX-like的操作系統(tǒng)Minix基礎(chǔ)上開發(fā)了Linux內(nèi)核,并以GPL發(fā)布 Linux內(nèi)核實(shí)現(xiàn)了Posix標(biāo)準(zhǔn),能很好的和GNU軟件配合,成為了GNU系統(tǒng)的內(nèi)核 Linux內(nèi)核飛速發(fā)展,很多公司利用GNU軟件+Linux內(nèi)核發(fā)布自己的操作系統(tǒng),例如RedHat、Debian、FedoraCore和Gento
6、o等,這些系統(tǒng)被稱為GNU/Linux系統(tǒng),一般就直接叫做Linux概述(cont.4) UNIX及UNIX-like系統(tǒng)的族譜概述(cont.5) Linux內(nèi)核簡介 特點(diǎn) 實(shí)現(xiàn)Posix標(biāo)準(zhǔn),BSD和System V擇優(yōu)實(shí)現(xiàn) 單內(nèi)核 模塊動態(tài)加載 支持進(jìn)程搶占和內(nèi)核搶占 獨(dú)特的線程實(shí)現(xiàn)方式 有限的支持內(nèi)核線程 面向?qū)ο蟮脑O(shè)備管理框架 使用GCC編譯 .提綱 前言 概述 Linux發(fā)展簡史 Linux內(nèi)核簡介 內(nèi)存管理 實(shí)模式 保護(hù)模式 虛擬地址到物理地址的總體映射關(guān)系(分區(qū)) 進(jìn)程內(nèi)存空間布局 內(nèi)核態(tài)虛擬地址空間 異常、中斷、陷入、軟中斷、軟件中斷、底半(BH) 上下文、搶占、內(nèi)核棧、中斷
7、??偨Y(jié)內(nèi)存管理 概述 一個計(jì)算機(jī)系統(tǒng)(硬件)包括: 中央處理器 存儲器 外設(shè) 存儲器 是一切操作的場地(Arena) 操作系統(tǒng)的操作都必須在一個內(nèi)存空間中完成 運(yùn)行進(jìn)程 中斷處理 系統(tǒng)服務(wù) I/O處理 解析內(nèi)存管理的思路: 硬件支持和接口 Linux對內(nèi)核態(tài)虛擬地址的映射 用戶態(tài)虛擬地址的映射內(nèi)存管理(cont.1)涉及到的機(jī)制 硬件方面:分段/分頁/TLB/Cache 軟件方面:分頁/VMA8086(16位系統(tǒng))只有分段機(jī)制 20bit的物理地址 = 段地址 x 16 + 偏移地址16bit000016bit輸入:段地址(在段寄存器里)20bit20bit輸出:物理地址進(jìn)地址線輸入:偏移地址
8、內(nèi)存管理(cont.1)8086(16位系統(tǒng))只有分段機(jī)制 總結(jié)通過分段機(jī)制把“段地址”和“偏移地址”轉(zhuǎn)化成物理地址分段單元偏移地址段地址物理地址內(nèi)存管理(cont.2) 80 x86的分段/分頁 概述: 通過分段機(jī)制把“段選擇符”和“邏輯地址”轉(zhuǎn)換成“線性地址(也稱虛擬地址)” 通過分頁機(jī)制把“虛擬地址”轉(zhuǎn)換成“物理地址”分段單元邏輯地址段選擇符(給出段地址)線性地址分頁單元物理地址內(nèi)存管理(cont.3) 80 x86的分段/分頁 分段概覽16bit輸入:段選擇符(段寄存器)32bit輸入:邏輯地址段描述符內(nèi)存中:段描述符表內(nèi)存的某段段地址某字節(jié)32bit輸出:線性地址段地址內(nèi)存管理(co
9、nt.4) 80 x86的分段/分頁 分段實(shí)現(xiàn) 段描述符表怎么找到? GDTR或LDTR寄存器 由段選擇符的TI比特決定GDTR還是LDTR 段描述符查找過程優(yōu)化 有一個非編程寄存器(8字節(jié)?) 當(dāng)一個段選擇符被裝入段寄存器時,相應(yīng)的段描述符就被裝入該非編程寄存器中。 Linux在80 x86平臺上的分段 段基地址都是0 x00000000 線性地址=邏輯地址 四個主要段 用戶代碼段、用戶數(shù)據(jù)段、內(nèi)核代碼段和內(nèi)核數(shù)據(jù)段 段選擇符中的RPL CPU當(dāng)前級別CPL:內(nèi)核態(tài)和用戶段(其實(shí)有4個) 段描述符中DPL 該段的級別DPL:當(dāng)CPL高于DPL時可被訪問13bit的index 1bit的TI
10、2bit的RPL段選擇符內(nèi)存管理(cont.5)輸入:段選擇符(段寄存器)32bit輸入:邏輯地址段描述符內(nèi)存中:段描述符表內(nèi)存的某段段地址某字節(jié)32bit輸出:線性地址段地址GDTR/LDTR13bit的index 1bit的TI 2bit的RPL832bit32bit非編程寄存器裝段描述符內(nèi)存管理(cont.6) 80 x86的分段/分頁 分頁概覽 分頁 打白條,拆東墻補(bǔ)西墻 也可能相反 把線性地址(虛擬地址)空間中的某塊和物理地址(物理內(nèi)存)中的某塊映射起來 利用索引找到基地址 加上偏移量 這種映射是以固定大?。摚閱挝?80 x86是4096,但是支持?jǐn)U展分頁到4M 其過程是: 先分
11、指標(biāo),按需給實(shí)物 究其本質(zhì): 把虛擬地址空間(指標(biāo))的分配和實(shí)物(物理內(nèi)存)的分配解耦 推理: 如果虛擬地址空間對應(yīng)的不是物理內(nèi)存呢?內(nèi)存管理(cont.7)80 x86中的分段/分頁 分頁實(shí)現(xiàn):硬件?軟件? 硬件支持的常規(guī)分頁方式:2級(注意頁目錄項(xiàng)/頁表項(xiàng)都是4字節(jié),其中20bit用于和偏移量來合成物理地址)10bit頁目錄索引10bit頁表索引12bit頁內(nèi)偏移由分段機(jī)制產(chǎn)生出來的線性地址頁目錄基地址的物理地址CR3寄存器頁目錄項(xiàng)頁目錄頁表項(xiàng)頁表物理內(nèi)存頁某字節(jié)第0bit第31bit內(nèi)存管理(cont.8)80 x86中的分段/分頁 分頁實(shí)現(xiàn) 硬件支持的擴(kuò)展分頁(4M或2M) 注意兼容性
12、的考慮10bit頁目錄索引22bit頁表索引由分段機(jī)制產(chǎn)生出來的線性地址頁目錄基地址的物理地址CR3寄存器頁目錄項(xiàng)頁目錄物理內(nèi)存頁4M某字節(jié)第0bit第31bit內(nèi)存管理(cont.9) 80 x86分段/分頁 分頁機(jī)制的硬件支持回顧 硬件做了什么?為什么說這是硬件支持的? 多級分頁時,查找頁表的過程是硬件完成的嗎? 這個過程中需要軟件支持嗎? 分頁機(jī)制對線性地址的解析是10/10/12,擴(kuò)展分頁是10/22。能不能是13/10,或者其他?能隨便分配嗎? 拆東墻補(bǔ)西墻的反例是什么?內(nèi)存管理(cont.10) 80 x86的分段/分頁 當(dāng)物理內(nèi)存大于4G時,如何利用之 80 x86的尋址能力是6
13、4G(36bit地址寬度) PAE和PSE,PSE不被Linux支持 原理很簡單,32 36 實(shí)現(xiàn)很難: 區(qū)分虛擬地址空間 兼容擴(kuò)展分頁機(jī)制 注意這是硬件層面 因?yàn)橐呀?jīng)解耦,頁表項(xiàng)存的 基地址+頁內(nèi)偏移=36即可內(nèi)存管理(cont.10) 80 x86分段/分頁 PAE的實(shí)現(xiàn),先看常規(guī)分頁的圖:這里還有一個變量10bit頁目錄索引10bit頁表索引12bit頁內(nèi)偏移由分段機(jī)制產(chǎn)生出來的線性地址頁目錄基地址的物理地址CR3寄存器頁目錄項(xiàng)頁目錄頁表項(xiàng)頁表物理內(nèi)存頁某字節(jié)第0bit第31bit內(nèi)存管理(cont.10) 80 x86分段/分頁 PAE的實(shí)現(xiàn):增加一級(注意頁表項(xiàng)/頁目錄項(xiàng)是8字節(jié),其
14、中24bit用于和頁內(nèi)偏移來合成物理地址) CR3每指定一個PDPT就可以尋址4G 如何在程序中使用呢?2bit PDPT9bit頁表索引 12bit頁內(nèi)偏移由分段機(jī)制產(chǎn)生出來的線性地址PDPT基地址的物理地址CR3寄存器頁目錄項(xiàng)頁目錄頁表項(xiàng)頁表物理內(nèi)存頁某字節(jié)第0bit第31bit標(biāo)志是否開啟PAECR4寄存器9bit頁目錄索引PDPT項(xiàng)PDPT內(nèi)存管理(cont.11) 80 x86內(nèi)存訪問優(yōu)化 TLB和Cache TLB 緩存已經(jīng)轉(zhuǎn)換好的對 當(dāng)CR3的值發(fā)生變化時,所有表項(xiàng)失效標(biāo)記物理地址0/1標(biāo)記物理地址0/1內(nèi)存管理(cont.12) 80 x86內(nèi)存訪問優(yōu)化 Cache 改善分頁機(jī)
15、制 緩存對 直接映射 全關(guān)聯(lián)映射 組關(guān)聯(lián)映射標(biāo)記某塊內(nèi)存(多字節(jié))標(biāo)記標(biāo)記內(nèi)存中的塊和緩存中的塊是多對一,而且不可變。例如:內(nèi)存塊映射到內(nèi)存塊基地址mod緩存的總塊數(shù)直接映射某塊內(nèi)存(多字節(jié))某塊內(nèi)存(多字節(jié))內(nèi)存塊號塊內(nèi)偏移函數(shù)運(yùn)算線性地址內(nèi)存管理(cont.13) 80 x86內(nèi)存訪問優(yōu)化 Cache全關(guān)聯(lián)中,緩存中的塊和物理內(nèi)存中的塊沒有函數(shù)關(guān)系,必須挨個比較“標(biāo)記”來檢查緩存中是有該塊。硬件可以用一次比較來實(shí)現(xiàn),但是復(fù)雜度高。標(biāo)記某塊內(nèi)存(多字節(jié))標(biāo)記標(biāo)記全關(guān)聯(lián)映射某塊內(nèi)存(多字節(jié))某塊內(nèi)存(多字節(jié))內(nèi)存塊號塊內(nèi)偏移比較運(yùn)算線性地址內(nèi)存管理(cont.14) 80 x86內(nèi)存訪問優(yōu)化
16、Cache組關(guān)聯(lián)中物理內(nèi)存和緩存都被分成N組,第k組的內(nèi)存塊被映射到緩存第k組。第k組中的第i塊被映射到緩存第k組的任意一塊(無函數(shù)關(guān)系),而且顯然內(nèi)存第k組的塊數(shù)遠(yuǎn)大于緩存第k組的塊數(shù)。標(biāo)記某塊內(nèi)存(多字節(jié))標(biāo)記標(biāo)記組關(guān)聯(lián)映射某塊內(nèi)存(多字節(jié))某塊內(nèi)存(多字節(jié))內(nèi)存塊號塊內(nèi)偏移比較運(yùn)算線性地址標(biāo)記某塊內(nèi)存(多字節(jié))標(biāo)記某塊內(nèi)存(多字節(jié))組號內(nèi)存管理(cont.15)Linux內(nèi)核對分頁的實(shí)現(xiàn) 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)了四級,用一套代碼實(shí)現(xiàn)多種場景 常規(guī)分頁需2級,擴(kuò)展分頁需1級,PAE需3級,PAE且擴(kuò)展分頁需2級,x86_64需4級頁全局目錄頁上級目錄頁中級目錄頁表偏移頁全局目錄基地址物理地址CR3寄
17、存器頁全局目錄頁上級目錄頁中級目錄頁目錄頁內(nèi)存管理(cont.16) 內(nèi)存管理總結(jié) 實(shí)模式 vs 保護(hù)模式 實(shí)模式下分段 保護(hù)模式下的分段 保護(hù)模式下的分頁 TLB結(jié)構(gòu) 擴(kuò)展分頁機(jī)制 PAE機(jī)制 Cache結(jié)構(gòu) Linux內(nèi)核的實(shí)現(xiàn) 代碼復(fù)用 軟件(內(nèi)核或用戶軟件)訪問內(nèi)存的方式 給出段選擇符/邏輯地址 也就是說,不能直接用物理地址 只有實(shí)模式可以直接用物理地址 理解和區(qū)分硬件軟件所做的工作內(nèi)存管理(cont.17)物理內(nèi)存布局 以頁框?yàn)閱挝唬ㄎ锢眄摻许摽騊age Frame,線性地址空間中的頁就叫頁P(yáng)age) 并不是所有物理內(nèi)存(地址空間)都可以被使用 下表是一個128MB內(nèi)存的機(jī)器啟動時B
18、IOS上報的物理地址布局64位機(jī)器32位Linux啟動時BIOS上報的物理內(nèi)存信息64位Linux啟動時BIOS上報的物理內(nèi)存信息32位機(jī)器32位Linux啟動時BIOS上報的物理內(nèi)存信息沒有找到32位機(jī)器 -_-b內(nèi)存管理(cont.18)虛擬地址空間到物理地址空間的總體映射關(guān)系分三個區(qū)ZONE_DMA(ZONE_DMA32)x86只能用物理地址016M,不是說這16M只能用于DMA有些體系結(jié)構(gòu)可以用所有物理內(nèi)存ZONE_HIGHMEMx86上大于896M的物理地址空間如果物理地址少于896M則無需highmem這個區(qū)的物理地址可以動態(tài)映射到虛擬地址空間需要時映射,且映射沒有函數(shù)關(guān)系ZONE
19、_NORMAL剩下的都是ZONE_NORMAL這些物理地址可以被虛擬地址直接映射虛擬地址減去3G(PAGE_OFFSET宏)即可物理內(nèi)存大于1G時,由于內(nèi)核虛擬地址空間只有1G,直接映射方式導(dǎo)致內(nèi)核無法使用大于1G的物理內(nèi)存,因此需要動態(tài)映射。這個區(qū)的物理地址也可以被動態(tài)映射給用戶態(tài)(內(nèi)核態(tài)呢?),即直接映射是一種優(yōu)化,不是說這段物理地址就被預(yù)留。映射平衡:平衡三個區(qū)的物理內(nèi)存使用,主要是normal和heighmem問題:normal區(qū)的物理地址如果被映射給用戶空間虛擬地址了,內(nèi)核要用的時候怎么辦?內(nèi)存管理(cont.19) 物理內(nèi)存的分區(qū) 內(nèi)核用幾個變量來描述物理內(nèi)存布局 num_phys
20、pages totalram_pages max_pfn min_low_pfn max_low_pfn totalhigh_pages highstart_pfn heighend_pfn0 x000000000 xXXXXXXXX0 x000000000 xXXXXXXXXZONE_NORMAL和ZONE_DMAZONE_HIGHMEMZONE_NORMAL和ZONE_DMA提綱 前言 概述 Linux發(fā)展簡史 Linux內(nèi)核簡介 內(nèi)存管理 實(shí)模式 保護(hù)模式 虛擬地址到物理地址的總體映射關(guān)系(分區(qū)) 進(jìn)程內(nèi)存空間布局 內(nèi)核態(tài)虛擬地址空間 異常、中斷、陷入、軟中斷、軟件中斷、底半(BH) 上
21、下文、搶占、內(nèi)核棧、中斷??偨Y(jié)進(jìn)程地址空間分布 概述 進(jìn)程地址空間 內(nèi)核空間(進(jìn)程在內(nèi)核態(tài)時可訪問) 用戶空間(進(jìn)程在內(nèi)核態(tài)和用戶態(tài)都可訪問) 地址空間的劃分 通過分頁機(jī)制來讓每個進(jìn)程都有一個全虛擬地址空間 段選擇符來標(biāo)識Ring0-3 從進(jìn)程頁表和內(nèi)核頁表說起 頁全局目錄 每個進(jìn)程的頁全局目錄的前一部分是用戶空間的 后一部分都是相同的,是內(nèi)核空間 各進(jìn)程的內(nèi)核空間完全相同嗎?內(nèi)核棧呢?完全相同 內(nèi)核空間有一部分不是永久映射,不同的進(jìn)程映射到不同物理內(nèi)存,U區(qū) 內(nèi)核頁全局目錄 從未被使用 是頁全局目錄的后半部分的模板進(jìn)程地址空間分布(cont.1)頁全局目錄頁上級目錄頁中級目錄頁表偏移頁全局目
22、錄基地址物理地址CR3寄存器頁全局目錄頁上級目錄頁中級目錄頁目錄頁內(nèi)核頁全局目錄不同進(jìn)程有不同的頁全局目錄;但是下部分是相同的。進(jìn)程地址空間分布(cont.2) 頁表結(jié)構(gòu) 永久映射 vs 臨時映射 永久映射是線性地址和物理地址固定映射,物理頁框不會被換出(swap)到硬盤 臨時映射是分配“指標(biāo)”和分配“實(shí)物(即物理內(nèi)存)”兩步走,利用缺頁異常來實(shí)現(xiàn)分配“實(shí)物” 進(jìn)程線性地址空間可分為: 用戶態(tài)動態(tài)映射地址 內(nèi)核態(tài)直接映射地址 內(nèi)核態(tài)動態(tài)映射地址 先看虛擬地址空間和物理地址空間的映射的總體情況進(jìn)程地址空間分布(cont.3)0 x000000000 xFFFFFFFF進(jìn)程的線性地址空間0 xC0
23、0000000 x00000000 x86體系物理內(nèi)存0 xFFFFFFFF0 x01000000016M用于DMAZONE_DMA0 x3800000016896M為ZONE_NORMAL896M以上為ZONE_HIGHMEM內(nèi)核空間high_memory標(biāo)識了動態(tài)映射的起始點(diǎn)第一個(不對)物理地址直接映射后的虛擬地址物理內(nèi)存1G時的線性地址和物理地址總體映射進(jìn)程地址空間分布(cont.4)0 x000000000 xFFFFFFFF進(jìn)程的線性地址空間0 xC00000000 x00000000 x86體系物理內(nèi)存0 xXXXXXXXX896M0 x01000000DMA只能從這里取016M
24、稱為ZONE_DMAZONE_NORMAL內(nèi)核空間high_memory標(biāo)識了動態(tài)映射的起始點(diǎn),就是第896M字節(jié)物理地址直接映射后的虛擬地址物理內(nèi)存1G時的線性地址和物理地址總體映射進(jìn)程地址空間分布(cont.5) 進(jìn)程地址空間布局 前面介紹了 物理內(nèi)存的布局 虛擬地址空間和物理地址空間的大體映射規(guī)則(即分區(qū)) 現(xiàn)在需要 細(xì)化虛擬地址空間的布局 如何實(shí)現(xiàn)這種布局進(jìn)程地址空間分布(cont.6) 虛擬地址空間的劃分 用戶空間 03G 內(nèi)核空間 3G4G 虛擬地址空間的維護(hù) 每個進(jìn)程對象(struct task_struct結(jié)構(gòu))有一個內(nèi)存描述符(struct mm_struct結(jié)構(gòu)),全權(quán)維護(hù)
25、該進(jìn)程的虛擬地址空間 內(nèi)存描述符通過一個VMA鏈表(及紅黑樹)實(shí)現(xiàn)對虛擬地址空間的維護(hù)struct task_structmmstruct mm_structmm_mapstruct vm_area_structvm_startvm_endvm_filevm_opsstruct vm_area_structvm_startvm_end虛擬地址03G文件描述符進(jìn)程地址空間分布(cont.7) VMA 為什么要VMA 3G空間太大,需要分段維護(hù) 3G空間不是被順序使用的 和可執(zhí)行文件的結(jié)構(gòu)有關(guān) 和可執(zhí)行文件的加載過程有關(guān) 解耦虛擬地址空間的使用(可以認(rèn)為加入VMA層)VMA層操作某個虛擬地址分段/
26、TLB頁表/Cache物理內(nèi)存進(jìn)程地址空間分布(cont.8)1,可執(zhí)行文件映像2,libc映像3,棧段/堆段(segment不是section)4,vdso內(nèi)核提供的虛擬動態(tài)庫(注意其地址)內(nèi)核棧VMA堆VMA數(shù)據(jù)段VMA代碼段VMA堆VMA數(shù)據(jù)段VMA代碼段VMA進(jìn)程地址空間分布(cont.9) 常見的VMA 可執(zhí)行文件和動態(tài)庫映像 代碼段/數(shù)據(jù)段/BSS(BSS可能合并到數(shù)據(jù)段了) 不必把所有的內(nèi)容都讀入,需要時用缺頁異常 加快程序加載速度 棧和堆 便于控制棧的大小、位置等 只有一個堆 windows有多個堆,所以windows可以malloc的最大內(nèi)存較小 共享內(nèi)存 多個進(jìn)程之間共享同
27、樣的物理內(nèi)存區(qū) 內(nèi)存映射文件 把一段虛擬地址映射到文件,便于在進(jìn)程退出時保留進(jìn)程地址空間分布(cont.10) 總結(jié) 物理地址空間的分區(qū)(ZONE) 虛擬地址空間用戶態(tài)和內(nèi)核態(tài)之分 虛擬地址空間的分區(qū)(VMA)提綱 前言 概述 Linux發(fā)展簡史 Linux內(nèi)核簡介 內(nèi)存管理 實(shí)模式 保護(hù)模式 虛擬地址到物理地址的總體映射關(guān)系(分區(qū)) 進(jìn)程內(nèi)存空間布局 內(nèi)核態(tài)虛擬地址空間 異常、中斷、陷入、軟中斷、軟件中斷、底半(BH) 上下文、搶占、內(nèi)核棧、中斷棧總結(jié)內(nèi)核態(tài)虛擬地址空間 內(nèi)核相關(guān)概念 中斷 異常/中斷 軟件中斷/陷入 軟中斷 BH BH 任務(wù)隊(duì)列(task queue) 軟中斷 taskle
28、t(基于軟中斷) ksoftirqd 工作隊(duì)列(work queue)內(nèi)核態(tài)虛擬地址空間(cont.1) 內(nèi)核相關(guān)概念 搶占 概念 搶占就是強(qiáng)制對可調(diào)度實(shí)體進(jìn)行上下文切換 理解 必須是可調(diào)度的實(shí)體 必須有上下文切換動作 中斷 vs 搶占內(nèi)核態(tài)虛擬地址空間(cont.2) 內(nèi)核相關(guān)概念 搶占 用戶態(tài)搶占 就是進(jìn)程調(diào)度,由schedule()函數(shù)實(shí)現(xiàn) 時機(jī) 從系統(tǒng)調(diào)用返回用戶空間 從中斷處理程序返回用戶空間(顯然,時鐘中斷也是) 內(nèi)核態(tài)搶占 本質(zhì)上說,也是進(jìn)程調(diào)度 內(nèi)核鎖是不可搶占區(qū)域的標(biāo)識時機(jī)從中斷處理程序返回之際內(nèi)核任務(wù)調(diào)用schedule(顯示調(diào)用或者阻塞) 不可搶占 中斷例程 可嵌套,不可搶占 因?yàn)樗皇钦{(diào)度對象內(nèi)核態(tài)虛擬地址空間(cont.3) CPU工作在三種狀態(tài) 在用戶態(tài)執(zhí)行某個進(jìn)程 在內(nèi)核態(tài)下執(zhí)行某個進(jìn)程 執(zhí)行中斷例程 上下文(context) CPU必定在某個上下文中執(zhí)行 進(jìn)程的用戶級上下文 進(jìn)程的內(nèi)核級上下文 中斷上
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五暑期工勞務(wù)派遣與就業(yè)環(huán)境優(yōu)化合同
- 二零二五年度物流公司貨車司機(jī)服務(wù)質(zhì)量考核與獎勵協(xié)議
- 2025年度網(wǎng)絡(luò)安全防護(hù)等級評定安全協(xié)議書
- 2025年度汽車零部件貨物運(yùn)輸安全與質(zhì)量協(xié)議
- 二零二五年度環(huán)保產(chǎn)業(yè)技術(shù)人才招聘與綠色創(chuàng)新協(xié)議
- 2025年度環(huán)保型清潔公司員工聘用合同書
- 二零二五年度水利設(shè)施監(jiān)控維保及災(zāi)害預(yù)警服務(wù)合同
- 二零二五年度海鮮水產(chǎn)店轉(zhuǎn)讓與經(jīng)營協(xié)議
- 二零二五年度倆人共同創(chuàng)業(yè)經(jīng)營咖啡廳合伙協(xié)議
- 二零二五年度農(nóng)村土地租賃合同模板(現(xiàn)代農(nóng)業(yè)物流園區(qū))
- 中央2025年中國科協(xié)所屬單位招聘社會在職人員14人筆試歷年參考題庫附帶答案詳解-1
- 2024年湖北省聯(lián)合發(fā)展投資集團(tuán)有限公司人員招聘考試題庫及答案解析
- 造價咨詢服務(wù)方案進(jìn)度計(jì)劃安排及保證措施
- 2024年全國統(tǒng)一高考英語試卷(新課標(biāo)Ⅰ卷)含答案
- 供養(yǎng)直系親屬有關(guān)文件
- 出口退稅手冊核銷操作步驟
- 穿孔鋁板技術(shù)交底
- 第三章社科信息檢索原理與技術(shù)PPT課件
- 危大工程管理細(xì)則(廣西區(qū)規(guī)定)
- HALCON手冊簡體中文版
- 聲學(xué)原理及聲學(xué)測試
評論
0/150
提交評論