第一篇:西南交通大學操作系統期末復習總結
org 07c00h
;這是告訴編譯器將這段程序加載到內存偏移地址0x7c00處
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $ DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,16
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h
ret BootMessage: db “hello,os world!” times 510-($-$$)db 0 dw 0xaa55 這是第一章的程序,從中可以看出起始位置是07c00h,程序的結束標志是0xaa55。$表示當前行被匯編后的地址。
$$表示一個節的開始處被匯編后的地址。
那么$-$$表示本行距離程序開始處的相對距離。1.對于程序的說明
實際上以上程序只是一個引導扇區(Boot Sector),不是完整的OS,當計算機電源被打開時,它會加電自檢(POST),然后尋找啟動盤,如果是從軟盤啟動,計算機就會檢查軟盤的0面0磁道1扇區,如果發現它以0xaa55結束,并且包含了少于512字節的執行碼,那么BIOS認為它是一個引導扇區。
一旦發現了引導扇區,就將這512字節放入內存地址0000:7c00處,然后跳轉并且移交控制器。
2.制作軟盤過程
本身這段程序是boot.asm,是匯編程序,然后使用工具nasm將其轉換為boot.bin, 然后使用軟盤絕對扇區讀寫工具將這個文件寫到一張空白軟盤的第一個扇區。
(.bin文件的說明:*.bin是Foxbase定義的一種特殊的可執行文件,它同DOS的.com文件類似,區別在于.com文件是從100H開始運行的,而.bin從0開始,.bin的調用參數保存在DS:BX中。如果在Foxbase中,你可以使用Call命令調用。如果你在VFP中,將無法直接調用,只能使用Debug反匯編,分析其功能,然后重新編寫.)3.方括號[]的使用
在NASM中,任何不被方括號[]括起來的標簽或變量名都被認為是地址,訪問標簽中的內容必須使用[]。
3.1認識保護模式 1.對于這一節的程序的理解 數據區:
先是定義了一些描述符(LABEL_GDT,LABEL_DESC_CODE32,LABEL_DESC_VIDEO),然后定義了GdtPtr,它是一個6字節的數據結構,前兩字節表示GDT的界限(即描述符的界限),后4字節表示GDT的基地址(GdtPtr就是用來描述GDT的,會用一個寄存器GDTR來保存它的值)。然后定義兩個選擇子,分別指向已定義的描述符。代碼區:
初始化32位代碼段描述符,為加載GDTR作準備,加載GDTR: lgdt [GdtPtr],然后是關中斷:cli,(保護模式下中斷處理的機制是不同的,不關中斷會出錯)打開地址線A20,然后將cr0的PE位置為1(0:實模式,1:保護模式),準備切換到保護模式,跳轉到保護模式中
jmp dword SelectorCode32:0
2.Descriptor是一個宏,它是一個8字節的數據結構。三個描述符組成了一個結構數組。3.[BITS 16]說明這是一個16位的代碼段,而[BITS 32]是32位的代碼段。程序中的知識點 要搞清楚的有:
GDT是一個索引,指向一個數據結構的表項。GDT作用:提供段式存儲機制。程序對GDT做了什么? jmp SelectorCode32:0?
GDT
1.在保護模式下,CPU有著巨大的尋址能力(保護模式下為4G,實模式下為1M),并為強大的32位操作系統提供了更好的硬件保障。
2.在保護模式下,段值僅僅變成了一個索引,這個索引指向一個數據結構的一個表項,表項中定義了段的起始地址、界限、屬性等內容。這個數據結構就叫GDT,表項就叫描述符。3.描述符分為代碼段和數據段描述符,還可以分為系統段描述符和門描述符。4.選擇子
TI位 0:GDT,1:LDT 當TI和RPL都為0時,選擇子就變為了偏移。5.“段:偏移”經過段機制轉化為“線性地址”,而不是物理地址。
JMP
1.對于cr0的設置是實模式和保護模式的關鍵
2.jmp dword SelectorCode32:0的作用是將描述符DESC_CODE32對應的段的首地址。
3.為什么那兒有一個dword呢?(沒有dword的話編譯出來是16位的代碼,而目標地址是32位的。)
進入保護模式的主要步驟: 1.準備GDT 2.用lgdt加載gdtr 3.打開A20 4.設置cr0的PE位 5.跳轉,進入保護模式
描述符的屬性
1.P位——存在位。P=1,表示在段內存中存在;P=0則在內存中不存在。2.DPL位——描述符特權級。有0,1,2,3級,數字越小級別越大
3.S位——指明描述符是數據段/代碼段(s=1),還是系統段/門描述符(s=0)
3.2保護模式進階 在這一節中,首先在上一節程序的基礎上改寫:(1)跳入保護模式之后再次跳回實模式(2)讀寫大地址內存 對于讀大地址內容,它是先讀,然后再寫,然后再讀,以此來判斷是否可以讀寫大地址內存。(注意:程序中調用子程序時要保存edi的值,要對其進行壓棧,所以要用到堆棧,那么在程序中也要有堆棧的描述符和堆棧的選擇子。)
從保護模式跳轉到實模式時要復雜一些(從實模式到保護模式只要一個跳轉就可以了),我們不能直接從32位的代碼段中返回實模式,只能從16位代碼段中返回,因為無法從32為代碼段返回時cs高速緩存寄存器中的屬性符合實模式的要求。所以增加一個Normal描述符,在返回實模式前把對應的選擇子加載到ds、ss和es.跳回實模式之后要做的事情:用Normal描述符的選擇子加載到ds、ss和es,值cr0的PE=0,關閉A20地址線,開中斷STI。
LDT:局部描述符表
1.LDT與GDT差不多,一個是全局的,一個是局部的。在代碼中也要有一個LDT的描述符和選擇子,它的初始化有所不同,有兩步:(1)初始化LDT在GDT中的描述符,(2)初始化LDT中的描述符。其中,第二步與GDT類似,多了一個在GDT中定義LDT。2.LDT與GDT的區別就在于選擇子中TI位(0為GDT,1為LDT)3.在使用LDT時需要先用lldt指令加載ldtr(lgdt加載gdtr)4.使用LDT的目的:多任務處理。5.保護模式“保護”的含義
(1)描述符中的段基址和段界限定義了一個段的范圍,對超越段界限之外的地址的訪問是被禁止的,這是對段的一種保護。
(2)有點復雜的段屬性作為對一個段各個方面的定義規定和限制了段的行為和性質 以上兩點是靜態的
(3)在涉及特權級的每一步中,處理器都會對CPL,DPL和RPL等內容進行比較,這種比較是動態的。
特權級概述 1.常規保護模式錯誤
2.將Level0叫做內核,Level1、Level2叫做服務,Level3叫做應用程序。3.CPL、DPL、RPL CPL 是當前執行的程序或任務的特權級。通常情況下,CPL等于代碼所在段的特權級,當程序轉移到不同特權級的代碼段時,處理器將改變CPL。當處理器訪問一個與CPL特權級不同的一致代碼段時,CPL不會被改變。
DPL 表示段或者門的特權級,下面是各種類型的段或者門的情況
數據段:高級->低級,相同級別之間
非一致代碼段:相同級別之間
調用門:與數據段一致
一致代碼段和通過調用門訪問的非一致代碼段:低級->高級,相同級別之間
TSS(Task-State Stack:任務狀態棧):與數據段一致 RPL 通過選擇子的第0位和第1位表現出來的。操作系統過程往往用RPL來避免低特權級應用程序訪問高特權級段內的數據。
4.不同特權級代碼之間的轉移
程序從一個代碼轉移到另一個代碼之前,目標代碼的選擇子將會被加載到cs中。通常使用jmp和call指令來實現轉移,轉移分為兩大類:(1)直接轉移
(2)間接轉移
特權級轉移
1.如果目標是非一致代碼段,要求CPL必須等于目標代碼段的DPL,同時要求RPL小于等于DPL。如果目標是一致代碼段,要求CPL大于或者等于目標段的DPL,RPL此時不做檢查。這種直接轉移是非常有限的,為了實現不同特權級之間的轉移,可以使用門描述符或者TSS。2.門是一種描述符,它由一個選擇子和一個偏移所指定的線性地址。
門的種類:調用門,中斷門,陷阱門,任務門。
作用:實現不同特權級之間的轉換。
在原程序的基礎上做的一些工作:定義門描述符及其選擇子,初始化描述符,使用call指令來實現跳轉到已經定義好的通過門描述符能夠跳轉到的目標段。
門實際上是一個入口地址,只不過增加了若干的屬性而已。3.門轉移總結:
通過調用門和call指令,可以實現從低特權級到高特權級的轉移,無論目標代碼是一致的還是非一致的。我們的目標是從低到高,在從高到低,那么下面的任務就是如何從高到低了。4.長的和短的jmp和call的區別:對jmp而言,短跳轉對應段內,長跳轉對應段間; call要復雜一些,因為call指令會影響堆棧。5.在使用call指令時,由于某些原因堆棧發生了切換,也就是說call指令執行前后的堆棧已經不是同一個。Intel提供了一種機制,將堆棧A的諸多內容賦值到堆棧B中。事實上,由于每一個任務最多可能在4個特權級間轉移,所以,每個任務實際上需要4個堆棧,此時要用到一種數據結構,即TSS(Task-State Stack)。
6.綜合:使用調用門的過程實際上分為兩個部分,一部分是從低特權級到高特權級,通過調用門和call指令來實現;另一部分則是從高特權級到低特權級,通過ret指令來實現。7.用程序實現從ring0到ring3
在這里我們需要在原程序的基礎上增加ring3的代碼段描述符和堆棧段描述符,并添加響應的選擇子,做好工作后,執行一下程序:
push SelectorStack3
push TopOfStack3
push SelectorCodeRing3
push 0
retf 為什么會進入ring3呢?
原來程序是執行在ring0的,當使用retf指令后,堆棧將被自動切換到ring3的堆棧段,執行ring3的代碼,也就完成了從高特權級項低特權級的轉換。
8.從高特權級項低特權級的轉換和從低特權級項高特權級的轉換都需要用到TSS。
3.頁式存儲
1.頁的概念
頁是一塊內存,在80386中,大小固定為4K。在Pentium中,大小可以是2MB或4MB,并且可以訪問多余4GB的內存。2.邏輯地址、線性地址、物理地址
在未打開分頁機制的時候,邏輯地址經過分段機制直接轉換成物理地址。
打開分頁機制后,邏輯地址經過分段機制先是轉換成線性地址,線性地址再經過分頁機制轉換成物理地址。3.分頁的目的
實際上使用分段機制已經提供了很好的保護機制,分頁的目的在于實現虛擬存儲器。
用代碼啟動分頁機制 代碼
PageDirBase equ 200000h;頁目錄開始地址: 2M PageTblBase equ 201000h;頁表開始地址: 2M+4K。。
LABEL_DESC_PAGE_DIR: Descriptor PageDirBase, 4095, DA_DRW;Page Directory LABEL_DESC_PAGE_TBL: Descriptor PageTblBase, 1023, DA_DRW|DA_LIMIT_4K;Page Tables。。
SelectorPageDir SelectorPageTbl equ LABEL_DESC_PAGE_DIRLABEL_GDT。。
;啟動分頁機制 SetupPaging:
;為簡化處理, 所有線性地址對應相等的物理地址.;首先初始化頁目錄
mov ax, SelectorPageDir;此段首地址為 PageDirBase
mov es, ax mov ecx, 1024;共 1K 個表項
xor edi, edi xor eax, eax mov eax, PageTblBase | PG_P | PG_USU | PG_RWW.1: stosd
.2:
add eax, 4096 loop.1;為了簡化, 所有頁表在內存中是連續的.;再初始化所有頁表(1K 個, 4M 內存空間)mov ax, SelectorPageTbl;此段首地址為 PageTblBase mov es, ax mov ecx, 1024 * 1024;共 1M 個頁表項, 也即有 1M 個頁 xor edi, edi xor eax, eax mov eax, PG_P | PG_USU | PG_RWW stosd add eax, 4096;每一頁指向 4K 的空間 loop.2 mov eax, PageDirBase mov cr3, eax mov eax, cr0 or eax, 80000000h mov cr0, eax jmp short.3.3: nop ret;分頁機制啟動完畢---------------------------代碼過程說明:
首先定義頁目錄項(PDE)和頁表項(PTE)的描述符和選擇子,然后將es:edi指向頁目錄表的開始。經過1024個循環之后,將所有PDE賦值完,他們屬性相同,都是指向可讀可寫的用戶級別頁表。然后將es:edi指向頁表的開始。經過1024*1024個循環,將所有PTE賦值完,他們屬性相同,都是指向可讀可寫的用戶級別頁。下面就是讓cr3(cr3是一個指向PDE的頁目錄表,又叫PDBR(Page-Directory Base Register))指向頁目錄,然后設置cr0的PG位(cr0的PG位為最高位,為1表示分頁機制啟動,為0表示未啟動),這樣,分頁機制就完成了。
關于PDE、PTE的一些說明
1.P位——存在位。P=1表示在物理內存中存在;P=0表示不存在,如果處理器視圖訪問此頁,那么將會產生頁異常。
2.A位——指示頁或頁表是否被訪問
3.處理器會將最近常用的頁目錄和頁表項保存在一個叫做TLB(轉移后背緩沖區)的緩沖區中,只有當TLB中找不到被請求也的轉換信息時,才到內存中去找,這樣加快了速度。
4.當頁目錄或頁表項被更新時,OS會馬上讓TLB無效。當cr3被加載時,所有TLB都會自動失效,除非頁或頁表的G位被設置。
克勤克儉用內存 這部分的目的:
在前面的是4KB->4MB->4GB,但是內存也不一定那么大,如果內存本身就很小,幾十MB,那么你的頁表(4MB)就占了很多,所以有必要知道內存大小。獲取內存大小的方法:使用中斷15h 我們想得到內存的信息,那么采用的方法是將得到的描述信息保存到一段緩沖區中。因為一個ARDS的大小是20字節,那么這里定義一個256字節的緩沖區(實際上也是不確定其大小的)。然后待會兒可以顯示出來。得到內存信息代碼: _MemChkBuf: times 256 db 0
;內存緩沖區。。
;得到內存數
mov ebx, 0 mov di, _MemChkBuf.loop: mov eax, 0E820h mov ecx, 20 mov edx, 0534D4150h int 15h jc LABEL_MEM_CHK_FAIL
;該語句就是判斷是否有進位
add di, 20 inc dword [_dwMCRNumber];用于記錄循環次數,也就是地址范圍描述符結構的個數
cmp ebx, 0 jne.loop jmp LABEL_MEM_CHK_OK LABEL_MEM_CHK_FAIL: mov dword [_dwMCRNumber], 0 LABEL_MEM_CHK_OK: 代碼說明:地址范圍描述符(ARDS)的大小就是20個字節,所以di每次增加20,在代碼中es:di的賦值似乎是BIOS自動填充的,沒有手動填充的痕跡。跳出循環的條件是ebx=0或者CF沒有進位(CF=0)1.關于ARDS的type的說明
1)
AddressRangeMemory
可以使用
2)
AddressRangeReserved 不可以使用
2.我們處理得到內存的大小外,還得到了可用內存的分布信息。并且內存的分布可能是不連續的。
3.在得到內存大小后,將該值除以4MB,就可以得到PDE的個數,將PDE初始化,也就是將1024替換掉。然后是要初始化PTE,只需要將PDE的個數*1024即可。
進一步體會分頁機制 在這里我們要實現:先執行某個線性地址處的模塊,然后通過改變cr3來轉換地址映射關系,再執行同一個線性地址處的模塊,由于地址映射已經改變,所以兩次得到的應該是不同的輸出結果。
其實分頁機制的好處還有,程序使用的都是線性地址,而不是直接的物理地址。此時OS為應用程序提供了一個不依賴于硬件(物理內存)的平臺。
在3.3中,是在實模式下得到的內存信息,然后在保護模式下將其顯示出來。而在保護模式下,原來的中斷向量表由IDT(Interrupt Descriptor Table,中斷描述符表)代替,IDT中的描述符可以是以下三種之一:(1)中斷門描述符(2)陷阱門描述符(3)任務門描述符
IDT的作用是將每一個中斷向量和描述符對應起來。
在前面使用調用門是通過call指令,這里使用中斷門和陷阱門是使用int指令。
3.4中斷和異常機制
1.中斷:中斷通常在程序執行時因為硬件而隨機發生,他們通常用來處理處理器外部的事件,比如外圍設備的請求。軟件通過執行int n指令也可以產生中斷。(軟硬件都可以)2.異常:異常通常在處理器執行指令過程中檢測到的錯誤時發生,比如遇到除零的情況。(多指軟件方面)
問題:處理器可以對何種類型的通知作出反應。接到某種通知時做出何種反應。
3.Fault(錯誤)、Trap(陷阱)和Abort(終止)三種類型的異常
①Fault是一種可以被更正的異常,而且一旦被更正,程序可以不失連續性地繼續執行。當一個Fault發生時,處理器會把產生fault指令之前的狀態保存起來。異常處理程序的返回地址將會是fault的指令,而不是其后的那條指令。
②Trap是一種在發生trap指令執行后立即被報告的異常,他也允許程序或任務不失連續性地繼續執行。異常處理程序的返回地址將會是產生trap的指令之后的那條指令。
③Abort是一種不總是報告精確異常發生的位置的異常,它不允許程序或任務繼續執行,而是用來報告嚴重錯誤的。
寫一個硬件中斷程序,所做的工作有兩點:(1)設置8259A
使用OCW1、OCW2、OCW3的情況,一是屏蔽或打開外部中斷
二是發送EOI給8259A以通知它中斷處理結束(2)建立IDT(這部分跟建立GDT或LDT差不多)
時鐘中斷實驗
1.外部可屏蔽中斷的發生受到兩個因素的影響,只有當IF=1,并且IMR(OCW1)位為0時才發生。
2.從中斷或異常返回時必須使用指令iretd,它與ret相似,只是它同時會改變eflags的值。iretd執行時Error Code不會被自動從堆棧中彈出,所以,執行它之前要先將它從棧中清除。3.中斷門和陷阱門的區別:中斷門會影響標志IF(由中斷門引起的中斷會復位IF,因為可以避免其他中斷干擾當前中斷的處理。隨后的iret指令會從堆棧上恢復IF的原值)。陷阱門不會改變IF。
保護模式下的I/O
1.對I/O的限制是保護模式的內容,可以通過兩個方面的限制來實現:IOPL和I/O許可位圖 2.IPOL位于eflags的12、13位
指令in,ins,out,outs,cli,sli只有在CPL<=IPOL時才能執行,這些指令叫做I/O敏感指令,如果低特權級的指令試圖訪問這些I/O指令將會導致常規保護錯誤。可以改變IPOL的指令有popf和iretd,只有運行在ring0的程序才可以將其改變。popf同時可以用來改變IF。3.I/O許可位圖必須以0FFH結尾。
3.6保護的種類
1.在GDT、LDT以及IDT中,每一個描述符都有自己的界限和屬性等內容,是對描述符所描述對象的一種限定和保護。
2.分頁機制中的PDE和PTE都含有R/W和U/S位,提供了頁級保護。3.頁式存儲的使用使應用程序的是線性地址空間不是物理地址,于是物理內存就被保護了起來。
4.中斷不再像是模式下一樣使用,也提供特權檢驗等內容。5.I/O指令不再隨便使用,于是端口被保護了起來。
6.在不同的特權級之間轉換時,CPL、DPL、RPL、IOPL等內容會進行非常嚴格的檢驗。
4突破512字節限制
一個OS從開機到開始運行,大致經歷了以下階段:
引導——>加載內核如內存——>跳入保護模式——>開始執行內核
而引導扇區(Boot Sector)只有512字節,要完成以上全部過程是不行的,大小受到了限制。該怎么辦呢?我們可以采用用Boot Sector來引導把Loader加載入內存并且把控制權交給它,讓它來實現加載內核等的工作。
FAT12 1.FAT12是文件系統,磁盤分層:
扇區:磁盤上的最小數據單元
簇:
一個或多個扇區
分區:通常指整個文件系統
2.引導扇區位于FAT12的第0個扇區,在這個扇區中有一個很重要的數據結構叫BPB。
引導扇區中記錄了FAT12的信息,比如BPB_RootEntCnt表示根目錄文件數最大值。
還有就是每扇區字節數,每簇扇區數等。
3.規定Loader位于根目錄區,根目錄區的每一個條目占用32字節,有文件名、屬性、大小等信息,那么找Loader就要到根目錄區中去一個一個的找。4.數據區的第一個簇的簇號是2,而不是0或1。
5.根目錄區的開始扇區號為19(扇區大小可以看BPB_BytsPerSec,書上是512字節),因為根目錄區的大小是不確定的,那么數據區的開始位置也是不確定的。
數據區的開始扇區號=19+根目錄區的大小
根目錄區的大小=(BPB_RootEntCnt*32+BPB_BytsPerSec-1)/BPB_BytsPerSec
從中可以看出,根目錄區是保存文件的屬性信息,而數據區是保存文件的內容信息的。6.現在有一個問題,那就是既然通過上述方法都是可以找到文件及其內容的,那又何必要
什么FAT項呢!?(實際上,對于小于512字節的文件來說,上述方法就可以解決了,而對于大于512字節的文件來說,我們需要FAT表來找到所有的簇(扇區)。)7.FAT的結構——每12位稱為一個FAT項,代表一個簇。第0個和第1個不實用,與數據區對應。
8.FAT值的說明
FAT項的值代表的是文件的下一個簇號,但是如果值大于或等于0xFF8,則表示當前簇已經是本文件的最后一個簇。如果值為0xFF7,表示它是一個壞簇。
加載Loader入內存 1.軟盤容量的由來
2(共有兩面,磁頭號0和1)*80(每面有80個磁道,磁道號0~79)*18(每個磁道有18個扇區)*512(每個扇區的字節)=1.44MB。2.找Loader需要知道的一些循環(1)根目錄區的扇區數目
(2)由一個扇區的大小和根目錄的文件大小確定的文件個數(3)Loader.bin的長度:11 3.當我們找到Loader.bin之后,需要用扇區號來做兩件事:(1)把起始扇區裝入內存中
(2)通過起始扇區的內容來找到FAT項,從而找到Loader占用的其余所有扇區。
4.由于一個FAT項可能跨越兩個扇區,所以在代碼中一次總是讀兩個扇區,以免在邊界發生錯誤。
5.已知簇號為x,求從引導扇區開始算起是第幾個扇區的方法。
x+RootDirSectors+19-2,RootDirSectors代表根目錄區的扇區數,在前面已經求出,減2是因為簇號是從2開始的。
注意:這一章有兩個運算,一個是求根目錄去所占的扇區數(已知根目錄區文件最大數),還有一個就是已知簇號求扇區號。
這一章遺留的問題
在這一章,實際上我們做的工作就是找到Loader并且執行它(可以把第三章中保護模式 的內容作為Loader,這樣它會更高級一些),但是它并不是操作系統內核,我們希望的是 通過Loader來加載內核并且將內核放入內存中,而且內核開始執行的時候已經是在保護模式下了,所以,Loader要做的事情至少有兩件:(1)加載內核入內存(2)跳入保護模式 5.1在linux下用匯編寫hello world 當有一個hello.asm文件的時候,將其在Linux下運行。
當然,我們希望的是運行elf格式的可執行文件,所以需要進行如下處理: ls hello.asm nasm-f elf hello.asm-o hello.o(-f elf指定了輸出文件的格式為ELF格式)ls hello.asm hello.o ld-s hello.o-o hello ls
hello.asm hello.o hello
5.3ELF ELF文件的結構如下
ELF頭(ELF header)
程序頭表(Program header table)
節(Sections)
節頭表(Section header table)
實際上,只有ELF頭的位置是固定的,其余部分的位置、大小等信息由ELF頭中的信息的各項值來決定。Program header描述的是一個段在文件中的位置、大小以及它被放進內存后所在的位置和大小。
5.4從loader到內核
用Loader加載ELF
1.找內核實際上和找Loader很像,都是尋找文件、定位文件以及讀入內存。2.找Loader和內核的比較
文件頭位置
文件內容位置 Loader
根目錄區
數據區 Kernel
程序頭表
書上沒說
3.新函數KillMotor:作用是關閉軟驅馬達,否則軟驅的燈會一直亮著。
跳入保護模式
這一部分的目的就是將那個簡單的內核程序換成能在保護模式下運行的程序,這樣程序變得更高級了。
1.Loader是由我們自己加載的,段地址已經被確定為BaseOfLoader,也就是說在Loader中出現的標號(變量)的物理地址可以得出。
Boot中也需要,它可以確定Loader的物理地址(09000h,0100h)
Loader中也需要,它可以確定Kernel的物理地址(剛開始是08000h,0h;后來整理后為03000h,0h)
在以上基礎上打開分頁機制 1.首先要獲取內存信息,然后顯示內存信息(內存可用的大小用dwMemSize(保護模式下)來保存),然后是啟動分頁機制的函數(SetupPaging)顯示內存信息并且啟動分頁機制
push szMemChkTitle
call DispStr
add esp,4
call DispMemInfo
call SetupPaging
重新放置內核
1.以前我們讓程序頭表(Program header table)對等映射到內存中,即:
memcpy(p_vaddr,BaseofLoaderPhyAddr+p_offset,p_filesz),其中p_vaddr表示程序頭表描述的段在內存中的位置,p_offset表示段在文件中的偏移,p_filesz表示段的大小。但是,對等映射可能超出了內存的范圍(以前有ld生成的可執行文件中p_vaddr的值總是一個類似與0x8048XXX的值,超過了128MB的0x8000000),那么有兩種方法可以采取:
(1)修改頁表讓0x8048XX映射到更低的地址
(2)修改ld指令讓它生成可執行代碼中p_vaddr值的大小。
2.我們將0x8048XX改為0x30400,也就是說程序的入口地址變成了0x30400了,ELF頭等信息會位于0x30400之前。但是為什么會是0x30400呢?這就要考慮到內存的分布情況。內存中400h~500h存儲的是BIOS的參數區,顯然不能占用。我們只能使用的是0500h~09FBFFh這一段,但是30400離500還是有點遠的,這樣做的目的是為了調試方便。因為大多數的DOS都不占用0x30000以上的內存地址,把內存加載到這里,即使是在DOS下調試也不會覆蓋掉DOS內存。
5.5擴充內核
在5.4中esp、GDT等內容還在Loader中,我們要把它們放到內核中才好。切換堆棧和GDT的代碼: SELECTOR_KERNEL_CS equ 8;導入函數 extern cstart;導入全局變量 extern gdt_ptr [SECTION.bss] StackSpace resb 2 * 1024 StackTop:;棧頂 [section.text];代碼在此
;把 esp 從 LOADER 挪到 KERNEL mov esp, StackTop;堆棧在 bss 段中
sgdt [gdt_ptr];cstart()中將會用到 gdt_ptr call cstart;在此函數中改變了gdt_ptr,讓它指向新的GDT lgdt [gdt_ptr];使用新的GDT;lidt [idt_ptr] jmp SELECTOR_KERNEL_CS:csinit csinit:;“這個跳轉指令強制使用剛剛初始化的結構”——<
popfd;Pop top of stack into EFLAGS hlt 代碼說明:函數cstart()首先把位于Loader中的原來的GDT全部賦值給新的GDT,然后把gdt_ptr中的內容換成新的GDT的基地址和界限。
第二篇:計算機操作系統期末簡答題總結
1、什么是進程?什么是線程?進程與線程有何區別?
答:(1)進程是具有獨立功能程序在某個數據集合上的一次執行過程。(2分)
(2)線程是進程內的一個執行實體或執行單元。(2分)
(3)進程和線程的區別:(a)不同進程的地址空間是獨立的,而同一進程內的線程共享同一地址空間。一個進程的線程在另一個進程內是不可見的。(b)在引入線程的操作系統中,進程是資源分配和調度的單位,線程是處理機調度和分配的單位,資源是分配給進程的,線程只擁有很少資源,因而切換代價比進程切換低。(2分)
2、什么是死鎖?產生死鎖的原因和必要條件是什么?
答:(1)在多道程序系統中,當一組進程中的每個進程均無限期地等待被改組進程中的另一進程所占有且永遠不會釋放的資源,此時的系統處于死鎖狀態,簡稱死鎖。(2分)
(2)死鎖產生的原因:(a)系統提供的資源有限;(b)進程推進順序不當。(2分)
(3)產生死鎖的必要條件:互斥條件、不可剝奪條件、請求和保持條件、循環等待條件。
3、說明作業調度,中級調度和進程調度的區別,并分析下述問題應由哪一級調度程序負責。
(1)在可獲得處理機時,應將它分給哪個就緒進程;
(2)在短期繁重負載下,應將哪個進程暫時掛起。
答:(1)作業調度用于決定把外存中處于后備隊列中的哪些作業調入內存,并為它們創建進程,分配資源,然后將新創建進程插入就緒隊列;中級調度負責將內存中暫時不具備運行條件的進程換到外存交換區存放,但內存空閑時,又將外存中具備運行條件的進程重新換入內存;進程調度決定將處理機分配給就緒進程隊列的哪個進程。(4分)
(2)進程調度、中級調度(2分)4.什么是操作系統?它的主要功能有哪些?
操作系統是一組控制和管理計算機硬件和軟件資源,合理的對各類作業進行調度,以及方便用戶使用的程序的集合。它包含四種功能:處理機管理、內存管理、設備管理和文件管理 5.什么是處理機的三級調度,它們在什么條件下發生? 高級調度、中級調度和低級調度
高級調度:當系統決定選擇一個后備作業調入內存運行時; 中級調度:在內存緊張不能滿足需要時; 低級調度:選擇一個就緒進程投入運行時。
6.比較分段式與分頁式存儲管理方式的主要差別。
(1)頁是物理單位目的是提高內存的使用率,段式邏輯單位目的是方便用戶使用;(2)頁的大小是固定的由系統決定;段的大小不固定且由用戶決定;(3)分頁作業的地址空間是一維的;分段作業的地址空間是二維的;
7.什么是多道程序設計?為什么要采用多道程序設計? 多道程序設計是一種軟件技術,該技術使同時進入計算機主存的幾個相互獨立的程序在管理程序控制之下相互交替地運行。引入多道程序設計,可具有以下好處:(1)可提高CPU的利用率;(2)可提高主存和I/O設備利用率;(3)可增加系統吞吐量; 8.簡述死鎖的防止與死鎖的避免的區別。
死鎖的防止是系統預先確定一些資源分配策略,進程按規定申請資源,系統按預先規定的策略進行分配,從而防止死鎖的發生。
而死鎖的避免是當進程提出資源申請時系統測試資源分配,僅當能確保系統安全時才把資源分配給進程,使系統一直處于安全狀態之中,從而避免死鎖。9.虛擬存儲器的基本特征是什么?虛擬存儲器的容量主要受到什么限制? 10.操作系統為什么要引入進程?進程與程序的關系是怎樣的? 11.什么是設備無關性?實現設備無關性有什么好處? 設備無關性是用戶編制程序時,不直接使用物理設備名來指定特定的物理設備,而是使用邏輯設備名請求某類設備,使得用戶程序獨立于具體的物理設備,由設備甘理馱件建立邏輯設備與物理設備的對應關系.好處是增加了設備分配的靈活性,易于實現I/O重定向。12.有結構文件可分為哪幾類,其特點是什么?
答:有結構文件可分為以下三類,分別是:
(1)順序文件。它是指由一系列記錄,按某種順序排列所形成的文件。
(2)索引文件。當記錄為可變長度時,通常為之建立一張索引表,并為每個記錄設置一表項,以加速對記錄的檢索速度。
(3)索引順序文件。這是上述兩種文件方式的結合,它為文件建立一張索引表,為每一組記錄中的第一個記錄設置一表項。
13.分頁系統與分段系統的區別主要在于哪些方面?
答:分頁與分段系統有很多相似之處,但兩者在概念上完全不同,主要表現在:(1)頁是信息的物理單位,分頁是為實現離散分配方式,以消減內存的外匯零頭,提高內存利用率。段是邏輯單位,分段的目的是為了更好的滿足用戶的需要。(2)頁的大小固定,段的長度不固定
(3)分業的作業地址是一維的,分段的地址空間是二維的,在標識一個地址時,要給出段名和段內地址 14.簡述引起進程調度的原因。
答:引起進程調度的事件主要有以下幾個:
(1)在執行進程執行完畢或因某種事件而不能再執行
(2)在進程通信或同步過程中執行某些原語,如P操作,block原語(3)執行中的進程因提出I/O操作而暫停執行
(4)在可剝奪式調度中有一個比當前進程優先級更高的進程進入到就緒隊列。(5)在分時系統中時間片用完 15.操作系統的基本特征是什么?
答:各種操作系統都擁有共同的特征。分別是:
(!)并發(2)共享(3)虛擬(4)異步性
16.什么叫虛擬存儲器?實現方式有哪些?
答:所謂虛擬存儲器,是指將作業的一部分裝入內存便可運行作業的存儲器系統。也即是指具有請示調入功能和置換功能,能從邏輯上對內存容量進行擴充的一種存儲器系統。
虛擬存儲器的實現方式有兩種:
(1)請求分頁系統(2)請求分段系統 17.操作系統的目標是什么?
答:操作系統的目標有以下幾點:
(1)方便性
(2)有效性
(3)可擴充性
(4)開放性 18.什么是請求分頁系統?它需要哪些方面的硬件機構支持?
答:請求分頁系統是在分頁系統的基礎上,增加了請求調頁功能、頁面置換功能所形成的頁式虛擬存儲系統。為了實現請求調頁和置換功能,系統必須提供必要的硬件支持。其中,最重要的是:
(1)請求分頁的頁表機制。(2)缺頁中斷機構(3)地址變換機構
19.進程有哪三種基本狀態?請分別闡述。
答:進程在運行中不斷地改變其運行狀態,通常,一個進程必須具有以下三種基本狀態。(1)就緒狀態。即進程以分配到除CPU以外的所有必要的資源后,只要能再獲得處理機,便可立即執行,這樣的狀態即就緒狀態。
(2)執行狀態。指進程已獲得處理機,其程序正在執行。
(3)阻塞狀態。指進程因發生某事件,如I/O請求,申請緩沖空間等而暫停執行時的狀態,亦即進程的執行受到阻塞。
20.什么叫分時系統,它的特征是什么? 答:分時系統是指一臺主機上連接了多個帶有顯示器和鍵盤的終端,同進允許多個用戶共享主機中的資源,每個用戶都可通過自已的終端以交互方式使用計算機。分時系統的特征如下:
(1)多路性。即多個用戶分時使用一臺主機。
(2)獨立性。每個用戶各占一個終端,獨立操作,互不干擾。(3)及時性。用戶的請求能在很短時間內獲得響應。
(4)交互性。用戶可通過終端與系統進行廣泛的人機對話。21.選擇調度方式和算法的準則是什么?
答:選擇調度方式和調度算法的準則,有的是面向用戶的,有的是面向系統的。面向用戶的準則:
(1)周轉時間短(2)響應時間快(3)截止時間的保證(4)優先權準則 面向系統的準則:
(1)系統吞吐量高(2)處理機利用率高(3)各類資源的平衡利用 22.試比較進程和程序的區別 答:(1)進程是一個動態概念,而程序是一個靜態概念,程序是指令的有序集合,無執行含義,進程則強調執行的過程。
(2)進程具有并行特征(獨立性,異步性),程序則沒有。
(3)不同的進程可以包含同一個程序,同一個程序在執行中也可以產生多個進程。23.什么是文件目錄?文件目錄中包含哪些信息? 答:一個文件的文件名和對該文件實施控制管理的說明信息稱為該文件的說明信息,又稱為該文件的目錄。
文件目錄中包含文件名、與文件名相對應的文件內部標識以及文件信息在文件存儲設備上的始址等信息。另外還可能包含關于文件邏輯結構、物理結構、存取控制和管理等信息。
24.什么是段式存儲管理?它從邏輯地址到物理地址是怎么變換的?
.把程序按內容或構成關系分成段,每段有自己的名字。一個用戶作業或進程包含的段對應于一個二維虛擬儲存器。以段為單位分配內存,然后通過地址映射機構把邏輯地址轉換成物理地址。只將那些經常訪問的段駐留內存,其他的段放在外存,待需要時自動調入。
地址變換過程:由虛地址中的段號為索引,查段表。找出該段在內存的起始地址,并將其和段內地址相加,從而得到物理地址。
25.在單處理機環境下,進程間有哪幾種通信方式,是如何實現的?
作業調度:從一批后備作業中選擇一個或幾個作業,給它們分配資源,建立進程,掛入就緒隊列。執行完后,回收資源。
進程調度:從就緒進程隊列中根據某個策略選取一個進程,使之占用CPU。
交換調度:按照給定的原則和策略,將外存交換區中的進程調入內存,把內存中的非執行進程交換到外存交換區中。26.設備管理中的數據傳送控制方式有哪幾種?分別簡述如何實現的。
程序直接控制:由用戶進程來直接控制內存或CPU和外設間的信息傳送。
中斷方式:進程通過CPU發出指令啟動外設,該進程阻塞。當輸入完成時,I/O控制器通過中斷請求線向CPU發出中斷信號,CPU進行中斷處理。DMA方式:在外設和內存之間開辟直接的數據交換通路。
通道控制方式:CPU發出啟動指令,指出通道相應的操作和I/O 設備,該指令就可啟動通道并使該通道從內存中調出相應的通道指令執行。27.試比較內存管理和外存管理的異同點.答:主要任務:內存管理的主要任務是為多道程序的運行,提供良好的環境;而外存管理的主要任務則是為文件提供存儲空間。
基本功能:內存管理的基本功能包含了內存空間的分配、回收、內存保護、對換、內存擴充等方面;而對外存管理的基本功能則只是對外存空間的分配和回收。
分配方式:它們都可采用連續分配或離散分配方式,且都以離散分配方式為主。
分配算法或機制:對于連續分配方式,內存與外存管理中的分配和回收算法類似,主要有首次適應算法、循環首次適應算法等;在離散分配方式中,兩者采用的機制不同,內存管理主要是利用頁(段)表;而在外存管理中,則主要利用文件分配表FAT。
28.SPOOLing的含義是什么?試述SPOOLing系統的特點、功能以及控制過程。
答:SPOOLing是Simultaneous Peripheral Operation On-Line(即外部設備聯機并行操作)的縮寫,它是關于慢速字符設備如何與計算機主機交換信息的一種技術,通常稱為“假脫機技術”。
SPOOLing技術是在通道技術和多道程序設計基礎上產生的,它由主機和相應的通道共同承擔作業的輸入輸出工作,利用磁盤作為后援存儲器,實現外圍設備同時聯機操作。
SPOOLing系統由專門負責I/O的常駐內存的進程以及輸入井、輸出井組成;它將獨占設備改造為共享設備,實現了虛擬設備功能。
29.處理機調度分為哪三級?各自的主要任務是什么?
答:作業調度:從一批后備作業中選擇一個或幾個作業,給它們分配資源,建立進程,掛入就緒隊列。執行完后,回收資源。
進程調度:從就緒進程隊列中根據某個策略選取一個進程,使之占用CPU。
交換調度:按照給定的原則和策略,將外存交換區中的進程調入內存,把內存中的非執行進程交換到外存交換區中。
30.什么是文件的邏輯結構和物理結構? 文件的邏輯結構(文件的組織):從用戶角度看到的文件的全貌,也就是它的記錄結構,包括流式文件、順序文件、索引文件和索引順序文件。文件的物理結構(文件的存儲結構):文件在外存上的存儲組織形式,包括連續文件、串聯文件和索引文件。
第三篇:西南交通大學項目管理復習
生很大4生產周期長,資源消耗大5生產具有不可中斷性6生產具有廣泛的社會綜合性
設備管理、財務管理
資金、物資、財務管理;工程質量管理;工期管理;造價管理;征地、拆遷及協作配套管理;工程檔案及項目建設安全管理;工程驗收、轉為固定資產及保修管理
國內工程施工招標的程序和工作內容:工程施工招標一般程序可分為3個階段:即招標準備階段,招標投標階段和決標成交階段,包括以下具體工作內容:1由建設單位組建一個招標班子2向招標投標辦事機構提出招標申請書3編制招標文件和標底4發布招標通告或發出招標邀請書5投標單位申請投標6對投標單位進行資質審查7發放招標文件8組織投標單位踏勘現場,并對招標文件答疑9投標文件的編制和遞送10建立評標組織,制定評標、定標辦法11召開開標會議,審查投標標書12組織評標,決定中標單位13發出中標通知書14建設單位與中標單位簽訂承發包合同
國內工程施工投標的程序和工作內容:施工投標分3個階段,具體內容如下:1研究招標文件2調查投標環境3確定投標策略4制定施工方案5報價6編制標書 施工組織設計編制辦法和內容:
1施工組織有關資料調查2施工組織方案比選3施工順序及進度安排4材料供應計劃及運輸方案5提出臨時工程修建的意見6施工進度示意圖及施工總平面布置示意圖7主要勞動力、材料、施工機具數量的計算8各項經濟技術指標 建設工程定額的作用及特性:
宏觀調控和管理的手段,是計劃管理的基本依據2建設工程定額是節約社會勞動和提高生產效率的工具3建設工程定額是對市場行為的規范,有利于市場競爭4建設工程定額是確定建設工程造價和技術經濟評價的依據5建設工程定額有利于完善市場信息系統6建設工程定額是貫徹按勞分配原則的尺度7建設工程定額是總結和改進生產方法,推廣先進施工技術和工藝的手段
特性:科學性、法令性、群眾性、相對穩定性、統一性、系統性和針對性 建設工程概預算費用構成:
包括人工費、材料費、施工機械使用費和其他直接費2間接費:是指組織和管理施工生產而發生的各項費用,以及在施工中上述直接費用以外的其他費用3設備購置費、工器具及家具購置費:設備購置費是指為購置設計規定的各種機械和電氣設備的全部費用,工器具及生產家具購置費是指新建項目為保證初期正常生產所必須購置的第一套不夠固定資產標準的設備、儀器、工卡模具、器具等的費用,不包括備品備件的購置費4建設工程其他費:建設工程造價和設備購置費以外的費用。
建設工程概預算費用的計算方法:投資估算、設計工程結算、竣工決算。
建筑施工企業全面質量管理的基本方法:
排列圖法、因果分析法、分類法、直方圖法、控制圖法、散布圖法、統計分析表法。
可行性研究的含義、特點、目的和作用:含義:可行性研究是一種綜合運用技術、經濟、管理多種學科的決策技術,是為達到一定目標選擇最佳決策的一套科學方法,是建設項目前期工作的核心內容特點:前期性、預測性、不確定性目的:在項目決策之前,全面研究建設項目以投資效益為核心的經濟問題,趨利避害,研究投資于此項工程,如何才能獲得最大的經濟效益,使擬建項目在競爭中立于不敗之地。
作用:1可作為建設項目投資決策的依據2可作為編制和審批設計任務書的依據3可作為銀行貸款的依據4可作為建設項目與各協作單位簽訂合同和有關協議的依據5可作為基本建設程序中開展下一步工作的依據6重大項目的可行性研究報告可作為編制國民經濟計劃的依據生很大4生產周期長,資源消耗大5生產具有不可中斷性6生產具有廣泛的社會綜合性
設備管理、財務管理
資金、物資、財務管理;工程質量管理;工期管理;造價管理;征地、拆遷及協作配套管理;工程檔案及項目建設安全管理;工程驗收、轉為固定資產及保修管理
國內工程施工招標的程序和工作內容:工程施工招標一般程序可分為3個階段:即招標準備階段,招標投標階段和決標成交階段,包括以下具體工作內容:1由建設單位組建一個招標班子2向招標投標辦事機構提出招標申請書3編制招標文件和標底4發布招標通告或發出招標邀請書5投標單位申請投標6對投標單位進行資質審查7發放招標文件8組織投標單位踏勘現場,并對招標文件答疑9投標文件的編制和遞送10建立評標組織,制定評標、定標辦法11召開開標會議,審查投標標書12組織評標,決定中標單位13發出中標通知書14建設單位與中標單位簽訂承發包合同
國內工程施工投標的程序和工作內容:施工投標分3個階段,具體內容如下:1研究招標文件2調查投標環境3確定投標策略4制定施工方案5報價6編制標書 施工組織設計編制辦法和內容:
1施工組織有關資料調查2施工組織方案比選3施工順序及進度安排4材料供應計劃及運輸方案5提出臨時工程修建的意見6施工進度示意圖及施工總平面布置示意圖7主要勞動力、材料、施工機具數量的計算8各項經濟技術指標 建設工程定額的作用及特性:
宏觀調控和管理的手段,是計劃管理的基本依據2建設工程定額是節約社會勞動和提高生產效率的工具3建設工程定額是對市場行為的規范,有利于市場競爭4建設工程定額是確定建設工程造價和技術經濟評價的依據5建設工程定額有利于完善市場信息系統6建設工程定額是貫徹按勞分配原則的尺度7建設工程定額是總結和改進生產方法,推廣先進施工技術和工藝的手段
特性:科學性、法令性、群眾性、相對穩定性、統一性、系統性和針對性 建設工程概預算費用構成:
包括人工費、材料費、施工機械使用費和其他直接費2間接費:是指組織和管理施工生產而發生的各項費用,以及在施工中上述直接費用以外的其他費用3設備購置費、工器具及家具購置費:設備購置費是指為購置設計規定的各種機械和電氣設備的全部費用,工器具及生產家具購置費是指新建項目為保證初期正常生產所必須購置的第一套不夠固定資產標準的設備、儀器、工卡模具、器具等的費用,不包括備品備件的購置費4建設工程其他費:建設工程造價和設備購置費以外的費用。
建設工程概預算費用的計算方法:投資估算、設計工程結算、竣工決算。
建筑施工企業全面質量管理的基本方法:
排列圖法、因果分析法、分類法、直方圖法、控制圖法、散布圖法、統計分析表法。
可行性研究的含義、特點、目的和作用:含義:可行性研究是一種綜合運用技術、經濟、管理多種學科的決策技術,是為達到一定目標選擇最佳決策的一套科學方法,是建設項目前期工作的核心內容特點:前期性、預測性、不確定性目的:在項目決策之前,全面研究建設項目以投資效益為核心的經濟問題,趨利避害,研究投資于此項工程,如何才能獲得最大的經濟效益,使擬建項目在競爭中立于不敗之地。
作用:1可作為建設項目投資決策的依據2可作為編制和審批設計任務書的依據3可作為銀行貸款的依據4可作為建設項目與各協作單位簽訂合同和有關協議的依據5可作為基本建設程序中開展下一步工作的依據6重大項目的可行性研究報告可作為編制國民經濟計劃的依據
第四篇:操作系統總結
什么是OS,OS有哪幾個特征?其最基本的特征是什么?
答:操作系統是為了達到方便用戶和提高利用率的目的而設計的,控制和管理計算機硬件和軟件資源,合理的組織計算機工作流程的程序的集合它具有并發,共享,虛擬,異步性四個基本特征。其中最基本的特征為并發性
2什么是進程及與程序的區別與聯系,為什么PCB是進程存在的唯一標志?
進程是程序的一次執行過程,是系統進行資源分配和調度的一個獨立單位。
區別:(1)進程是動態的,程序是靜態的。(2)進程具有并發性,而程序沒有(3)進程是資源分配和處理機調度的獨立單位,其并發性受系統制約(4)一個程序多次執行,對應多個進程,不同的進程可以包含同一程序PCB:因為在進程的整個生命期中,系統總是通過PCB對進程進行控制的3處理機三級調度分別完成什么工作?
(1)高級調度:就是作業調度,用于決定把外存上處于后備隊列中的哪些作業調入內存,并為它們創建進程,分配必要的資源,然后,再將新創建的進程排在就緒隊列上,準備執行
(2)低級調度:就是進程調度,它決定就緒隊列中的哪個進程將獲得處理機,然后由分派程序執行把處理機分配給該進程的操作
(3)中級調度:實際上就是存儲器管理中的對換功能試說明引起進程調度的時機是什么?
(1)進程完畢(2)時間片用完(3)I/O請求發生某個事件(4)原語:wait操作,阻塞(5)高優先者進入 5什么是臨界資源和臨界區?
一次僅允許一個進程訪問的資源稱為臨界資源。訪問臨界資源的代碼段稱為臨街區
6試修改下面生產者---消費問題中,如果將兩個wait操作即wait(full)和wati(mutex)互換 位置,或者將signal(mutex)與signal(full)互換位置,結果會如何?
(1)wait(full)和wait(mutex)互換位置后,因為mutex在這兒是全局變量,執行完wait(mutex),則mutex賦值為0,倘若full 也為0,則該生產者進程就會轉入進程鏈表進行等待,而生產者進程會因全局變量mutex為0 而進行等待,使full 始終為0,這樣就形成了死鎖.(2)而signal(mutex)與signal(full)互換位置后,從邏輯上來說應該是一樣的.7什么是死鎖?死鎖產生的有哪些
死鎖是因多個進程因競爭資源而造成的一種僵局(1)互斥條件:一個資源每次只能被一個進程使用。(2)請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
(3)不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。(4)環路等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。同步機制應遵循的基本準則是什么?
(1)空閑讓進(2)忙則等待(3)有限等待(4)讓權等待.程序有幾種連接方式
(1)靜態鏈接方式(2)裝入時動態鏈接(3)運行時動態鏈接
10什么是動態重定位方式及為什么要引入動態重定位方式及如何實現?
程序和數據裝入內存時需對目標程序中的地址進行修改。這種把邏輯地址轉變為內存的物理地址的過程叫重定位
11什么是分頁,什么是分段,在存儲管理中兩者的區別
(1)分頁是將一個進程的邏輯地址空間分成若干大小相等的部分,每一部分稱作頁面,內存劃分成與頁面大小相等的物理塊,進程的任何一頁可放入內存的任何一個物理塊中,段是信息的邏輯單位,含有一組意義相對完整的信息,更好的來滿足用戶的需要。
(2)分段是一組邏輯信息的集合,即一個作業中相對獨立的部分。多個段在內存中占有離
散的內存單元,對每個段,在內存占有一連續的內存空間,其內存的分配與回收同可變分區的內存分配與回收辦法
分頁與分段的主要區別是?
(1)頁是信息的物理單位,分頁是為了實現離散分配方式,以消減內存的外零頭,提高內存的利用率(2)頁的大小固定,并且有系統決定,而段的長度不固定決定于用戶所編寫的程序(3)分頁作業的地址空間是一維的,段是二維的。
12動態分區存儲管理中內存的回收方式
13.什么是對換,對換的分類及主要用途在進程換出時應遵循什么原則
對換是把內存中暫時不能運行的進程或者暫時不用的程序和數據調出到外存上,以便騰出足夠的內存空間,再把因具備運行條件的進程或者進程所需要的程序或數據調入內存。
分類:(1)整體對換(進程對換):以整個進程為單位(2)頁面對換(分段對換/部分對換):以頁和段為單位
規則:內存空間不夠用才換出。系統處于阻塞狀態,且優先級最低的進程最先換出。若換入:系統處于就緒狀態,且優先級最高的進程最先換入,直至無可換入的進程為止。
14.什么是虛擬存儲器虛擬存儲器具有哪些特性,最基本的特性是什么?虛擬存儲器的容量受哪兩方面的限制?
虛擬存儲器:是指具有請求調入功能和置換功能,能從邏輯上對內存容量進行擴充的一種存儲器系統。
特征:(1)離散性(最基本的特征)(2)多次性(3)對換性(4)虛擬性
虛擬存儲器的容量主要受指令中表示地址的字長和外存的容量的限制。
15.在沒有快表的分頁存儲管理中取一條指令需訪問幾次內存及訪問內存的目的,及具有快表的分頁存儲管理系統的地址變換過程。
兩次。第一次:訪問內存中的頁表,從中找到頁的物理塊號,再將塊號與頁內偏移量W拼接,形成物理地址。第二次:從第一次所得的物理地址中獲得所需數據
地址變換過程:CPU給出有效地址后,地址變換機構將頁號與快表中的所有頁號進行比較,若有與此相匹配的頁號,則表示所訪問的頁在快表中,從中讀出物理塊號與頁內地址相拼接,得到物理地址;若訪問的頁不在快表中,則要訪問在內存中的頁表,從頁表中讀出物理塊號與頁內地址相拼接,得到物理地址,同時,還應將此頁表項寫入快表中,若此時快表已滿,則OS必須找到一個老的并且被認為不再需要的頁表項將它換出。
16.什么是緊湊技術及為什么要引入
緊湊:把原來多個分散的小分區拼接成一個大分區的方法
引入:提高內存的利用率,讓大容量的作業可以裝入并且減少零頭或碎片
17程序的局部性原理是什么局限性的兩個主要表現方面
局部性原理:(1)程序執行時,除少部分轉移和過程調用指令外,大多數條件下任是順序執行的(2)過程調用將會使程序的執行軌跡由一部分區域轉至另一部分區域,但經驗就看出過程調用的深度在大多數情況下不會超過5(3)程序中存在許多循環結構,這些雖然只能由少數指令構成但它們將多次執行(4)程序中還包括許多對數據結構的處理
主要表現在:(1)時間局限性(2)空間局限性
18.什么是spooling技術spooling系統有哪些組成Spooling技術是對脫機輸入,輸出系統的模擬。
組成:(1)輸入井和輸出井(2)輸出緩沖區和輸入緩沖區(3)輸入進程SPi和輸出進程SPo(4)請求打印隊列
特點:(1)提高了I/O的速度(2)將獨占設備改為共享設備(3)實現了虛擬設備功能
第五篇:操作系統總結
第一部分概述
一、導論
1.操作系統做什么
① 馮諾依曼體系結構
② OS角色:對上:控制程序正確執行,使用方便;對下:資源分配器
③ 核心功能:進程管理,內存管理,文件管理,輸入輸出,保護和安全
2.計算機系統組織
① 中斷
② 存儲結構:寄存器→高速緩存→主存→電子磁盤→光盤→磁帶
③ I/O結構:I/O的同步、異步;慢速設備(中斷)快速設備(DMA)
3.操作系統結構:多道(使CPU總有一個任務執行)、分時(高頻率切換任務)
4.進程管理
① 進程有其生命周期,進程是執行中的程序
② 管理活動:創建或刪除用戶或系統進程;掛起或重啟進程;防死鎖;提供進程
同步、通信機制
③ 目的:使進程可以運行,相互協調不死鎖
5.內存管理
① 目標:內核健壯
② 保護方法:獨立操作模式:用戶模式,內核模式;計數器定時中斷防止死循環
6.存儲管理
① 解決問題:速度匹配→緩存(緩存的命中率)
② 等級問題:一致性;多處理器下各緩存的一致性
二、操作系統結構
1.操作系統服務:用戶界面,程序執行,I/O操作,文件系統操作,通信,錯誤檢測,資源分配,統計,保護和安全。
2.操作系統的用戶界面:命令解釋程序,圖形用戶界面
3.系統調用類型:進程控制,文件管理,設備管理,信息維護,通信
4.系統程序分類:文件管理,狀態信息,文件修改,程序設計語言支持,程序裝入和
執行,通信,系統工具,應用程序。
5.操作系統結構:
① 簡單結構(MS-DOS):小空間多功能,應用程序直接操作硬件,不安全,無模塊,接口和功能層次沒有區分
② 分層法:難劃分,效率低,但是構造和調試簡單化
③ 微內核:包括最小的進程和內存管理以及通信,便于擴充操作系統。
④ 模塊化:動態加載模塊,允許內核提供核心服務,也能動態的實現特定的功能 ⑤ 組合結構
第二部分進程管理
一、進程
1.進程的概念
① 進程通常包括:程序計數器,棧,數據段
② 進程狀態:新建,運行,等待,就緒,終止
③ 進程控制塊PCB:進程狀態,程序計數器,CPU寄存器,CPU調度信息,內存
管理信息,記賬信息,I/O狀態信息
④
2.進程調度
① 調度隊列:作業隊列,就緒隊列,設備隊列P80
② 調度程序:長期調度程序(作業調度程序):從作業池中選擇進程,并裝入內存
準備執行。短期調度程序(CPU調度程序):從準備執行的進程中選擇進程,并為之分配CPU時間。中期調度程序:能將進程從內存中移出。
長短期的區別是執行頻率;長期調度控制多道程序設計的程度,中期調度可以降低多道。
③ I/O綁定進程,CPU綁定進程
④ 上下文切換:將CPU切換到另一個進程需要保存當前進程的狀態和恢復另一進
程的狀態。
3.進程操作
① 進程創程:創建新進程的執行方式(父子進程并發執行;父進程等待直到某個
或全部子進程執行完畢)
新進程地址空間(子進程是父進程的副本;子進程裝入另一個新程序)
資源共享(所有/子集/不共享)
② 進程終止
父進程終止子進程的原因(子進程使用了超過它分配的資源;分配給子程序的任務不需要了;父進程結束)
4.進程間通信
① 通信基本模型:共享內存,消息傳遞
② 共享內存:消費者可能等待生產者;無限緩沖區,有限緩沖區的區別
③ 消息傳遞:
命名:直接通信(對稱尋址:接受者命名發送者;非對稱尋址:接受者不需要命名發送者)間接通信(郵箱、端口的參與)
同步:阻塞與非阻塞(發送,接收),同步與異步
緩沖:零容量(無緩沖);有限容量、無限容量(自動緩沖)
5.客戶機-服務器通信:套接字SOCKET,RPC遠程調用,RMI遠程方法調用
二、線程
1.概述:多線程優點:響應度高,資源共享,經濟,多處理器體系結構的利用
2.多線程模型:用戶層的用戶線程或內核層的內核線程,用戶線程受內核支持,而無
需內核管理,而內核線程由操作系統直接支持和管理,這兩種方法支持多線程。① 多對一模型(效率比較高,阻塞系統調用的后果)
② 一對一模型(更好的并發功能,缺點是創建一個用戶線程就需要一個內核進程)③ 多對多模型(用戶可以創建任意多的線程;二級模型=多對多+一對一)
3.多線程問題
① 系統調用fork().exex()
② 線程取消異步取消(立即終止),延遲取消(檢查是否應該終止)
③ 信號處理:信號必須有一個處理程序
④ 線程池:優點(處理請求速度快,線程數量可控制)
三、CPU調度
1.基本概念
① CPU區間和I/O區間的概念
② 搶占與非搶占調度的概念(發生在:一個進程從運行切換到等待、運行切換到
就緒、等待切換到就緒、以及終止,1,4非搶占,2,3搶占)
2.調度準則:CPU利用率(使CPU盡量忙),吞吐量(測量工作的方法),周轉時間(從
進程提交到完成的時間),等待時間,響應時間
3.調度算法
① 先到先服務調度FCFS(非搶占的)
② 最短作業優先調度SJF(搶占,最優算法,難知道下一CPU區間長度,用于長
期調度)
③ 最短剩余時間優先調度SRTF(強占式的SJF,適合長期調度)
④ 優先級調度(問題:無窮阻塞或饑餓,老化來解決;非搶占方式不用占用CPU
切換)
⑤ 輪轉調度RR(專為分時系統設計,是可搶占的,時間片過大變為FCFS,時間片
過小等待時間段,但是切換頻繁)
⑥ 多級隊列調度(前臺與后臺的調度算法不同,RR與FCFS)?
⑦ 多級反饋隊列調度
⑧ 實時調度:硬實時(在特定硬件上保證時間),軟實時:盡力而為,優先級不變,沒有饑餓現象
4.算法評估
① 確定性模型甘特圖
② 排隊模型 N=入*W(N平均隊列長度,W為隊列的平均等待時間,入為新進程
到達隊列的平均到達率)
③ 模擬
④ 實現
四、進程同步
1. 背景:競爭條件:共享內存,共享變量
2. 臨界區問題
① 臨界區解決方案:進入去,臨界區,退出區,剩余區
② 效果:互斥,有空讓進,有限等待
③ 證明:1.互斥,臨界區一個時間只能有一個進程2.前進,臨界區內無進程執行,那么只有那些不在剩余區內執行的進程可參加選擇,這種選擇不能無限延遲3.有限等待,從一個進程做出進入臨界區的請求,知道該請求允許為止,其他進程允許進入其臨界區的次數有上限。
④ PETERSON算法
3. 信號量:計數信號量,二進制信號量
① 技術信號量用于控制訪問:當每個線程需要使用資源時,需要對該信號量執行
acquire()操作,當線程釋放資源時,需要對該信號執行release()操作。
② 用信號量解決同步問題
4. 管程:管程結構確保一次只有一個進程能在管程內活動
5. 經典同步問題
① 生產者消費者問題
② 讀者寫者問題
③ 哲學家吃飯問題
五、死鎖
1.死鎖特征
① 必要條件:互斥,占有并等待,非搶占,循環等待
② 資源分配圖:分配圖沒有環則沒有死鎖,有環則有死鎖;有環則可能有死鎖。
2.死鎖預防
① 互斥:通常不能通過否定互斥條件來預防死鎖:有的資源本身就是非共享的。② 占有并等待:協議一:每個進程在執行前申請并獲得所有資源;協議二,允許
進程在沒有資源時才可以申請資源。協議缺點:資源利用率低,可能發生饑餓。③ 非搶占:協議:如果一個進程占有資源并申請另一個不能立即分配的資源,那
么其現在已分配的資源都可被搶占。
④ 循環等待:對所有資源類型進行完全排序,且要求每個進程按遞增順序來申請
資源。
3.死鎖避免
① 安全狀態:如果系統能按某個順序為每個進程分配資源并能避免死鎖,那么系統
狀態就是安全的。
② 單實例:資源分配圖:申請邊,分配邊,需求邊
③ 多實例:銀行家算法Available(向量),Max(矩陣),Allocation(矩陣),Need(矩
陣),4.死鎖檢測
① 單實例:等待圖:當且僅當等待圖中有一個環時,系統存在死鎖
② 多實例:類似銀行家算法
5.死鎖恢復
① 進程終止:終止所有死鎖進程;一次只終止一個進程,直到取消死鎖循環為止 ② 資源搶占:問題:選擇一個犧牲品;回滾;饑餓
第三部分內存管理
一、內存管理
1.背景
① 地址綁定:編譯時(編譯時就知道進程將在內存中的駐留地址,那么就可以生
成絕對代碼),加載時(生成可重定位的代碼),運行時(如果進程在執行時可以從一個內存段移到另一個內存段,那么綁定必須延遲到執行時才進行)
② 邏輯地址(CPU所生成的地址)物理地址(內存單元所看到的地址)
③ 動態加載(子程序只在調用時加載,優點不用的子程序絕不會被加載)④ 動態鏈接與共享庫(將連接延遲到運行時)
2.交換(沒看)
3.連續內存分配:單分區,多分區
4.非連續內存分配:分頁(分頁技術不會產生外部碎片)
5.動態存儲分配問題:首次適應,最佳適應,最差適應
6.頁表結構:層次頁表,哈希頁表,反向頁表
二、虛擬內存
1.背景
① 多道盡可能多的程序,這也是內存管理的目標
② 虛擬內存好處:可以運行比物理內存大的程序;更快的啟動和響應(載入更快);
更多的多道;更容易的共享文件盒地址空間;更少的輸入輸出。
2.按需調頁:在需要時才調入頁
① 有效位-無效位來來確定頁是否在內存
② 有幀就加入,無幀就換頁,頁錯誤處理流程:檢查內部表確定引用是否合法→
非法則終止,合法則調入→找到空閑幀,裝入內存→修改內部表→重啟指令 ③ 按需調頁的有效訪問時間:effective access time=(1-p)*ma+p*處理頁錯誤的時間
3.頁面置換(引用串)
① FIFO 先入先出
② 最優算法:向后看,換頁的時候看內存中哪個頁最晚用;是所有算法中產生頁
錯誤最低的算法;問題:需要引用串的未來知識
③ LRU最近最少使用算法:往前看,內存中哪頁在列表序列中離的最遠,無Belady
異常
④ 算法實現:計數器(最近最少使用:換計數器值最小的)代價大:系統級,可
能溢出,一定會寫全表
頁碼堆棧:每當引用一個頁,該頁就從棧中刪除并放在棧頂。嚴格實現,但是代價高。
二次機會:引用位,引用時改為1,;換頁時,是1則置零,是0則換
計數算法:LFU最不經常使用,MFU最經常使用(可采用老化)
4.幀分配
① 分配策略限制:所分配的幀不能超過可用幀的數量,大于最小需求
② 每個進程幀的最少數量是由體系結構決定的,而最大數量幀是由可用物理內存
決定的。
③ 當指令完成之前出現頁錯誤,該指令必須重新執行
④ 幀分配方法:
固定分配:平均分配、按比例分配
優先級分配:全局置換(幀數可變),局部置換(固定);全局置換算法的一個問題是進程不能控制其頁錯誤率,但是全局置換通常會有更好的系統吞吐量,且更為常用。
5.系統顛簸
① 顛簸產生的原因:搶幀→I/O上升→CPU使用率降低→多道繼續增加→忙于換頁 ② 工作集合策略防止了顛簸,并盡可能的提高了多道程序的程度,可以通過頁錯
誤頻率PFF來直接測量和控制頁錯誤以防止顛簸。上限之上分配更多,下限之下,減少幀數
6.其他問題
① 預調頁關鍵問題:采用預調頁的成本是否小于處理響應頁錯誤的成本。② 頁大小問題:最佳頁大小的選擇,大頁,小頁
③ 優化程序結構
第四部分存儲管理
一、文件系統接口
1.文件概念
① 文件是邏輯外存的最小分配單元,即數據除非在文件中,否則不能寫到內存中。② 文件操作:寫,讀,重定位,刪除,截短
③ 文件加鎖:共享鎖,專用鎖;強制,建議文件加鎖機制
2.訪問方法:順序訪問,直接訪問,其他方法(索引)
3.目錄結構
① 目錄操作:創建文件,刪除文件,遍歷目錄,重命名文件,跟蹤文件系統 ② 評價目錄結構:命名(不同文件同名),分組(同一文件不同命名)
③ 單層結構目錄(命名,分組均無),雙層結構目錄(可命名不可分組),樹狀結
構(絕對,相對路徑;可命名分組),無環圖目錄(硬鏈接,軟鏈接),通用圖目錄
二、文件系統實現
1.文件系統結構:應用程序→邏輯文件系統→文件組織模塊→基本文件系統→I/O控
制→設備
2.目錄實現:線性列表(編程簡單,運行費時,查找文件需要線性搜索)
哈希表(采取策略避免沖突)
3.分配方法
① 連續分配:每個文件在磁盤上占有一組連續的塊;困難時為新文件找到空間,外部碎片問題也可能很大,確定文件分配多大空間,② 鏈接分配:解決了連續分配的所有問題;必須順序訪問文件,指針需要空間,由于指針分配在整個磁盤,可靠性就成了一個問題。
FAT文件分配表:改善了隨機訪問時間,但是需要大量磁頭尋道時間
③ 索引分配:把所有指針都放在一起,構成索引塊;支持直接訪問,且沒有外部
碎片問題,但是會浪費空間;索引塊分多大是個問題
鏈接方案(一個索引塊可以指向另一索引塊構成鏈接)
多層索引(第一個索引塊指向第二個索引塊,第二個指向文件數據塊)
組合方案P404 N級間接塊(計算)
4.空閑空間管理:為向量(1空0滿)塊號碼計算:(值為0的數字)*(一個字的位
數)+第一個值為1的位的偏移;鏈表(所有空閑的塊用鏈表鏈接起來);組(將N個空閑塊的地址存儲在第一個空閑塊中);計數()