操作系统学年论文.docx

上传人:牧羊曲112 文档编号:5304468 上传时间:2023-06-24 格式:DOCX 页数:32 大小:1,022.13KB
返回 下载 相关 举报
操作系统学年论文.docx_第1页
第1页 / 共32页
操作系统学年论文.docx_第2页
第2页 / 共32页
操作系统学年论文.docx_第3页
第3页 / 共32页
操作系统学年论文.docx_第4页
第4页 / 共32页
操作系统学年论文.docx_第5页
第5页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《操作系统学年论文.docx》由会员分享,可在线阅读,更多相关《操作系统学年论文.docx(32页珍藏版)》请在三一办公上搜索。

1、1 引言1.1性质操作系统是计算机科学与技术专业的主要专业基础课和主干课。操作系统对计算机系 统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都 要得到操作系统提供的服务。本课程使学生掌握操作系统的基本概念、基本原理、设计方 法和实现技术,具有初步分析实际操作系统的能力,训练分析和解决实际问题能力,为 其今后在相关领域开展工作打下坚实的基础。1.2教学目的本科程通过模拟操作系统原理的实现,应使学生加深对操作系统工作原理和操作系统 实现方法的理解,系统科学地受到分析问题和解决问题的训练,提高运用理论知识解决实 际问题的能力。为学生从事科学研究和独立负担计算机及其应用方

2、面的工作打好扎实的基 础。1.3任务和要求此系统为基于时间片轮转调度算法的进程管理系统,主要实现存储管理,设备管理和 进程管理。存储管理部分主要实现主存空间的分配和回收、存储保护。设备管理主要包括 设备的分配和回收。进程管理主要包括进程调度,进程的创建和撤销、进程的阻塞和唤醒, 中断作用的实现。1.4意义通过本模拟系统的设计,可以加深学生对操作系统的原理的理解,明白操作系统的各 项功能的具体实现和具体操作,提高学生的动手能力。1.5论文结构安排第2章为系统分析与设计,写出系统要求,分析出包含哪些功能模块、每个模块的计 划采用的实现方法和原理。第3章为系统实现,写出主要模块的实现,包括全局变量说

3、明和主要功能的实现流程。第4章为结束语,总结课程设计的体会。2 系统分析与设计2.1存储管理的要求存储管理部分主要实现主存空间的分配和回收、存储保护。模拟系统中,采用虚拟页 式储管理方案(PCB区域、位示图等单独存放),模拟系统中只管理用户区。模拟系统中,主存部分分为两部分,一部分是系统区,这里只存放进程控制块PCB) 和主存分配表(位示图),一部分是用户区,这里主要是对用户区的管理:2.1.1数据结构采用位示图记录主存使用情况,实现主存空间的分配和回收、存储保护。用数组模拟内存用户区,大小为512字节,每个主存块16个字节(32块)。2.1.2页表可以占用内存用户区,也可以放在另外区域或pc

4、b;可以采用预调入策略;页面局部置换算法(在本物理块中选择淘汰页,换入新页);模拟系统中,缺页中断发生在根据根据pc取指令时;2.1.3初始化初始主存块分配数量自行决定方法,不能分配太多,也不能太少2.1.4屏幕显示主存使用情况示意图,哪些主存已经分配,哪些主存未分配,以不同的颜色表示(例 如,红色表示已分配,蓝色表示未分配)。正在运行的进程对应指令存放的位置以特殊颜色显示。2.2 设备管理的要求设备管理主要包括设备的分配和回收。设备的模拟模拟系统中有A、B、C三种独占型设备,A设备3个,B设备2个,C设备1个。数据结构因为模拟系统比较小,因此只要设备表设计合理既可。设备分配采用先来先服务策略

5、。设备回收回收设备后,要注意唤醒等待设备的进程。屏幕显示屏幕显示要求包括:每个设备是否被使用,哪个进程在使用该设备,哪些进程在 等待使用该设备。2.3进程管理的要求进程管理主要包括进程调度,进程的创建和撤销、进程的阻塞和唤醒,中断作用的实 现。2.3.1硬件工作的模拟 时钟的模拟。系统中的绝对时钟和相对时钟用全局变量模拟。系统时钟用来记录开机以后的时间。这里的系统时钟并不是计算机的真正的时钟,这里所说的时间只是一个单位,例如使 用vb中的时钟控件实现,每触发一次timer事件,绝对时钟增1,表示增加一个时间单位, 绝对时钟减1,表减少一个单位时间。 主要寄存器的模拟用全局变量模拟重要寄存器,如

