操作系统毕业课程设计总结报告Word文档格式.docx

上传人:b****4 文档编号:6719475 上传时间:2023-05-07 格式:DOCX 页数:28 大小:29.37KB
下载 相关 举报
操作系统毕业课程设计总结报告Word文档格式.docx_第1页
第1页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第2页
第2页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第3页
第3页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第4页
第4页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第5页
第5页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第6页
第6页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第7页
第7页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第8页
第8页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第9页
第9页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第10页
第10页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第11页
第11页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第12页
第12页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第13页
第13页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第14页
第14页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第15页
第15页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第16页
第16页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第17页
第17页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第18页
第18页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第19页
第19页 / 共28页
操作系统毕业课程设计总结报告Word文档格式.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

操作系统毕业课程设计总结报告Word文档格式.docx

《操作系统毕业课程设计总结报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统毕业课程设计总结报告Word文档格式.docx(28页珍藏版)》请在冰点文库上搜索。

操作系统毕业课程设计总结报告Word文档格式.docx

running=removeFirst(ready);

}

}

voidinterupt(){中断

if(running!

=NULL){

add(ready,running);

voidblock(){阻塞

if(running!

add(blocked,running);

voidwakeup(){唤醒

if(blocked->

next!

=NULL){

add(ready,removeFirst(blocked));

}

voidfinished(){终止

free(running);

1.4算法设计及流程图

建立三个链表分别表示就绪队列、执行队列、阻塞队列;

根据不同的命令对相应的队列进行增删改;

1.5小结

(如何实现的?

可以以关键部分流程图、主要数据结构、程序整体框架等内容表示。

二、请求分页存储器管理

2.1目的

通过在第1部分实验基础上实现进程的分页式内存分配和地址转换过程,完成请求分页式存储分配和地址转换过程,掌握页面置换算法:

先进先出(FIFO)、最近最久未使用(LRU)等算法。

2.2完成的内容

1、建立一个位示图,用来模拟内存的分配情况,位示图的位数与设定的物理块个数相同。

程序启动时可利用一组随机0和1填充位示图,表示内存已被占用情况。

2、创建进程时输入进程大小,并根据程序中设定的物理块大小为进程分配物理块,同时建立页表。

3、输入当前执行进程所要访问的逻辑地址,并将其转换成相应的物理地址。

4、进程退出时,根据其页表内容向位示图反向回填“1”。

5、扩充页表,将其变成支持请求和置换功能的二维页表(增加存在位等)。

创建进程时可装入固定的前三页(或键盘输入初始装入页数,不同进程的装入个数可以不同),其余页装入到置换空间内。

6、分别采用FIFO和LRU置换算法对地址转换过程中遇到的缺页现象进行页面置换,可将多次地址转换过程中所涉及到的页号视为进程的页面访问序列,从而计算置换次数和缺页率.

2.3主要数据结构

structpage_table_item

{

intpagenum;

intblocknum;

intexist;

存在位

intmodify;

修改位

intswap_add;

};

2.4算法设计及流程图

voidterminate()

inti,j,p,q;

if(running==NULL)

{

printf("

已结束所有进程!

!

=NULL)

j=ceil(running->

size,PAGE_SIZE);

if(j>

3)

{

for(i=0;

i<

3;

i++)

{

printf("

aaaaa\n"

p=(*(running->

pagetable+i)).blocknum8;

q=(*(running->

pagetable+i)).blocknum%8;

%d"

p);

setbit(&

bitmap[p],q,0);

}

for(i=3;

j;

bbbb\n"

%d%d\n"

p,q);

changemap[p],q,0);

}

else

if(ready!

voidtranslate(){逻辑地址转换成物理地址

printf("

没有执行进程"

else

intlogical;

intpagenum,offset;

intblocknum;

请输入逻辑地址:

\n"

scanf("

&

logical);

pagenum=(int)(logicalPAGE_SIZE);

offset=logical%PAGE_SIZE;

blocknum=(running->

pagetable+pagenum)->

blocknum;

blocknum=*(running->

pagetable+pagenum);

物理地址:

blocknum*PAGE_SIZE+offset);

}blockno=*(running->

pagetable+pageno);

voiddispagetable()显示执行进程页表

inti;

{printf("

return;

for(i=0;

ceil(running->

size,BLOCK_SIZE);

%d%d%d%d%d\n"

(*(running->

pagetable+i)).pagenum,(*(running->

pagetable+i)).blocknum,(*(running->

pagetable+i)).exist,(*(running->

pagetable+i)).modify,(*(running->

pagetable+i)).swap_add);

2.5小结

三、设备管理

3.1目的

通过在前面的实验基础上,完成设备管理功能的模拟,掌握包括通道和控制器的添加和删除,设备的添加、删除,设备的分配和回收。

3.2完成的内容

1、设备管理子系统涉及到系统设备表(SDT)、通道控制表(CHCT)、控制器控制表(COCT)和设备控制表(DCT)来体现输入输出系统的四级结构和三级控制。

2、实现上述设备、控制器以及通道的层次关系,同时能够添加或删除新的设备、控制器或通道。

3、通过键盘命令模拟进程执行过程中提出的设备分配或释放请求,并为此请求分配或释放设备。

分配设备成功后可将进程状态调整为阻塞,释放设备后变为就绪状态。

4、分配设备时应如果该设备已被其它进程占用,则设备分配失败,请求进程进入阻塞状态,同时等待该设备的释放。

如果设备空闲,进程占用设备的同时还应提出申请控制器请求,直到与设备相关的通道都已申请成功为止。

5、设备、控制器或通道的释放应引起对应节点的等待队列中的第一个阻塞进程被唤醒。

如果被唤醒的进程还未完成申请操作,应继续执行上级节点的申请操作。

3.3主要数据结构

structNode*DCTs,*COCTs,*CHCTs;

添加头结点,设备,控制器,通道

structNode*addNode(char*name,structNode*parent,structNode*tmp->

next;

3.4算法设计及流程图

intget_child_count(structNode*node,structNode*childs_count;

structNode*findByName(char*name,structNode*tmp;

tmp=tmp->

%cError:

can'

tfind%s!

BEEP,name);

名为name的节点未找到

returnNULL;

voidremoveNode(char*name,structNode*"

return;

tmp1=tmp2;

tmp2=tmp2->

structNode*addNode(char*name,structNode*parent,structNode*queue)

*voidremoveNode(char*name,structNode*queue){

}*

voidadd_devices(){添加设备

charname[10],parent[10];

while

(1){

1:

adddevice\n"

设备

2:

addcontroller\n"

控制器

3:

addchannel\n"

通道

0:

return\n"

返回主程序

i);

i变量读菜单

if(i!

=0){

name:

scanf("

if(i==1||i==2){

parentname:

parent);

switch(i){

case1:

addNode(name,findByName(parent,COCTs),DCTs);

所添加的设备名在name里,通过parent名在COCT队列中找到父节点,之后以这个节点,这个名称为参数在DCT队列中添加一个新结点

break;

case2:

addNode(name,findByName(parent,CHCTs),COCTs);

case3:

addNode(name,NULL,CHCTs);

通道没有父节点

case0:

return;

voidremove_devices(){

structNode*tmp;

while

(1){

removedevice\n"

removecontroller\n"

removechannel\n"

removeNode(name,DCTs);

tmp=findByName(name,COCTs);

if(tmp==NULL)

elseif(get_child_count(tmp,DCTs)>

0)子节点个数

tremove%s!

else

removeNode(name,COCTs);

tmp=findByName(name,CHCTs);

elseif(get_child_count(tmp,COCTs)>

0)

removeNode(name,CHCTs);

}}

voidallocate_channel(structNode*node,structPCB*p){

if(p==NULL)

if(node->

process==NULL){

node->

process=p;

block(blocked,p);

else

block(node->

ready,p);

voidallocate_controller(structNode*node,structPCB*p){

allocate_channel(node->

parent,p);

voidallocate_device(structNode*node,structPCB*p){

allocate_controller(node->

voidallocate(){

structNode*node;

devicename:

node=findByName(name,DCTs);

if(node==NULL){

Can'

allocate_device(node,running);

voidrelease_channel(structNode*node,structPCB*p){

process==p){

process=NULL;

allocate_channel(node,removeFirst(node->

ready));

add(ready,remove_process(blocked,p));

if(running==NULL)

running=removeFirst(ready);

else{

add(ready,remove_process(node->

ready,p));

if(running==NULL)

running=removeFirst(ready);

voidrelease_controller(structNode*node,structPCB*p){

allocate_controller(node,removeFirst(node->

release_channel(node->

else{

add(ready,remove_process(node->

voidrelease(){

structPCB*p;

node=findByName(name,DCTs);

if(node==NULL||node->

process==NULL)

p=node->

process;

allocate_device(node,removeFirst(node->

release_controller(node->

voiddisplay_process_status(structNode*node){显示节点的占用进程以及等待进程信息

structPCB*p=node->

ready->

process!

<

--%s"

node->

process->

name);

while(p!

p->

p=p->

voiddisplay_status(){显示设备状态

structNode*chct=CHCTs->

next,*coct,*dct;

while(chct!

chct->

display_process_status(chct);

coct=COCTs->

while(coct!

if(coct->

parent==chct){

\t%s"

coct->

display_process_status(coct);

dct=DCTs->

while(dct!

if(dct->

parent==coct){

printf("

\t\t%s"

dct->

display_process_status(dct);

}

dct=dct->

}

coct=coct->

chct=chct->

3.5小结

四、文件管理

4.1目的

通过利用磁盘文件,完成操作系统的文件管理功能,掌握包括目录结构的管理、外存空间的分配与释放以及空闲空间管理三部分。

4.2完成的内容

1、通过初始化操作建立一个模拟外存空间的虚拟磁盘文件,在该文件中保存目录和文件内容。

创建该文件时应创建初始的根目录内容、文件分配表。

2、文件目录项(可以采用FCB格式)应包括类型(目录or文件)、创建日期、大小、第一个磁盘块块号。

3、显示命令提示符“$”,并根据输入命令完成相应的文件操作:

⏹MD(创建子目录):

创建目录文件,并在父目录文件中增加目录项。

⏹CD(切换工作目录):

根据当前目录切换到指定目录。

⏹RD(删除子目录):

搜索所要删除的目录是否为空目录,若是则删除。

⏹MK(创建空文件):

创建指定大小的文件(如输入命令“mktest2000”,表示创建大小为2000字节的test文件),并在父目录中添加文件名称;

还应对FAT表进行适当修改。

⏹DEL(删除文件):

如果所要删除的文件存在,则删除,同时修改父目录内容;

⏹DIR:

列出当前目录的所有目录项。

⏹FORMAT:

根据进一步的虚拟磁盘文件名和块个数信息创建出虚拟磁盘文件。

4.3主要数据结构

structFCB{

charname[8];

intsize;

intfirst_block;

chardatetime[15];

chartype;

charcurrent_directory[256]="

;

当前目录

charformated_file_name[32];

虚拟磁盘文件名

intcurrent_directory_block_no=0;

当前目录块号

4.4算法设计及流程图

voidmd(char*name){

if(!

is_valid_name(name))

s

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2