




版權(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)存管理 實模式 保護(hù)模式 虛擬地址到物理地址的總體映射關(guān)系(分區(qū)) 進(jìn)程內(nèi)存空間布局 內(nèi)核態(tài)虛擬地址空間 異常、中斷、陷入、軟中斷、軟件中斷、底半(BH) 上下文、搶占、內(nèi)核棧、中斷棧 總結(jié),前言,內(nèi)核 操作系統(tǒng) 內(nèi)核:管理硬件資源,提供進(jìn)程運行環(huán)境 設(shè)備管理 進(jìn)程管理 內(nèi)存管理 文件管理 操作系統(tǒng):內(nèi)核+系統(tǒng)軟件+其他常用軟件 核心進(jìn)程 編輯器 交互界面等,前言(cont.1),操作
2、系統(tǒng)(內(nèi)核)的講法 內(nèi)存管理 系統(tǒng)調(diào)用 中斷處理 內(nèi)核同步 I/O管理 文件系統(tǒng). 我們 以內(nèi)存管理為線索,把部分幾個串起來,提綱,前言 概述 Linux發(fā)展簡史 Linux內(nèi)核簡介 內(nèi)存管理 實模式 保護(hù)模式 虛擬地址到物理地址的總體映射關(guān)系(分區(qū)) 進(jìn)程內(nèi)存空間布局 內(nèi)核態(tài)虛擬地址空間 異常、中斷、陷入、軟中斷、軟件中斷、底半(BH) 上下文、搶占、內(nèi)核棧、中斷棧 總結(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 Gro
3、up擁有 UNIX用來表達(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貝爾實驗室實現(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)點,發(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并不是免費的,其軟件也不是開源的 Richard Stallman在1983年發(fā)起開源軟件項目,為了構(gòu)建一個免費的操作系統(tǒng):包括編輯器、編譯器、文本處理和內(nèi)核等 很多UNI
5、X上的軟件都被重寫,并以GPL發(fā)布 Emacs和GCC是旗艦項目,概述(cont.3),Linux發(fā)展的三條線索 Linux內(nèi)核出現(xiàn) GNU已經(jīng)完成了對幾乎全部UNIX的軟件的重寫,除了內(nèi)核 GNU的內(nèi)核項目Hurd,進(jìn)展緩慢 1991年,Linus Torvalds在一個教學(xué)的UNIX-like的操作系統(tǒng)Minix基礎(chǔ)上開發(fā)了Linux內(nèi)核,并以GPL發(fā)布 Linux內(nèi)核實現(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和Gentoo等,
6、這些系統(tǒng)被稱為GNU/Linux系統(tǒng),一般就直接叫做Linux,概述(cont.4),UNIX及UNIX-like系統(tǒng)的族譜,概述(cont.5),Linux內(nèi)核簡介 特點 實現(xiàn)Posix標(biāo)準(zhǔn),BSD和System V擇優(yōu)實現(xiàn) 單內(nèi)核 模塊動態(tài)加載 支持進(jìn)程搶占和內(nèi)核搶占 獨特的線程實現(xiàn)方式 有限的支持內(nèi)核線程 面向?qū)ο蟮脑O(shè)備管理框架 使用GCC編譯 .,提綱,前言 概述 Linux發(fā)展簡史 Linux內(nèi)核簡介 內(nèi)存管理 實模式 保護(hù)模式 虛擬地址到物理地址的總體映射關(guān)系(分區(qū)) 進(jìn)程內(nèi)存空間布局 內(nèi)核態(tài)虛擬地址空間 異常、中斷、陷入、軟中斷、軟件中斷、底半(BH) 上下文、搶占、內(nèi)核棧、中斷
7、棧 總結(jié),內(nèi)存管理,概述 一個計算機(jī)系統(tǒng)(硬件)包括: 中央處理器 存儲器 外設(shè) 存儲器 是一切操作的場地(Arena) 操作系統(tǒng)的操作都必須在一個內(nèi)存空間中完成 運行進(jìn)程 中斷處理 系統(tǒng)服務(wù) I/O處理 解析內(nèi)存管理的思路: 硬件支持和接口 Linux對內(nèi)核態(tài)虛擬地址的映射 用戶態(tài)虛擬地址的映射,內(nèi)存管理(cont.1),涉及到的機(jī)制 硬件方面:分段/分頁/TLB/Cache 軟件方面:分頁/VMA 8086(16位系統(tǒng))只有分段機(jī)制 20bit的物理地址 = 段地址 x 16 + 偏移地址,16bit,0000,16bit,輸入:段地址(在段寄存器里),20bit,20bit,輸出:物理地
8、址進(jìn)地址線,輸入:偏移地址,內(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)存中:段描述符
9、表,內(nèi)存的某段,段地址,某字節(jié),32bit,輸出:線性地址,段地址,內(nèi)存管理(cont.4),80 x86的分段/分頁 分段實現(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)和用戶段(其實有4個) 段描述符中DPL 該段
10、的級別DPL:當(dāng)CPL高于DPL時可被訪問,13bit的index,1bit的TI,2bit的RPL,段選擇符,內(nèi)存管理(cont.5),輸入:段選擇符(段寄存器),32bit,輸入:邏輯地址,段描述符,內(nèi)存中:段描述符表,內(nèi)存的某段,段地址,某字節(jié),32bit,輸出:線性地址,段地址,GDTR/LDTR,8,32bit,內(nèi)存管理(cont.6),80 x86的分段/分頁 分頁概覽 分頁 打白條,拆東墻補西墻 也可能相反 把線性地址(虛擬地址)空間中的某塊和物理地址(物理內(nèi)存)中的某塊映射起來 利用索引找到基地址 加上偏移量 這種映射是以固定大?。摚閱挝?80 x86是4096,但是支持?jǐn)U
11、展分頁到4M 其過程是: 先分指標(biāo),按需給實物 究其本質(zhì): 把虛擬地址空間(指標(biāo))的分配和實物(物理內(nèi)存)的分配解耦 推理: 如果虛擬地址空間對應(yīng)的不是物理內(nèi)存呢?,內(nèi)存管理(cont.7),80 x86中的分段/分頁 分頁實現(xiàn):硬件?軟件? 硬件支持的常規(guī)分頁方式:2級(注意頁目錄項/頁表項都是4字節(jié),其中20bit用于和偏移量來合成物理地址),10bit頁目錄索引,10bit頁表索引,12bit頁內(nèi)偏移,由分段機(jī)制產(chǎn)生出來的線性地址,頁目錄基地址的物理地址,CR3寄存器,頁目錄項,頁目錄,頁表項,頁表,物理內(nèi)存頁,某字節(jié),第0bit,第31bit,內(nèi)存管理(cont.8),80 x86中的
12、分段/分頁 分頁實現(xiàn) 硬件支持的擴(kuò)展分頁(4M或2M) 注意兼容性的考慮,10bit頁目錄索引,22bit頁表索引,由分段機(jī)制產(chǎn)生出來的線性地址,頁目錄基地址的物理地址,CR3寄存器,頁目錄項,頁目錄,物理內(nèi)存頁4M,某字節(jié),第0bit,第31bit,內(nèi)存管理(cont.9),80 x86分段/分頁 分頁機(jī)制的硬件支持回顧 硬件做了什么?為什么說這是硬件支持的? 多級分頁時,查找頁表的過程是硬件完成的嗎? 這個過程中需要軟件支持嗎? 分頁機(jī)制對線性地址的解析是10/10/12,擴(kuò)展分頁是10/22。能不能是13/10,或者其他?能隨便分配嗎? 拆東墻補西墻的反例是什么?,內(nèi)存管理(cont.1
13、0),80 x86的分段/分頁 當(dāng)物理內(nèi)存大于4G時,如何利用之 80 x86的尋址能力是64G(36bit地址寬度) PAE和PSE,PSE不被Linux支持 原理很簡單,32 36 實現(xiàn)很難: 區(qū)分虛擬地址空間 兼容擴(kuò)展分頁機(jī)制 注意這是硬件層面 因為已經(jīng)解耦,頁表項存的 基地址+頁內(nèi)偏移=36即可,內(nèi)存管理(cont.10),80 x86分段/分頁 PAE的實現(xiàn),先看常規(guī)分頁的圖:,這里還有 一個變量,10bit頁目錄索引,10bit頁表索引,12bit頁內(nèi)偏移,由分段機(jī)制產(chǎn)生出來的線性地址,頁目錄基地址的物理地址,CR3寄存器,頁目錄項,頁目錄,頁表項,頁表,物理內(nèi)存頁,某字節(jié),第0b
14、it,第31bit,內(nèi)存管理(cont.10),80 x86分段/分頁 PAE的實現(xiàn):增加一級(注意頁表項/頁目錄項是8字節(jié),其中24bit用于和頁內(nèi)偏移來合成物理地址) CR3每指定一個PDPT就可以尋址4G 如何在程序中使用呢?,2bit PDPT,9bit頁表索引,12bit頁內(nèi)偏移,由分段機(jī)制產(chǎn)生出來的線性地址,PDPT基地址的物理地址,CR3寄存器,頁目錄項,頁目錄,頁表項,頁表,物理內(nèi)存頁,某字節(jié),第0bit,第31bit,標(biāo)志是否開啟PAE,CR4寄存器,9bit頁目錄索引,PDPT項,PDPT,內(nèi)存管理(cont.11),80 x86內(nèi)存訪問優(yōu)化 TLB和Cache TLB 緩
15、存已經(jīng)轉(zhuǎn)換好的對 當(dāng)CR3的值發(fā)生變化時,所有表項失效,標(biāo)記,物理地址,0/1,標(biāo)記,物理地址,0/1,內(nèi)存管理(cont.12),80 x86內(nèi)存訪問優(yōu)化 Cache 改善分頁機(jī)制 緩存對 直接映射 全關(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ù)運算,線性地址,內(nèi)存管理(cont.13),80 x86內(nèi)存訪問優(yōu)化 Cache,全關(guān)聯(lián)中,緩存中的塊 和物理內(nèi)存中的塊沒有 函數(shù)關(guān)系,必須挨個比 較“標(biāo)記”來
16、檢查緩存中是 有該塊。 硬件可以用一次比較來 實現(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)偏移,比較運算,線性地址,內(nèi)存管理(cont.14),80 x86內(nèi)存訪問優(yōu)化 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)偏移,比較運算,線性地址,
17、標(biāo)記,某塊內(nèi)存 (多字節(jié)),標(biāo)記,某塊內(nèi)存 (多字節(jié)),組號,內(nèi)存管理(cont.15),Linux內(nèi)核對分頁的實現(xiàn) 數(shù)據(jù)結(jié)構(gòu)實現(xiàn)了四級,用一套代碼實現(xiàn)多種場景 常規(guī)分頁需2級,擴(kuò)展分頁需1級,PAE需3級,PAE且擴(kuò)展分頁需2級,x86_64需4級,頁全局目錄,頁上級目錄,頁中級目錄,頁表,偏移,頁全局目錄基地址物理地址,CR3寄存器,頁全局目錄,頁上級目錄,頁中級目錄,頁目錄,頁,內(nèi)存管理(cont.16),內(nèi)存管理總結(jié) 實模式 vs 保護(hù)模式 實模式下分段 保護(hù)模式下的分段 保護(hù)模式下的分頁 TLB結(jié)構(gòu) 擴(kuò)展分頁機(jī)制 PAE機(jī)制 Cache結(jié)構(gòu) Linux內(nèi)核的實現(xiàn) 代碼復(fù)用 軟件(內(nèi)核
18、或用戶軟件)訪問內(nèi)存的方式 給出段選擇符/邏輯地址 也就是說,不能直接用物理地址 只有實模式可以直接用物理地址 理解和區(qū)分硬件軟件所做的工作,內(nèi)存管理(cont.17),物理內(nèi)存布局 以頁框為單位(物理頁叫頁框Page Frame,線性地址空間中的頁就叫頁Page) 并不是所有物理內(nèi)存(地址空間)都可以被使用 下表是一個128MB內(nèi)存的機(jī)器啟動時BIOS上報的物理地址布局,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
19、),虛擬地址空間到物理地址空間的總體映射關(guān)系 分三個區(qū) ZONE_DMA(ZONE_DMA32) x86只能用物理地址016M,不是說這16M只能用于DMA 有些體系結(jié)構(gòu)可以用所有物理內(nèi)存 ZONE_HIGHMEM x86上大于896M的物理地址空間 如果物理地址少于896M則無需highmem 這個區(qū)的物理地址可以動態(tài)映射到虛擬地址空間 需要時映射,且映射沒有函數(shù)關(guān)系 ZONE_NORMAL 剩下的都是ZONE_NORMAL 這些物理地址可以被虛擬地址直接映射 虛擬地址減去3G(PAGE_OFFSET宏)即可 物理內(nèi)存大于1G時,由于內(nèi)核虛擬地址空間只有1G,直接映射方式導(dǎo)致內(nèi)核無法使用大于
20、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_physpages totalram_pages max_pfn min_low_pfn max_low_pfn totalhigh_pages highstart_pfn heighend_pfn,0 x00
21、000000,0 xXXXXXXXX,0 x00000000,0 xXXXXXXXX,ZONE_NORMAL 和ZONE_DMA,ZONE_HIGHMEM,ZONE_NORMAL 和ZONE_DMA,提綱,前言 概述 Linux發(fā)展簡史 Linux內(nèi)核簡介 內(nèi)存管理 實模式 保護(hù)模式 虛擬地址到物理地址的總體映射關(guān)系(分區(qū)) 進(jìn)程內(nèi)存空間布局 內(nèi)核態(tài)虛擬地址空間 異常、中斷、陷入、軟中斷、軟件中斷、底半(BH) 上下文、搶占、內(nèi)核棧、中斷棧 總結(jié),進(jìn)程地址空間分布,概述 進(jìn)程地址空間 內(nèi)核空間(進(jìn)程在內(nèi)核態(tài)時可訪問) 用戶空間(進(jìn)程在內(nèi)核態(tài)和用戶態(tài)都可訪問) 地址空間的劃分 通過分頁機(jī)制來讓每
22、個進(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),頁全局目錄,頁上級目錄,頁中級目錄,頁表,偏移,頁全局目錄基地址物理地址,CR3寄存器,頁全局目錄,頁上級目錄,頁中級目錄,頁目錄,頁,內(nèi)核頁全局目錄,不同進(jìn)程有不同的頁全局目錄;但是下部分是相同的。,進(jìn)程地址空間分布(
23、cont.2),頁表結(jié)構(gòu) 永久映射 vs 臨時映射 永久映射是線性地址和物理地址固定映射,物理頁框不會被換出(swap)到硬盤 臨時映射是分配“指標(biāo)”和分配“實物(即物理內(nèi)存)”兩步走,利用缺頁異常來實現(xiàn)分配“實物” 進(jìn)程線性地址空間可分為: 用戶態(tài)動態(tài)映射地址 內(nèi)核態(tài)直接映射地址 內(nèi)核態(tài)動態(tài)映射地址 先看虛擬地址空間和物理地址空間的映射的總體情況,進(jìn)程地址空間分布(cont.3),0 x00000000,0 xFFFFFFFF,進(jìn)程的線性地址空間,0 xC0000000,0 x00000000,x86體系物理內(nèi)存,0 xFFFFFFFF,0 x01000000,016M用于DMA ZONE_
24、DMA,0 x38000000,16896M為 ZONE_NORMAL,896M以上為 ZONE_HIGHMEM,內(nèi)核空間,high_memory標(biāo)識了 動態(tài)映射的起始點第一 個(不對)物理地址 直接映射后的虛擬地址,物理內(nèi)存1G時的線性地址和物理地址總體映射,進(jìn)程地址空間分布(cont.4),0 x00000000,0 xFFFFFFFF,進(jìn)程的線性地址空間,0 xC0000000,0 x00000000,x86體系物理內(nèi)存,0 xXXXXXXXX896M,0 x01000000,DMA只能從這里取 016M 稱為ZONE_DMA,ZONE_NORMAL,內(nèi)核空間,high_memory標(biāo)識
25、了 動態(tài)映射的起始點,就 是第896M字節(jié)物理地址 直接映射后的虛擬地址,物理內(nèi)存1G時的線性地址和物理地址總體映射,進(jìn)程地址空間分布(cont.5),進(jìn)程地址空間布局 前面介紹了 物理內(nèi)存的布局 虛擬地址空間和物理地址空間的大體映射規(guī)則(即分區(qū)) 現(xiàn)在需要 細(xì)化虛擬地址空間的布局 如何實現(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ù)該進(jìn)程的虛擬地址空間 內(nèi)存描述符通過一個VMA鏈表(及紅黑樹)實
26、現(xiàn)對虛擬地址空間的維護(hù),struct task_struct,mm,struct mm_struct,mm_map,struct vm_area_struct,vm_start,vm_end,vm_file,vm_ops,struct vm_area_struct,vm_start,vm_end,虛擬地址03G,文件描述符,進(jìn)程地址空間分布(cont.7),VMA 為什么要VMA 3G空間太大,需要分段維護(hù) 3G空間不是被順序使用的 和可執(zhí)行文件的結(jié)構(gòu)有關(guān) 和可執(zhí)行文件的加載過程有關(guān) 解耦虛擬地址空間的使用(可以認(rèn)為加入VMA層),VMA層,操作某個虛擬地址,分段/TLB,頁表/Cache,物
27、理內(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)程之間共
28、享同樣的物理內(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)存管理 實模式 保護(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ù)隊列(task queue) 軟中斷
29、tasklet(基于軟中斷) ksoftirqd 工作隊列(work queue),內(nèi)核態(tài)虛擬地址空間(cont.1),內(nèi)核相關(guān)概念 搶占 概念 搶占就是強(qiáng)制對可調(diào)度實體進(jìn)行上下文切換 理解 必須是可調(diào)度的實體 必須有上下文切換動作 中斷 vs 搶占,內(nèi)核態(tài)虛擬地址空間(cont.2),內(nèi)核相關(guān)概念 搶占 用戶態(tài)搶占 就是進(jìn)程調(diào)度,由schedule()函數(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)用或者阻塞) 不可搶占 中斷例程 可嵌套,不可搶占 因為它不是調(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車輛贈與合同范本:公益贈與與慈善事業(yè)
- 體驗官個人年度述職述廉報告范文
- 時間管理與自我管理:高效學(xué)習(xí)的關(guān)鍵
- 2025至2030鋼鐵金融行業(yè)市場發(fā)展分析與發(fā)展前景及有效策略與實施路徑評估報告
- 2025至2030服裝加工產(chǎn)業(yè)行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 白血病健康宣教
- 小學(xué)教師信息化能力提升培訓(xùn)心得體會
- 基于動態(tài)區(qū)域混合和雙判別模型的對抗樣本遷移性研究
- 2022-2023學(xué)年安徽省宿州市泗縣八年級上學(xué)期期中語文試題及答案
- 岳陽樓記:壯麗美景與情懷抱負(fù)教學(xué)教案
- GB/T 4074.3-2024繞組線試驗方法第3部分:機(jī)械性能
- 增匯減排技術(shù)與應(yīng)用智慧樹知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學(xué)
- 2014年10月自考00730中外音樂史試題及答案含解析
- 硫酸鎂在產(chǎn)科的應(yīng)用總結(jié)
- 小米智能家居解決方案
- 心腦血管預(yù)防科普課件
- 2024年中國自動焊線機(jī)市場分析報告
- 人工智能講座
- 建設(shè)工程造價咨詢成果文件質(zhì)量標(biāo)準(zhǔn)(word)
- 中建八局分包入場安全指導(dǎo)手冊v2.0
- RH精煉工藝培訓(xùn)教材
評論
0/150
提交評論