操作系統(tǒng)xv6第三次作業(yè)_第1頁
操作系統(tǒng)xv6第三次作業(yè)_第2頁
操作系統(tǒng)xv6第三次作業(yè)_第3頁
操作系統(tǒng)xv6第三次作業(yè)_第4頁
操作系統(tǒng)xv6第三次作業(yè)_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、XV6 第三次作業(yè)信息科學技術學院 1100012736 邢捷1. 什么是臨界區(qū)?什么是同步和互斥?什么是競爭狀態(tài)?臨界區(qū)操作時中斷是否應該開啟?中斷會有什么影響?XV6 的鎖是如何實現(xiàn)的,有什么操作?xchg 是什么指令,該指令有何特性?答:臨界區(qū):對某個共享的數(shù)據(jù)結構(共享資源)進行操作的程序片段;同步和互斥:同步是指系統(tǒng)中多個進程(線程)中發(fā)生的事件存在某種時序關系,需要相互 合作共同完成一項任務,互斥是指以某種手段確保當一個進程在使用一個共享變量或文件時,其他進程不能做同樣的操作。競爭條件:兩個或多個進程讀寫某些共享數(shù)據(jù),而最后的結果取決于進程運行的精確時序,這個成為競爭條件;臨界區(qū)操

2、作時不應該開啟中斷,如果開啟中斷,就有可能改變共享區(qū)的數(shù)據(jù),從而破壞了整個程序最后獲得的結果。struct spinlock uint locked;/ For debugging: char *name; struct cpu *cpu; uint pcs10;/ Is the lock held?/ Name of lock./ The cpu holding the lock./ The call stack (an array of program counters)/ that locked the lock.;XV6 中,鎖的結構如上代碼,鎖是通過 spinlock.c 中的各個函

3、數(shù)實現(xiàn)的,包括初始化,獲取鎖,釋放鎖等操作。xchg 為一條 CPU 原子指令,指令格式為 xchg(va,newvalue),作用是交換內存地址 va 中的值和newvalue,返回值為內存地址 va 中運行 xchg 之前的值。2.基于 XV6 的 spinlock,請給出實現(xiàn)信號量、讀寫鎖、信號機制的設計方案(三選一,請寫出相應的偽代碼)答:讀寫鎖偽代碼:初始化鎖;程序運行至想要獲得鎖關閉中斷,保存寄存器值;看此時此 CPU 是否占有鎖,如果不是則運行下面;While(鎖不空閑);/鎖處于空閑狀態(tài) Xchg();更改鎖的 cpu 指向,說明哪個 cpu 獲得鎖;cs(&lk,lk-pcs

4、);獲得鎖時的函數(shù)調用棧Getcall程序運行;程序鎖If(!holding(lk)判斷當前 CPU 是否拿到這把鎖(報錯;)將鎖的 CPU將中斷打開;和函數(shù)調用棧;結束3.XV6 初始化之后到執(zhí)行 main.c 時,內存布局是怎樣的(其中已有哪些內容)?答:在 main 函數(shù)中,內存空間的初始化使用函數(shù) kinit1 完成的,創(chuàng)建了一個 4M 頁大小的空閑頁,分配一個內核頁表 entrypgdir。此時在 XV6 中,在 entry.s 文件中詳細說明的內存的布局,兩部分內存被到了物理內存上,va 的0,4M)和kernbase ,kernbase+4M同時被到了 pa 的0,4M上。4.

5、XV6 的動態(tài)內存管理是如何完成的?有一個 kmem(鏈表),用于管理可分配的物理內存頁。(vend=0 x00400000,也就是可分配的內存頁最大為 4Mb)答:kmem 的結構為StructStruct spinlock lock; Struct run *freelist;kmem;通過 kinit1,kinit2 來初始化物理內存,通過 freerange,kfree 來回收一段內存,kalloc 來分配一段內存來管理XV6 的動態(tài)內存。XV6 中的內存是以連續(xù)的段的方式進行的,通過單鏈表的方式空閑的段。Kinit1 用來初始化一段物理地址用來當做臨界區(qū),Kinit2 用來初始化一段

6、物理地址用來當做非臨界區(qū)。Freerange 函數(shù)將從 vstart 到 vstop 之間的每個頁,以 4k 為存。,都調用 kfree 來內Kree 每次回收一個頁時,將回收的頁加入到空閑頁序列中。Kalloc 進行分配空閑頁時,去除 kmem 的隊首元素并且刪除首元素。5. XV6 的虛擬內存是如何初始化的?畫出 XV6 的虛擬內存布局圖,請說出每一部分對應的內容是什么。見 memlayout.h 和 vm.c 的 kmap 上的注釋答:Vm.c 中調用mappages()函數(shù)將一段虛擬地址映射到對應長度的物理地址上,記錄在頁表中。然后通過 walkpgdir 來進行地址的轉換。0 xFF

