1.45k likes | 1.6k Views
Modern Operating System Kernels. 第五 組 報告. 1. 目錄. 4.1 記憶體管理概述 4.1.1 分頁式記憶體管理 4.1.2 Segmentation 4.1.3 記憶體管理演算法介紹 4.1.4 Windows 記憶體管理概述 4.2 Windows 系統記憶體管理 4.2.1 系統位址空間初始化 4.2.2 系統位址空間記憶體管理 系統非分頁集區的管理演算法 系統分頁集區的管理演算法. 2. 4.1 記憶體管理概述. 資工 4 A 郭 濬愷. 3. 實體位址 (physical address).
E N D
Modern Operating System Kernels 第五組報告 1
目錄 • 4.1 記憶體管理概述 • 4.1.1 分頁式記憶體管理 • 4.1.2 Segmentation • 4.1.3 記憶體管理演算法介紹 • 4.1.4 Windows記憶體管理概述 • 4.2 Windows系統記憶體管理 • 4.2.1 系統位址空間初始化 • 4.2.2 系統位址空間記憶體管理 • 系統非分頁集區的管理演算法 • 系統分頁集區的管理演算法 2
4.1記憶體管理概述 資工4A 郭濬愷 3
實體位址(physical address) 系統的記憶體的真正位址 一個32位元或36位元的不帶正負號的整數 4
虛擬位址(virtual address) 虛擬記憶體讓各程序共享系統記憶體空間, 這樣系統就似乎有了更多的記憶體。 • 優點 • 擴大位址空間 • 記憶體保護 • 記憶體映射 • 公平分配記憶體 • 虛擬記憶體共享 5
邏輯位址(logical address) 包含兩個個部分:區段(segment)和偏移(offset) 邏輯位址的實際位址是區段基址加上偏移量 7
分頁式記憶體管理 資工四A 黃柏皓 965002019 9
Intel x86 Address Translation Segmentation Paging Logic Address Virtual Address Physical Address 10
Introduction • 虛擬位置 實體位置 • page page frame • 連續 不一定 11
Virtual Address Form • 32bits • Intel x86 Index Offset 分頁表目錄Index 分頁表Index Offset 11 21 22 31 12 0 12
Address Translation(Intel x86) 10 10 12 二級分頁表結構 優點: 節省page table 缺點: 效能降低 CR3 分頁表目錄Index(PDE) 分頁表Index(PTE) Offset x1024 ………… …… x1024 x1024 13
TLB(Translation look-aside buffer) • 快取位址轉譯資訊 • 成功 : 直接取出儲存的位址資訊(TLB) • 失敗 : 兩次存取記憶體(TLB,Page table) • 記憶體存取有區域性 • 硬體處理 • 切換CR3暫存器 • invlpg指令 (Intel x86 Pentium Pro) 14
Address Translation • Virtual→physical • Page fault問題 • 多對一 • 4G VM / 1G PM • 共用問題 • 寫入 CPU Data VA TLB Memory TLB miss Program Space Page Table Page fault Disk 16
Address Translation • Page fault • Random • LRU • 寫入記憶體 • Write-through • Write-back 17
PAE(Physical Address Extension) • 三級分頁表 • 分頁表目錄、分頁表 每一個Entry大小 :64 bits • 每個page(分頁目錄、分頁表)只能存放512項 • 實體位置描述 :20bits→24bits(包含12個flag bits) • 可支援:2^(24+12) bits = 2^36 bits = 64 GB (windows : 使用26bits表示→256GB) 18
PAE-Address Translate 64bits 24bits PA Offset 分頁表目錄指標Index 分頁表目錄Index(PDE) 分頁表Index(PTE) x512 x512 20 11 x512 30 29 21 12 0 31 … … 4*512 4*512*512 … 4 19
PAE Example(pae.asm) push ebx push esi movebx, [esp] + 16 ; ebx = NewPteContentslowpart movecx, [esp] + 20 ; ecx = NewPteContentshighpart movesi, [esp] + 12 ; esi = PtePointer movedx, [esi] + 4 moveax, [esi] ; edx:eax = OldPteContents lock cmpxchg8b qword ptr [esi] ; compare and exchange jnz short swapagain ; if z clear, exchange failed pop esi pop ebx edx eax esi ebx esi esi+4 edx ecx eax ebx ecx ebx 20
PAE Summary • 沒有增加virtual memory大小 • 增加可支援的physical memory • Windows(64bits in Intel x64): • 48bits Virtual Mem → 40bits Physical Mem(1TB) 21
Segmentation 資工四A 許木炘 22
Logic address 邏輯位址 Segment(節區) • a16-bitsegment selector(segment identifier) Offset(偏移量) • a32-bitoffsetwithin the segment identified by the segment selector 23
segmentation register • 為了讓segment selector能被快速取出 ->segmentation register cs: 指向 code segment # (cpl 0 or 3) ss: 指向stack segment ds: 指向 data segment. es,fs, and gs: 一般用途,可以參用到任何data segment 25
Segment Descriptors • 每個segment可用一個8byte的descriptor表示,每個segment descriptor會儲存在 ->GDT(global descriptor table) 或 ->LDT(local descriptor table) 26
Segment Descriptors • Base field (32): the linear address of the first byte of the segment. • Ggranularity flag (1): 0 (byte); 1 (4K bytes). • Limitfield (20). • Ssystem flag (1): 0 (system segment); 1 (normal segment). • Type field (4): segment type and its access rights. • DPL(Descriptor privilege level) (2): • Segment-present flag • D/Bflag • Reserved bit • AVLflag 27
常用的segment descriptor • Code Segment Descriptor. • Data Segment Descriptor. • P.S.: Stack Segments are implemented by means of Data Segment Descriptors. • Task State Segment Descriptor (TSSD) • A TSSD describes a Task State Segment (TSS) which is used to store the contents of a process registers. • Local Descriptor Table Descriptor (LDTD) 28
Segment Registers • Each segment register contains a segment selector. • 13-bit index • 1-bit TI (Table Indicator) flag. • 2-bit RPL (Requestor Privilege Level) • The cs register’s RPL also denotes the current privilege level of the CPU. • 0 represents the highest privilege. 0 represents the kernel mode and 3 represents the user mode. • Associated with each segment register is an additional nonprogrammable register which contain the segment descriptor specified by the segment selector 30
Locate the Segment Descriptor Indicated by Segment Selector • address=(gdtr/ldtr)+ index*8. • GDT的第一個欄位永遠試設為 0. • 能儲存在GDT的節區描述器最大的數目為81912^13-1 32
記憶體管理演算法介紹 34
就本質而言,記憶體管理演算法可以分為兩大類就本質而言,記憶體管理演算法可以分為兩大類 • 點陣圖標記法(Bitmap) • 空間串列法(AV List) 35
點陣圖標記法(Bitmap) • 假設要分配的記憶體大小為 N bytes,而一個blocks為M bytes,並且符合下列等式N=K*M也就是說現在共用K個blocks要做動態管理! • 點陣圖標記法:使用K個Bits的Bitmap來記錄這個K個blocks的使用情形 • 0:free • 1:Allocated 36
點陣圖標記法(Bitmap) • 分配:根據請求的大小確定需要多少個連續memory blocks,然後掃Bitmap是否存在這樣的連續空間,若有將Bitmap中對應的連續bits設為1 • 釋放:指定要釋放的記憶體起始位址和大小,將bitmap對應的連續bits設為0 37
點陣圖標記法(Bitmap) • 此法實作較簡單,但須額外的記憶體負擔,通常為 其中 • 若請求的記憶體大小不為M的倍數則會有空間浪費,平均而言會有 M/2 bytes浪費! • 每次分配需要掃瞄bitmap,因為時間複雜度為O(K) 38
空間串列法(AV List) • 首先建立一個空閒串列(Available list) • 在初始時,整個區塊被當作一個大的空閒區塊加入到空閒串列(Available list),每當記憶體管理員收到分配請求便從AV list中尋找適合空閒區塊 39
空間串列法(AV List) • 尋找適合的空閒區塊的方法共有以下幾種 • first-fit:將list中第一個找到的空閒區塊分配出去 • best-fit:從list中找到最接近要求的記憶體大小之區塊,並將其分配 • worst-fit:從list中找最大空閒區塊將其分配 • next-fit:從list目前的位置往後掃瞄,找到第一個符合請求的空閒區塊 40
First Fit P3 25K P1 P4 200K P2 200K • 缺: • 在串列的前端會產生許多極小的可用空間 (被配置機率很低) • 可用Next-Fit來解決 42
Best Fit P3 25K P2 100K P1 50K P4 250K 缺: 需搜尋完全部串列,才可找到最佳的配置區塊 產生更大量的fragmentation 43
Worst Fit 100K P2 100K 200K P1 P3 P4 25K 44
伙伴系統(Buddy System) • 以2的冪次作為memory的配置單位,假設總memory size為 則宣告 AV[K]的list陣列,陣列元素 AV[i]記錄了大小為的空間串列開頭 • 配置:假設要配置的空間大小為n則求出>n 中i的最小值,並去av list中尋找k[K]不為空串列,若k=i則自AV[K]中取出一區塊並配置,若K>i則自AV[k]中取出一個block將分為兩塊(大小皆為)將其中一塊加入AV[K-1]的串列中,另一塊持續切割至大小為時再將其分配 45
假設有一個記憶體配置要求為3Blocks,則需要之block,則此時檢查AV[2],若不為NULL則配置,否則往下尋找AV[3],直到不為NULL,切割直到大小相符!假設有一個記憶體配置要求為3Blocks,則需要之block,則此時檢查AV[2],若不為NULL則配置,否則往下尋找AV[3],直到不為NULL,切割直到大小相符! 46
伙伴系統(Buddy System) • 分配和回收的時間複雜度皆為O(log n) • 但依然存在外部分散 47
分散(fragmentation) • 分散(fragmentation)共分為兩種 • 外部分散(external fragmentation) • 在連續配置的方法下每個free block皆不夠但全部的free block加總後可以滿足要求的空間,然後因為不連續所以不能滿足此要求,便稱為外部分散(以上介紹的演算法皆存在此種問題) • 內部分散(internal fragmentation) • 配置出去的空間超過要求的size,兩者之間的差值無 法被有效利用,形成浪費稱為內部分散 48
分頁式記憶體管理系統(Page memory Management) • 為了解決記憶體的外部分散,我們使用了分頁式的記憶體方法,而當實體的記憶吃緊時,我們變要選擇哪些的process該swap out到disk中哪些該寫入實體記憶中,而且這個管理方法就稱為 頁面替換演算法(Page Replacement Algorithm) 49
頁面替換演算法(Page Replacement Algorithm) • 最佳頁面替換演算法(The Optimal Page Replacement Algoritm) • NRU(The Not Recently Used Page Replacement Algortim) • FIFO(The First-In First-Out Page Replacement Algorithm) • 第二次機會替換演算法(The Second Chance Page Replacement Algorithm) 50