操作系统实验指导书.docx
《操作系统实验指导书.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导书.docx(18页珍藏版)》请在冰豆网上搜索。
操作系统实验指导书
操作系统实验指导书
北京城市学院信息学部
2013年8月
实验一进程管理
1.目的和要求
通过实验理解进程的概念,进程的组成(PCB结构),进程的并发执行和操作系统进行进程管理的相关原语(主要是进程的创建、执行、撤消)。
2.实验内容
用C语言编程模拟进程管理,至少要有:
创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能。
3.实验环境
Windows操作系统、VC++6.0
C语言
4.实验提示
PCB结构通常包括以下信息:
进程名,进程优先数,轮转时间片,进程所占用的CPU时间,进程的状态,当前队列指针等。
可根据实验的不同,PCB结构的内容可以作适当的增删。
主体程序
#include"conio.h"
#include"stdio.h"
#include"stdlib.h"
structPCB_type
{intpid;
intpriority;
intcputime;
………
};
structPCB_typeneicun[20];
intshumu=0,pid_l;
main()
{
intn,m,i;
chara;
n=1;
while(n==1)
{
clrscr();
printf("\n********************************************");
printf("\n*进程演示系统*");
printf("\n********************************************");
printf("\n1.创建新的进程2.查看运行进程");
printf("\n3.换出某个进程4.杀死运行进程");
printf("\n5.进程之间通信6.退出系统");
printf("\n********************************************");
printf("\n请选择(1~6)");
a=getchar();
switch(a)
{case'1':
create();
break;
case'2':
run();/*自定义过程*/
break;
case'3':
huanchu();/*自定义过程*/
break;
case'4':
kill();
break;
case'5':
tongxun();/*自定义过程*/
break;
case'6':
exit(0);
default:
n=0;
}
}
}
create()/*创建一个进程的示例(不完整的程序)*/
{
if(shumu>=20)
{
printf("\n内存已满,请先结束或换出进程\n");
}
else
{
printf("\n请输入新进程的pid\n");
scanf("%d",&neicun[shumu-1].pid);
printf("\n请输入新进程的优先级\n");
scanf("%d",&neicun[shumu-1].youxian);
printf("\n请输入新进程的大小\n");
scanf("%d",&neicun[shumu-1].daxiao);
shumu++;
}
}
5.实验运行结果
********************************************
*进程演示系统*
********************************************
1.创建新的进程2.查看运行进程
3.换出某个进程4.杀死运行进程
5.进程之间通信6.退出系统
********************************************
请选择(1~6)
然后根据你选择的不同,出现不同的结果。
6.实验要求:
1)上机前认真使用C语言编写好程序,采用VisualC++6.0作为编译环境;
2)上机时独立调试程序
3)根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、设计思想、源程序、实例运行结果、总结)。
实验二进程调度
1.目的和要求
通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。
2.实验内容
阅读教材《计算机操作系统》第二章和第三章,掌握进程管理及调度相关概念和原理。
编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。
假设初始状态为:
有n个进程处于就绪状态,有m个进程处于阻塞状态。
采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。
程序要求如下:
1)输出系统中进程的调度次序;
2)计算CPU利用率。
3.实验环境
Windows操作系统、VC++6.0
C语言
4.实验提示
用C语言实现提示:
1)程序中进程可用PCB表示,其类型描述如下:
structPCB_type
{
intpid;//进程名
intstate;//进程状态
2——表示“执行”状态
1——表示“就绪”状态
0——表示“阻塞”状态
intcpu_time;//运行需要的CPU时间(需运行的时间片个数)
}
2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。
队列类型描述如下:
structQueueNode{
structPCB_typePCB;
StructQueueNode*next;
}
并设全程量:
structQueueNode*ready_head=NULL,//ready队列队首指针
*ready_tail=NULL,//ready队列队尾指针
*blocked_head=NULL,//blocked队列队首指针
*blocked_tail=NULL;//blocked队列队尾指针
3)设计子程序:
start_state();//读入假设的数据,设置系统初始状态
dispath();//模拟调度
calculate();//计算CPU利用率
5.实验要求:
1)上机前认真使用C语言编写好程序,采用VisualC++6.0作为编译环境;
2)上机时独立调试程序
3)根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、设计思想、源程序、实例运行结果、总结)。
4)测试用数据:
n=2
m=3
t=5
ready_head
blocked_head
dispath()算法流程图:
/*use_cpu中记录CPU运行时间
/*unuse_cpu中记录CPU空闲时间
否
是
是否
是
否
是
是
否
是
实验三可变分区存储管理
1.目的和要求
通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。
2.实验内容
阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。
编写程序模拟实现内存的动态分区法存储管理。
内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区的合并。
假定系统的内存共640K,初始状态为操作系统本身占用64K。
在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E请求50K的内存空间;在t4时间之后,作业D完成。
要求编程序分别输出t1、t2、t3、t4时刻内存的空闲区的状态。
3.实验环境
Windows操作系统、VC++6.0
C语言
4.实验提示
用C语言实现提示:
1.程序中自由链队列的结点类型可描述如下:
structfreelink{
intlen,address;/*len为分区长度
/*address为分区起始地址
structfreelink*next;
}
内存占用区用链表描述,其结点类型描述如下:
structbusylink{
charname;/*作业或进程名name=’S’表示OS占用
intlen,address;
structbusylink*next;
}
并设全程量:
structfreelink*free_head=NULL;//自由链队列(带头结点)队首指针
structbusylink*busy_head=NULL,//占用区队列队(带头结点)首指针
*busy_tail=NULL;//占用区队列队尾指针
2.设计子函数:
voidstart(void);/*设置系统初始状态*/
{structfreelink*p;
structbusylink*q;
free_head=(structfreelink*)malloc(sizeof(structfreelink));
free_head->next=NULL;//创建自由链头结点
busy_head=busy_tail=(structbusylink*)malloc(sizeof(structbusylink));
busy_head->next=NULL;//创建占用链头结点
p=(structfreelink*)malloc(sizeof(structfreelink));
p->address=64;
p->len=640-64;(OS占用了64K)
p->next=NULL;
free_head->next=p;
q=(structbusylink*)malloc(sizeof(structbusylink));
q->name=’S’;/*S表示操作系统占用*/
q->len=64;q->address=0;q->next=NULL;
busy_head->next=q;busy_tail=q;
}
voidrequireMemo(charname,intrequire);/*模拟内存分配*/
voidfreeMemo(charname);/*模拟内存回收*/
voidpast(inttime);/*模拟系统过了time时间*/
voidprintlink();/*输出内存空闲情况(自由链的结点)*/
3.设计主函数:
main()
{start();
past(t1);
requireMemo(‘A’,8);requireMemo(‘B’,16);
requireMemo(‘C’,64);requireMemo(‘D’,124);
printlink();
past(t2);
freeMemo(‘C’);
printlink();
past(t3);
requireMemo(‘E’,50);
printlink();
freeMemo(‘D’);
printlink();
}
5.实验要求:
1)上机前认真使用C语言编写好程序,采用VisualC++6.0作为编译环境;
2)上机时独立调试程序
3)根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、设计思想、源程序、实例运行结果、总结)。
requireMemo(charname,intrequire)流程图如下:
否
freeMemo(charname)流程图如下:
否
是
否
是
实验四页式虚拟存储管理页面置换算法
1.目的和要求
存储管理的主要功能之一是合理的分配空间。
请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是:
通过编写和调试请求页式存储管理中页面置换算法的模拟程序以加深对存储管理方案的理解,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换方法。
2.实验内容
阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。
编写程序模拟实现页式虚拟存储管理的最佳页面置换算法。
前提:
(1)页面分配采用固定分配局部置换。
(2)作业的页面走向和分得的物理块数预先指定。
可以从键盘输入也可以从文件读入。
(3)置换算法的置换过程输出可以在显示器上也可以存放在文件中,但必须清晰可读,便于检验。
3.实验环境
Windows操作系统、VC++6.0
C语言
4.实验提示
(1)数据结构
要模拟实现某一个置换算法,有如下一些对象需要用相关的数据结构来描述:
●作业的页面走向(执行过程中对页面的访问顺序)。
可以用数组也可以用字符串。
如果用数组,则页面走向的长度受数组长度限制,如果用字符串,则需要将字符串进行解析,将字符串经过解析处理后变成一个页面的排列顺序。
考虑最佳置换算法(“向前看”)和其他置换算法(“向后看“)的特点。
●页框(作业分得的物理块)。
由于作业分得的物理块数在置换算法执行之前已经确定,可以用一些比较简单的数据结构实现。
在综合置换算法的原理,可以灵活采用相应的数据结构(如队列、数组、堆栈),尽可能使程序的时间复杂度最低。
采用不同的数据结构还要配合在数据结构上的相应操作才行。
(2)功能模块划分
大体上可以将整个程序的模块划分成如下几个部分:
1)主模块:
主要是初始化、界面和模块调用。
2)页面走向输入模块。
(从键盘读入数据结构或将页面走向写入文件)
3)置换算法模块。
*判断模块。
决定换出哪一块。
每一种置换算法对应一种判断算法。
*调整模块。
根据判断模块的结果,调整作业分得物理块集合中逻辑页面的情况。
*置换过程输出模块(在显示器上显示或写入文件)。
该模块每发生一次置换,由置换算法模块调用一次。
*……………….
除此之外,有些反复执行的操作考虑用过程或函数实现。
总而言之,整个程序应该结构清晰,界面友好,可读性好,易调试,易扩充,易维护。
5.实验要求:
1)上机前认真使用C语言编写好程序,采用VisualC++6.0作为编译环境;
2)上机时独立调试程序
3)根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、设计思想、源程序、实例运行结果、总结)。
实验五 用户接口实验
1.目的和要求
通过上机操作的实践理解操作系统的作业级接口,着重理解shell的作用和工作过程,通过编写程序,在程序中调用操作系统的系统调用来加深对程序级接口的理解,着重理解系统调用的实现。
2.实验内容
选做任意一个:
●能够熟练使用Linux系统的键盘命令和X-window图形界面,熟悉shell编程语言,编写一个简单的shell程序。
指导学生在内核文件中添加一个自定义的系统调用(或者利用现有操作系统的系统调用),编程来调用自己设计(选定)的这系统调用。
●练习使用DOS的键盘命令,熟悉批处理编程的语法,编写带参数的简单批处理程序,通过使用DOS的作业级接口(键盘命令)和WINDOWS的作业级接口(图形界面)来分别理解二者的shell工作原理。
理解C和IE在操作系统中的作用。
编写汇编语言程序,调用21号软中断,理解系统调用的作用和功能,具体体会其实现。
编写程序,调用windows的API,理解windows的系统调用作用和功能。
3.实验环境
安装有多个操作系统的PC机(DOS、Windows、Linux)
4.实验要求:
1)上机前认真使用C语言编写好程序,采用VisualC++6.0作为编译环境;
2)上机时独立调试程序
3)根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、源程序、运行结果、总结)。