6、cpu重要寄存器,程序状态寄存器PSW(int 0或1)、 寄存器IR,程序计数器PC(int),数据缓冲寄存器DR等。 中断的模拟中断的发现应该是硬件的工作,这里在函数CPU中加检测PSW的方式来模拟在CPU()函数中,每执行一条指令之前,先检查PSW,判断有无中断,若有进行中 断处理,然后再运行解释指令。模拟中断的种类和中断处理方式:程序结束(执行指令end形成的中断,软中断):将结果写入文件out,其中包括文件 路径名和x的值,调用进程撤销原语撤销进程,然后进行进程调度;I/O中断(设备完成输入输出):将输入输出完成的进程唤醒,将等待该设备的一个进 程同时唤醒。时钟中断:进程时间片用完,

7、转为就绪,重新进程调度。缺页中断:发生在根据根据pc取指令时。 中央处理器的模拟用函数CPU()(该函数不能有参数)模拟中央处理器。该函数主要负责解释“可执行文件”中的命令。x=?;x+;x-;!?;end.注意:CPU只能解释指令寄存器IR中的指令。一个进程的运行时要根据进程执行的位 置,将对应的指令存放到指令寄存器中。CPU函数应该不断循环执行的。Cpu函数应该包括的内容:cpu()L:检测有无中断,有进行处理If(缺页中断)缺页中断处理;If (进程结束软中断)撤销进程;进程调度;If (输入输出完成)输入输出中断处理;If (时间片到)进程调度根据pc取指令,若pc所指指令在主存,将指

8、令放入IR寄存器;若不在主存,置中断, 延时,goto L;执行IR指令;解释执行课程设计中的指令pc+延时可以建立一个闲逛进程idle,进程就绪判断正在运行进程是否为idle,是则转向进程调 度。2.3.2进程控制块进程控制块内容包括进程标识符、主要寄存器内容、进程状态、阻塞原因等等。本模 拟系统最多容纳10个进程块。pcb区域用数组模拟。进程控制块根据内容的不同组成不同的队列,空白进程控制块链、就绪队列和阻塞队 列,正在运行的进程只有一个,系统初始时只有空白进程控制块链。2.3.3进程调度采用时间片轮转调度算法,时间片为5。进程调度函数的主要工作是:第一步,将正在运行的进程保存在该进程对应

9、进程控制块中;第二步,从就绪队列中选择一个进程;第三步,将这个进程中进程控制块中记录的各寄存器内容恢复到CPU各个寄存器内。2.3.4进程创建进程创建的主要工作是:第一步,申请空白进程控制块;第二步,申请主存空间,申请成功,装入主存;第三步,初始化进程控制块;第四步,将进程链入就绪队列,根据情况决定是否转向进程调度。2.3.5进程撤销进程撤销的主要工作是:第一步,回收进程所占内存资源;第二步,回收进程控制块;第三步,在屏幕上显示进程执行结果,进程撤销2.3.6进程阻塞进程阻塞的主要工作是:第一步,保存运行进程的CPU现场;第二步,修改进程状态;第三步,将进程链入对应的阻塞队列,然后转向进程调度

