请大家帮我完成这个实验(老师一共留了3个,只会做前两个......)
一、实验目的
掌握操作系统中的设备缓冲区管理算法。
二、实验内容
假设系统中有两个分别名为P1、P2的进程及两台均可进行输入、输出操作的设备d1、d2。两个进程可以从两台设备中的任何一台输入数据,并可以向其中的任何一台设备输出数据。编写C程序,模拟操作系统中使用的设备缓冲区管理算法,完成上述进程的输入、输出操作及数据处理任务。
1定义一个由10个元素构成的结构数组buffer[10],作为系统中的缓冲区。
struct buffer
{ int count; //缓冲区中现在的字符个数
char databuf[100]; //数据区
struct buffer *p; //用作队列指针
} buffer1[10];
2. 定义下列队列的队首指针
空缓冲区队列
设备1的输入队列
设备1的输出队列
设备2的输入队列
设备2的输出队列
3. 编写函数init( )完成缓冲区和各个队列的初始化操作。
4编写函数getbuf( )与putbuf( ),分别完成从队列中取出一个缓冲区及队列中放入一个缓冲区的操作。
5编写函数devrw(devnum , flag)完成设备的读写操作。其中参数devnum指出需要进行I/O操作的设备,flag为操作类型。
读操作:
从空队列中取出一个缓冲区;
从终端读入一行字符串,放入缓冲区的数据区;
按照指定的设备号将缓冲区放入相应的设备输入队列。
写操作
按照指定的设备号,从设备的输出队列中取出一个装满数据的缓冲区;
将缓冲区中的数据在终端上显示;
将空缓冲区放入空缓冲区队列。
6. 编写函数process(procnum,inputdev,outputdev),完成进程的数据处理。其中procnum为进程号,用于指定不同的数据处理操作;inputdev与outputdev分别为输入、输出设备号。
process()在执行时完成下列操作:
按照inputdev指定的设备号从该设备的输入队列中取出一个缓冲区;
按照procnum的序号对缓冲区中的数据进行指定的数据处理操作;
按照outputdev指定的设备号将缓冲区放入该设备的输出队列。
在上述数据处理操作中,应在输出数据的头部插入相应进程的标志,如“PROC1”,并可在下列算法中选用所需的算法。
颠倒字符串的顺序;
大、小写字母转换;
在字符串中进行某些代换或添加某些信息;
其他算法。
7. 编写main( )函数完成下列操作:
调用init()函数完成初始化操作;
从终端输入命令,对设备的“输入、输出”及进程的“运行”进行控制。
三、实验要求
在程序运行的结果中应包含设备1与设备2的输入、输出信息,并能对这些信息加以区别。
在程序执行过程中,当访问的某一个队列为空时,应输出相应的信息。在程序执行过程中,至少应包含空缓冲区队列与某个设备队列各有一次为空的信息。