7、FFFFFF0 xFE0000000 x8E0000000 x80000000+data0 x801000000 x800000000 x00000000虛擬地址到物理地址虛擬地址 0KERNBASE 即用戶空間(text+data+stack+heap),對應的物理內存有內核來分配虛擬地址KERNBASEKERNBASE+EXTMEM 映射到 0EXTMEM 即 I/O 地址空間 BIOS虛擬地址KERNBASE+EXTMEMdata 映射到 EXTMEMV2P(data) 內核 text 和 ro 段虛擬地址 dataKERNBASE+PHYSTOP 映射到 V2P(data)PHYSTO

8、P,內核 data 段 BSS 段和可供內核分配的內存虛擬地址 0 xfe0000000 直接映射(devices such as ioapic)其中KERNBASE = 0 x80000000;#define EXTMEM0 x100000#define PHYSTOP 0 xE000000/ Start of extended memory/ Top physical memory內核 text 段和 ro 段I/O 地址空間和 BIOS用戶空間直接映射內核 data 段,BSS 段6. 關于 XV6 的內存頁式管理。發(fā)生中斷時,用哪個頁表?一個內頁是多大?頁目錄有多少項?頁表有多少項?最

9、大支持多大的內存?畫出從虛擬地址到物理地址的轉換圖。在 XV6中,是如何將虛擬地址與物理地址映射的(調用了哪些函數(shù)實現(xiàn)了哪些功能)?答:發(fā)生中斷時,用進程的頁表;一個內存頁為 4K;一個頁目錄有 1024 項;一個頁表有 220 個頁表項;最大支持 4G 的內存;頁式內存管理單元段式內存管理單元物理地址線性地址虛擬地址物理地址通過 DRAM 中的存儲單元實現(xiàn),一個物理地址索引一個字節(jié)的物理內存。上層程序使用虛擬地址,然后分段管理器和分頁管理器的工作就是將其轉換為物理地址,并將其發(fā)送到 DRAM 中進行讀寫操作。在 XV6 中,虛擬地址和線性地址總是相同的。然后分頁管理器通過頁表完成從線性地址到

10、物理地址的映射。一個頁表中包含 220 個頁表項(PTE)。每個頁表項的結構包括 20 位的物理頁號(PPN)和一些標志位。在轉換時,分頁管理器以線性地址的高 20 位為索引在頁表中找到一個頁表項,之后用其中的物理頁號替換這 20 位,放回頁表項中,保留其低 12 位,從而得到其物理地址。在 XV6 中,利用利用 memlayout.h 中的 v2p()和 p2v()函數(shù)進行虛擬地址和物理地址的相互轉換。同時利用 mappages 函數(shù)創(chuàng)建從線性地址到物理地址映射的頁表項;利用 walkpgdir 函數(shù)返回起始地址為 va 耳朵線性地址對應的 PTE。static inline uint v2

11、p(void *a) return (uint) (a)- KERNBASE; static inline void *p2v(uint a) return (void *) (a) + KERNBASE); #define V2P(a) (uint) (a) - KERNBASE)#define P2V(a) (void *) (a) + KERNBASE)Mappages 函數(shù)static int mappages(pde_t *pgdir, void *va, uint size, uint pa, int perm)char *a, *last; pte_t *pte;a = (cha

12、r*)PGROUNDDOWN(uint)va);last = (char*)PGROUNDDOWN(uint)va) + size - 1);for(;)if(pte = walkpgdir(pgdir, a, 1) = 0) return -1;if(*pte & PTE_P) panic(remap);*pte = pa | perm | PTE_P; if(a = last)break;a += PGSIZE; pa += PGSIZE;return 0;參數(shù) va 和 pa 分別代表虛擬地址和物理地址的起始地址,size 代表這段映射的長度。計算出需要分配的虛擬地址的起始地址和最高地址

13、,然后循環(huán)每個頁頭的虛擬地址,調用walkpgdir 來得到相應的 PTE,然后寫入對應的權限。Walkpgdir 函數(shù)static pte_t * walkpgdir(pde_t *pgdir, const void *va, int alloc)pde_t *pde; pte_t *pgtab;pde = &pgdirPDX(va);if(*pde & PTE_P)pgtab = (pte_t*)p2v(PTE_ADDR(*pde); else if(!alloc | (pgtab = (pte_t*)kalloc() = 0) return 0;/ Make sure all those PTE_P bits are zero. memset(pgtab, 0, PGSIZE);/ The permissions here are overly generous, but they can/ be further restricted by the permissions in the page table/ entries, if

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論