操作系统实验设备的管理spooling.doc
文本预览下载声明
实验五 设备管理(spooling 技术)
?
实验题目:编写一个Spooling 程序来模拟假脱机输入输出过程
2
一、实验目的
假脱机(Spooling)技术是广泛用于各种系统的一种行之有效的输入输出手段,这种技术使用比较简单的方法,缓和了处理机与低速输入输出设备速度不匹配的矛盾,提高设备的利用率。为了更好地掌握这种技术,本实习要求学生独立地用高级语言编写一个Spooling程序来模拟假脱机输入输出过程。
二、实验要求及实验环境
可将Spooling 输入输出程序编制成一个独立的进程与其它要求输入输出的进程并发工作。Spooling 进程负责从卡片机或光电读带机等设备读入信息送到磁盘或磁鼓的输入井中,或是把磁盘、磁鼓输出井的信息块送到打印机或CRT 等设备输出。其余进程只要求编写输入输出部分的程序,可不考虑其它操作。
本实验编制一个Spooling 输出进程与另外二个要求输出的进程并发运行。要求输出进程每运行一次只输出一项信息到输出井,待输出到一个结束标志时,表示一批信息输出完成,在输出井中形成一输出信息块,再由Spooling 进程把整个信息块实际输出到打印机或CRT。因此,进程的运行必须考虑同步问题。
采用进程的随机调度法模拟Spooling 输出是合适的,因为各进程的输出应是随机的。
(1)进程调度采用随机调度法,二个要求输出进程的调度概率各为45%,Spooling 进程为10%。
(2)可为进程设置三种工作状态:可运行状态,不可运行状态和结束状态。为了区分要求输出进程和Spooling 进程处于不可运行状态的不同原因,又把不可运行状态分成不可运行状态1 和2。分别叙述如下:
①进程执行完毕后应置成“结束状态”。
②要求输出进程在输出信息时,如发现输出井已满,应置成“不可运行状态1”。
③Spooling 进程在输出井空时应置成“不可运行状态2”。
④Spooling 进程输出一个信息块后,应释放该信息块所占的输出井位置,并将正在等待输出的进程置成“可运行状态”。
⑤要求输出进程在输出信息到输出井并形成信息块后,应将Spooling 进程置成“可运行状态”。
三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)
1.流程图
4
图 假脱机输出系统框图
5
图 请求输出进程程序框图
6
图 Spooling 进程程序框图
2.逻辑设计
①进程控制块(PCB)
对于输出进程和spooling 进程两种不同的进程,采用相同的结构处理,包括进程标识,进程状态,输出缓冲,输出指针,信息块首地址,输出长度等内容。需要支持在不同状态之间的转换,输出缓冲晴空等操作。
②输出请求块包括要求输出的进程标识,输出长度,输出首地址等内容。7
③输出井使用队列结构模拟。需要支持队列重整,取队首元素,删除队首元素,在队尾插入等操作,需要使用closed,open 两个指针协助操作。
3、物理设计
①进程控制块(PCB)
struct info_PCB
{
long ID;//进程标识
long status;//状态
long po;//输出指针
long head;//信息块首地址
long count;//输出长度
long wait[1000];//输出缓冲
}PCB[4];
②输出请求块
struct info_block
{
long ID;//要求输出的进程
long len;//输出长度
long head;//输出首地址
}block[128];
③输出井
struct info_wall
{
long num[10000];//输出内容
long open,closed;//队列指针
}wall[3];
四、测试结果
实际运行的结果如下:
Input the times of user1s output file:4
Input the times of user2s output file:7
Process 2 produces a block 1!
Process 1 produces a block 2!
Output block 1: (ID=2)
1 1 4 8 9 3 7 1 8 3 2 8 6 2 8 0
8
Process 2 produces a block 3!
Process 2 produces a block 4!
Output block 2: (ID=1)
2 4 5 9 5 9 8 5 4 9 4 8 0
Output block 3: (ID=2)
7 6 2 8 3 0
Process 2 produces a block 5!
Process 2 produces a block 6!
Output block 4: (ID=2)
6 0
Pr
显示全部