操作系统实验指导书
- 格式:doc
- 大小:154.00 KB
- 文档页数:26
《操作系统》课程实验指导书 信电工程学院 周宏生 2013年9月 目 录 前言 .................................................................................................................................................. 1 实验要求........................................................................................................................................... 2 实验准备........................................................................................................................................... 3 实验一 进程管理 ......................................................................................................................... 4 实验二 存储管理 ......................................................................................................................... 7 实验三 设备管理 ....................................................................................................................... 10 实验四 文件管理 ....................................................................................................................... 14 1 前言 “操作系统”是计算机及相关专业的必修课程,在学习计算机操作系统理论的同时,通过实验可以加强对操作系统基本原理的理解。让学生通过上机实验验证计算机操作系统的难点,增加学生对计算机操作系统的领悟和掌握。使学生对计算机操作系统的工作原理和工作过程有深刻的体会和理解,同时又锻炼了程序编制能力和学生创造能力。 本课程共设8个学时,实验主要由进程管理、存储管理、设备管理、文件管理等4个主要几个部分所组成。其中验证类实验占25%、设计类实验占75%,每个实验2学时。考虑由于学生C语言基础较并且不平衡,本课程实验安排了实验准备(由学生课下完成),主要了解掌握TurboC2.0编程环境、掌握C语言编程的基本编制方法和技巧,为后继的实验做准备。这些实验能很好地解决配合操作系统课程教学来指导学生进行实践的问题。 2
实验要求 1. 学生按照实验要求,上机前写好上机实验预习报告,内容包括:实验的目的、内容、实验步骤(程序)。 2. 上机实验时按实验要求完成每一个实验的内容。 3. 课后认真书写实验报告。实验报告采用统一的实验报告纸,实验封面包括:课程名称、实验名称、实验序号、班级、姓名、学号、实验时间。实验报告书写规范,应包括:实验目的和要求、实验内容、实验步骤、实验记录(程序)。 4. 遵守机房纪律,服从辅导员教师指挥,爱护实验设备。 5. 实验课程不迟到。如有事不能出席,所缺实验一般不补。 3
实验准备 一. 实验目的 熟悉TurboC2.0基本编程环境 掌握C语言的基本编程方法 二. 实验内容与要求 (一) TurboC2.0的基本操作 1、 TurboC2.0的基本操作 2、 运行一个C语言程序的一般过程 3、 编辑并保存存一个C语言程序 4、 编译、链接源程序文件 5、 运行与查看程序结果 (二) C语言程序的基本编程方法 1、 数据类型、运算符、表达式 2、 数据的输入、输出 3、 C语言程序的基本控制结构 4、 数组 5、 函数与程序结构 6、 指针 7、 结构与联合 8、 文件操作 (可通过网络查找TurboC2.0用户说明书,并在其指导进行操作,并要求人手一本C语言程序设计教材并上机练习) 4
实验一 进程管理 一、掌握进程及进程调度的概念、三种基本状态及转换 二、实验内容 1、复习进程的概念、进程调度的含义、进程的三种基本状态及转换 2、编制一个模拟进程调度的程序 三、参考程序
#include"stdio.h" #define running 1/*用running表示进程处于运行状态*/ #define aready 2/*用aready表示进程处于就绪状态*/ #define blocking 3/*用blocking表示进程处于等待状态*/ #define sometimes 5/*用sometime表示时间片大小*/ #define n 10/*假定系统允许进程个数为10*/ struct { int name;/*进程标识符*/ int status;/*进程状态*/ int ax,bx,cx,dx;/*进程现场信息,通用寄存器内容*/ int pc;/*进程现场信息,程序计数器内容*/ int psw;/*进程现场信息,程序状态寄存器内容*/ int next;/*下一个进程控制块的位置*/ }pcbarea[n];/*定义模拟进程控制块区域的数组*/
int PSW,AX,BX,CX,DX,PC,TIME;/*模拟寄存器*/ int run;/*定义指向正在运行进程的进程控制块的指针*/ struct { int head; int tail; }ready;/*定义指向正在运行进程的进程控制块的指针*/
int block;/*定义指向等待队列的指针*/ int pfree;/*定义指向空闲进程控制块队列的指针*/
sheduling() /*进程调度函数*/ { int i; if(ready.head==-1)/*空闲进程控制块队列的指针*/ { printf("无就绪进程\n"); 5
return 0; } i=ready.head;/*就绪队列头指针赋给i*/ ready.head=pcbarea[ready.head].next;/*就绪队列头指针后移*/ if(ready.head==-1) ready.tail=-1;/*就绪队列为空,修正尾指针 ready.tail*/ pcbarea[i].status=running;/**/ TIME=sometimes;/*设置相对时钟寄存器*/ /*恢复该进程现场信息*/ AX=pcbarea[run].ax; BX=pcbarea[run].bx; CX=pcbarea[run].cx; DX=pcbarea[run].dx; PC=pcbarea[run].pc; PSW=pcbarea[run].psw; /*修改指向运行进程的指针*/ run=i; return 0; }/*进程调度函数结束*/
create(int x) /*创建进程*/ { int i; if(pfree==-1)/*空闲进程控制块队列为空*/ { printf("无空闲进程控制块,进程创建失败\n"); return 0; } i=pfree;/*取空闲进程控制块队列的第一个*/ pfree=pcbarea[pfree].next;/*pfree后移*/ /*填写该进程控制内容:*/ pcbarea[i].name=x; pcbarea[i].status=aready; pcbarea[i].ax=x; pcbarea[i].bx=x; pcbarea[i].cx=x; pcbarea[i].dx=x; pcbarea[i].pc=x; pcbarea[i].psw=x; if(ready.head!=-1) { /*就绪队列不空时,挂入就绪队列方式*/ 6
pcbarea[ready.tail].next=i; ready.tail=i; pcbarea[ready.tail].next=-1; } else { /*就绪队列为空时,挂入就绪队列方式*/ ready.head=i; ready.tail=i; pcbarea[ready.tail].next=-1; } return 0; }/*进程创建函数结束*/
main() { /*系统初始化*/ int num,j; run=ready.head=ready.tail=block=-1; pfree=0; for(j=0;j pcbarea[j].next=j+1; pcbarea[n-1].next=-1; printf("输入进程编号(避免编号的冲突,以负数输入结束,最多可以创建10个进程):\n"); scanf("%d",&num); while(num>0) { create(num); scanf("%d",&num); } sheduling(); if(num!=-1) { printf("进程名 进程状态 寄存器内容:ax bx cx dx pc psw:\n");
printf("%4d%10d%3d%3d%3d%3d%3d%3d\n",pcbarea[run].name,pcbarea[run].status,pcbarea[run].ax,pcbarea[run].bx,pcbarea[run].cx,pcbarea[run].dx,pcbarea[run].pc,pcbarea[run].psw); } }/*main结束*/