第一篇:西南交通大学操作系统期末复习总结
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个空闲块的地址存储在第一个空闲块中);计数()