10、。进程管理2.3.7进程的唤醒进程唤醒的主要工作是第一步,将进程由阻塞队列中摘下;第二步,修改进程状态为就绪;第三步,链入就绪队列,根据情况决定是否转向进程调度。2.3.8屏幕显示屏幕显示要求包括:显示系统时钟;显示正在运行的进程的进程名、运行的指令、中间结果、相对时钟寄存器内容;显示就绪队列中进程名;显示阻塞队列中进程名。屏幕显示3 系统实现3.1全局变量系统代码中定义了一些全局变量public struct PCB/=进程控制块(public string pcb_name;/进程名public int pcb_num; 进程号public int dr;/数据缓冲寄存器DR缓存,记录结果

11、public int pc;/程序计数器PC进程在内存中的起始地址public int page_adr; /进程页表在内存中的起始地址 public int psw;/程序状态字 PSWpublic char ax, bx, cx, dx;/指令寄存器IR当前正在执行的一条 指令public int next; /下一个进程编号,建立阻塞队列,就绪队列, 空闲队列等之用public char eq; 设备名称public char reason; /设备阻塞原因,reason=A 缺少 A 设备,reason=B缺少B设备,reason=C缺少C设备,o表示不缺设备 public int r

12、esult; /计算结果 public int event_time;/使用资源时间public int pstate; 进程状态,pstate=1 执行,pstate=2,就绪,pstate=3,阻塞 /=进程控制块public struct queue/=二队列 (public int head;public int tail;/=二队列public struct EQUIP/=二二二二二二二二二二二二二二二二设备结构 (public char equ_name;/设备名public int equ_num; /设备号public int flag;/状态标志,1表示占用,0表示空闲/=二

13、=设备结构 public struct page_table /=二页表项结构 (public int page_num; /页号public int block_num;/块号public int state;/表示该页是否已经调入内存,0表示未调入,1表示已调入public int visit; /访问位,最近是否被访问,0表示未访问过,1表示被访问过public int adress; /外存地址/=二页表项结构public static int free_bit;/ 内存空闲块数public static int PC, DR, PA,TIME2;public static int T

14、IME = 5;/时间片public static int PSW = -1;/PSW=-1 表示无程序可运行,PSW=0 无中 断,PSW=1程序结束,PSW=2抢占CPU中断,PSW=3I/O中断public static char AX, BX, CX, DX;/用于保存运行环境public static int fbn = 32;/内存空闲块总数,初始为32public static int time = 0;/表示系统时间public static int pre_block_num=1;/上次分配到的内存块的块号public static int run=T;/i记录对应正在运行的

15、进程控制块的块号,-1表 示系统有无进程正在执行public static byte memory = new byte512;/模拟内存,32 块public static char IR = new char4;public static PCB pcb = new PCB10;/最多 10 个进程控制块public static queue ready = new queue();/就绪队列public static queue wait = new queue();/阻塞队列public static queue empty = new queue();/空白 PCB 队歹0publi

16、c static int bit_map = new int32;/位示图 1 表示占用,0 表 示空闲public static EQUIP口 eq = new EQUIP6;/设备数组public static page_table pages = new page_table10;/ 内存中页表public static EQUIP equipment = new EQUIP6;/6 个设备,用数组表 示public int ETIME = new int6; /各个设备使用一次的时间private List mm = new List();/显示内存public List C = ne

17、w List();/显示磁盘 Cpublic List D = new List(); 显示磁盘 Dprivate List ready_disp = new List();/ 显示就绪 队列进程名字private List wait_disp = new List();/显示阻塞队 列进程名字private List block_reason_disp = new List();/显 示阻塞原因3.2内存分配虚拟页式存储内存分配时,首先,为作业创建进程;其次,根据输入的作业长度,求 出所需内存大小。然后,为作业分配内存,分配内存时,根据位示图分配。分配成功返回 页表在主存的块号,分配失败返回

18、-1。具体流程如图3-1所示:图3-1虚拟页式存储最优分配算法流程图内存分配后,内存区颜色发生变化。如图3-2所示。图3-2内存分配后界面3.3内存回收当进程撤销时,回收其所占内存空间。回收时先找到进程页表在内存中的起始地址, 根据页表回收进程所占物理块,最后回收页表所占内存。内存回收成功返回1,不成功返 回-1。归还内存的具体流程如图3-3所示:内存回收后颜色恢复。如图3-4所示。图3-4内存回收后的界面显示3.4创建进程当执行可执行文件或直接执行命令时,需创建进程,用create(stringstr)函数实现。 为作业创建进程时,首先申请空白进程控制块,申请成功再申请主存空间。申请主存空间

19、 时,根据内存分配函数(allocate(string job, int pi)判断是否申请成功,若申请成 功,则调用装入主存函数(load(string str, int pi),将进程装入主存。然后,初始 化进程控制块。最后把进程链入就绪队列,根据情况决定是否转向进程调度。若转向进程 调度,则调用进程调度函数(schedule。)。创建进程的具体流程如图3-5所示:开始申请空白PCB初始化PCB1 f将进程链入就绪队列界面显示,进程调度schedule()图3-5里程创建流程图PCB不够10块时系统有信息提示,如图3-6所示。图3-6 PCB不够10块时的界面显示3.5撤销进程进程结束时,

20、即读到end指令后,传递指向当前正在运行的指针,撤销当前进程。撤 销进程函数为destroy(int pn)。撤销进程时,首先回收进程所占内存资源;然后,回收 进程控制块;最后,在屏幕上显示进程执行结果,进程撤销。撤销进程后,进程的显示也 要改变。函数实现public int destroy(int pn)int a;if (pn 9)/进程标识符不正确return -1;/=第一步,回收进程所占内存资源recycle(pn);if (recycle(pn) = -1)回收内存资源不成功MessageBox.Show(内存资源回收不成功!”);return -1;else回收内存资源成功,然后

21、回收进程控制块a = DR; /记录结果/=第二步,回收进程控制块if (empty.tail = -1 & empty.head = -1) 将进程控制块挂入空闲队列 empty.tail = empty.head = pn;pcbpn.next = -1;elsepcbempty.tail.next = pn;pcbpn.next = -1;empty.tail = pn;/=第三步,在屏幕上显示进程执行结果,进程撤销 MessageBox.Show(x= + a);if (ready.head = -1)for (int i = 0; i 10; i+)ready_dispi.Text

22、=;timer5.Enabled = false;return 1;3.6进程调度当前一进程结束时,CPU会调度就绪队列中的进程。进程调度时,从就绪队列中选择 进程运行。具体函数设计如下:public int schedule()/成功返回 1,失败返回-1(if ( ready.head = -1&ready.tail = -1 ) (PSW = -1;run = - 1;return -1;int pi;pi = ready.head;if (pi != -1)(ready.head = pcbpi.next;恢复cpu现场PC = pcbpi.pc;PA = pcbpi.page_adr

23、;DR = pcbpi.dr;run = pi;显示选中将被执行的进程if (run != -1)(textBox_on.Text = run.ToString();textBox6.Text = DR.ToString();textBox30.Text = IR0.ToString() + IR1.ToString() +IR2.ToString() + IR3.ToString(); ; /正在执行指令 textBox29.Text = TIME.ToString();else if(run=-1)(/textBox_on.Text = 闲逛进程; textBox30.Text = ; /

24、正在执行指令 textBox6.Text = ; /中间结果 textBox29.Text = ;/ 时间片 return -1;3.7进程阻塞进程申请设备不够或产生中断时,则阻塞该进程。阻塞进程时,先保存运行进程的CPU 现场;再修改进程状态为阻塞;最后将进程链入对应的阻塞队列并在界面上显示结果,然 后转向进程调度。流程设计如图3-7所示:图3-7进程阻塞流程图由于缺少设备进程被阻塞后,在阻塞队列区域显示阻塞的进程名和阻塞原因。如图 3-8所示。图3-8进程阻塞后的界面显示3.8进程唤醒占有某设备的进程归还设备时,要唤醒阻塞队列中等待该设备的进程。进程唤醒时, 首先要将进程由阻塞队列中摘下;

25、然后,修改进程状态为就绪;最后,链入就绪队列,并 在屏幕上显示新的就绪进程,根据情况决定是否转向进程调度。函数主要内容如下:public void awake(char equipment)/记录设备名称(int i, j, h, k, s;/=第一步,将进程由阻塞队列中摘下/寻找将要唤醒的一项,用i记录,j记录i的前一项j = -1;i = wait.head;if (i = -1) 没有等待该设备的进程,则将设备归还return;while (i != -1 & pcbi.reason != equipment)/ 阻塞队列不为空 且原因符合时跳出,i为所求(j = i;i = pcbi.

26、next;/有等待该设备的进程,把该进程摘下后挂入就绪队列if (i != -1)(if (j = -1)/等待队列的第一个就需要该设备(wait.head = pcbwait.head.next;if (wait.head = -1)/ 阻塞队列为空了wait.tail = -1;else/需要设备的不是第一个pcbj.next = pcbi.next;if (ready.tail = -1 & ready.head = -1)/就绪队列为空(ready.tail = ready.head = i;pcbready.tail.pcb_num = i;pcbready.tail.next =

27、-1;else/就绪队列不空(ready.tail = i;pcbready.tail.pcb_num = i;pcbi.next = -1;/=第二步,修改进程状态为就绪pcbi.pstate = 2;/=第三步,链入就绪队列,根据情况决定是否转向进程调度 schedule();3.9设备申请进程申请设备时,调用AppEquip函数。首先,找到进程需要的设备。若设备空闲,分 配给进程,否则,将该里程阻塞。最后,要在设备显示栏显示设备情况。流程如图3-9所示:图3-9设备分配流程图申请设备到设备后设备区域会显示相应设备的占用进程名和占用时间。如图3-10 所示。图3-10申请设备后的界面显示3

28、.10装入主存创建进程成功后,将进程装入主存。public int load(byte str, int pi)/作业,进程控制块号(pagespi.block_num = pcbpi.page_adr;/进程在内存中的起始地址int adr1 = pcbpi.page_adr;/进程页表始址int byte_num = 0;/每块字节数for (int i = 0; i str.Length; i+)(if (byte_num 16)(memoryadr1+ = stri;byte_num+;else(pagespi.block_num+;adrl = memorypagespi.block

29、_num* 16;/到下一个内存块 byte_num = 0;return 1;3.11设备回收设备使用完毕后,回收设备,并在设备显示栏中改变设备占用情况。具体回收时间为 对应设备时间计时到0。3.12中断处理函数该函数主要实现三种中断,即:程序结束(执行指令end形成的中断,软中断):得到x的值,调用进程撤销原语撤销 进程,然后进行进程调度;I/O中断(设备完成输入输出):将输入输出完成的进程唤醒,将等待该设备的一个进 程同时唤醒;时钟中断:进程时间片用完,转为就绪,重新进程调度。中断的检测通过检测全局变量PSW来实现,PSW=1程序结束,PSW=2抢占CPU中 断,PSW=3I/O中断。检

30、测到中断时,分别进行处理。3.13 CPU 函数CPU只能解释指令寄存器IR中的指令。一个进程的运行时要根据进程执行的位置,将 对应的指令存放到指令寄存器中。CPU函数应该不断循环执行的。public static int finish = 0;public void CPU()(int a, s;char eq;程序状态字PSW,PSW=-1表示无程序可运行,PSW=0无中断,PSW=1程序 结束,PSW=2抢占CPU中断,PSW=3I/O中断if (PSW = -1)(textBox_on.Text =闲逛进程;textBox30.Text = ; /正在执行指令textBox6.Text

31、 = ; /中间结果textBox29.Text = ;/ 时间片 return;else if (PSW = 0)(if (run = -1)/没有运行的进程(s = schedule();/调度新进程if (s = 0)/就绪队列为空,调用闲逛进程(a = 0;textBox_on.Text = 闲逛进程;textBox30.Text = ;/正在执行指令textBox6.Text = ;/ 中间结果textBox29.Text = ;/ 时间片 return;else /if (run != -1)/还有进程(finish = 0;mmPC / 4 - 1.BackColor = Col

32、or.FromArgb(255, 128, 0);/ 修改颜色,变回占内存状态AX = Convert.ToChar(memorypcbrun.pc); /读出指令BX = Convert.ToChar(memorypcbrun.pc + 1);CX = Convert.ToChar(memorypcbrun.pc + 2);DX = Convert.ToChar(memorypcbrun.pc + 3);PC = pcbrun.pc + 4;pcbrun.pc = PC;pcbrun.ax = AX;pcbrun.bx = BX;pcbrun.cx = CX;pcbrun.dx = DX;I

33、R0 = AX;IR1 = BX;IR2 = CX;IR3 = DX;if (IR1=)(DR = (int)(IR2) - 48;else if (IR1 = +)(DR+;else if (IR1=-)(DR-;else if (IR0 = !)(a = (int)(IR2) - 48; /记录需要占用设备多长时间eq = IR1;AppEquip(eq, run, a);/调用设备申请函数else if (IR0 = e)(if (PSW = 0)PSW = 1;textBox30.Text = IR0.ToString() + IR1.ToString() +IR2.ToString(

34、) + IR3.ToString();/正在执行指令textBox_on.Text = run.ToString();/MessageBox.Show(运行结果为:x= + DR);textBox6.Text = 变量值为 + DR.ToString();finish = 1;else/有中断时interrupt。;CPU处理中断时界面当前指令处显示处理的是哪种中断。End中断如图3-11所示,I/O 中断如图3-12所示,时间片中断如图3-13所示。图3-11 CPU处理end中断时的界面显示图3-12 CPU处理I/O中断时的界面显示图3-13 CPU处理时钟中断时的界面显示4 结束语通过

35、做操作系统课程设计,对操作系统内部的工作原理了解地更加清楚了。对于操作 系统的实现方法,有了更深入的理解,对于书本上概念、方法的说明也有了深层次的体会。 通过实验,熟悉了。#语言的运用方法,并进一步提高了自己的编程能力。当然,在做设计 的过程中,也遇到了不少问题,通过对这些问题的解决,巩固了自己的理论知识,同时也 增强了自己分析解决问题的能力。参考文献1 王煜.张明.刘振鹏.操作系统(第二版).北京:中国铁道出版社,20102 王煜.张明.刘振鹏.操作系统习题解答与实验指导.北京:中国铁道出版社,20093 James Foxall. Visual C# 2008入门经典.张劼.译.北京:人民邮电大学出版社,2010

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号