设计1 读者-写者问题。
一、 问题描述与分析。
在windows2000环境下,创建一个控制台进程,此进程包含n个线程。用这n个线程来表示n个读者或写者。用信号量记者分别实现读者优先和写者优先的读者-写者问题。
分析:可以将所有读者和所有写者分别存于一个读者等待队列和一个写者等待队列中,每当读允许时,就从读者队列中释放一个或多个读者线程进行读操作;每当写允许时,就从写者队列中释放一个写者线程进行写操作。
二、设计要求和目的。
设计要求:1、该读者-写者问题的读写操作限制如下:
1)写-写互斥,即不能有两个写者同时进行写操作。
2)读-写互斥,即不能同时有一个线程在读,而另一个线程在写。
3)读-读允许,即可以有一个或多个读者在读。
2、分别编写读者优先-读者线程、读者优先-写者线程、读者优先处理函数和写者优先-读者线程、写者优先-写者线程、写者优先处理函数。
3、形成测试数据文件。测试数据文件包括n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。
4、运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。
设计目的:
1、在windows 2000环境下,创建一个控制台进程,此进程包括n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求进行读写操作。
2、用信号量机制分别实现读者优先和写者优先的的读者-写者问题。
3、理解并能够灵活使用同步互斥机制和进程间通信机制。
三、背景知识
使用互斥和同步信号量来解决n个进程的临界去问题,这n个进程共享一个互斥信号量mutex,并初始化为1,信号量也可以解决同步问题,进行pv操作。
四、概要设计。
读者优先:读者优先指的是除非有写者在写文件,否则读者不需要等待。所以可以用一个整数变量readcount记录当前的读者数目,用于确定是否需要释放正在等待的写者进程当readcount=0时,表明所有的读者读完,需要释放写者等待队列中的一个写者。
每当一个读者开始读文件时,必须修改readcount变量。因此需要一个互斥对象mutex来实现对全局变量readcount修改时的互斥。
另外,为了实现写-写互斥,需要增加一个临界区对象write。当写者发出写请求时,必须申请临界区对象的所有权。通过这种方法,可以实现读-写互斥,当readcount=1时(即第一个读者到来时),读者线程也必须申请临界区对象的所有权。
当读者拥有临界区的所有权时,写者阻塞在临界区对象write上。当写者拥有临界区的所有权时,第一个读者判断完”readcount==1”后阻塞在write上,其余的读者由于等待对readcount的判断,阻塞在mutex上。
写者优先:写者优先与读者优先相类似。不同之处在于一旦一个写者到来,它应该尽快对文件进行写操作,如果有一个写者在等待,则新到来的读者不允许进行读操作。
为此应当填加一个整形变量write_count,用于记录正在等待的写者的数目,当write_count=0时,才可以释放等待的读者线程队列。为了对全局变量write_count实现互斥,必须增加一个互斥对象mutex3。
为了实现写者优先,应当填加一个临界区对象read,当有写者在写文件或等待时,读者必须阻塞在read上。读者线程除了要对全局变量read_count实现操作上的互斥外,还必须有一个互斥对象对阻塞read这一过程实现互斥。这两个互斥对象分别命名为mutex1,mutex2。
五、详细设计。
定义线程结构体:
struct xiancheng
int xuhao线程序号。
char leibie线程类别。
double kaishi线程开始时间。
double chixu线程读写持续时间。
重要函数:void createduzhe(xiancheng &m) /创建读者函数。
mutex=openmutex(mutex_all_access,false,"mutex_for_readcount");产生互斥信号量
waitforsingleobject(mutex,-1); 等待互斥信号量mutex-1
readcount++;
if(readcount==1)
entercriticalsection(&linjie); 第一个读者等待资源
releasemutex(mutex释放互斥信号量mutex+1
waitforsingleobject(mutex,-1);
readcount--;
if(readcount==0)
le**ecriticalsection(&linjie); 释放资源。
releasemutex(mutex); 释放信号量。
void createxiezhe(xiancheng &n) /创建写者函数。
entercriticalsection(&linjie得到资源。
le**ecriticalsection(&linjie释放资源。
void duzheyouxian读者优先处理函数。
六、结果分析。
测试(正确行测试、效率测试等)、测试结果&结果分析。
七、总结。设计2 存储管理。
一、 问题描述与分析。
描述两种页面置换算法:
1) 定义为进程分配的物理块数;
2)定义进程运行所需访问的页面号;
3)定义页的结构;
4)模拟两种页面置换算法;
5)计算页面置换算法的命中率;
6)比较两种算法的优劣。
二、设计要求和目的。
设计要求:1) 编写程序完成设计内容;
2) 对测试数据进行分析;
3) 撰写设计报告。
设计目的:
1) 加深对存储管理的理解;
2) 掌握几种页面置换算法;
3) 通过设计比较各种置换算法的优劣。
三、背景知识
基于局部性原理,应用程序在运行之前,没有必要全部装入内存,仅须将那些当前要运行的少数页面或段先装入内存便可运行,其余部分暂留在盘上。程序在运行时,如果它所要访问的页(段)已调入内存,便可继续执行下去;但如果程序所要访问的页(段)尚未调入内存(称为缺页或缺段),此时程序应利用os所提供的请求调页(段)功能,将它们调入内存,以使进程能继续执行下去。如果此时内存已满,无法再装入新的页(段),则还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调至盘上,腾出足够的内存空间后,再将要访问的页(段)调入内存,使程序继续执行下去。
四、概要设计。
先进先出(fifo)页面置换算法。
这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。
但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,fifo算法并不能保证这些页面不被淘汰。
最近最久未使用(lru)置换算法。
fifo置换算法性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。最近最久未使用(lru)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法**各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,lru置换算法是选择最近最久未使用的页面予以淘汰。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。
五、详细设计。
int findexist(int curpage)//查找内存中是否有该页面。
int findspace()/查找是否有空闲内存。
int findreplace()/查找应予置换的页面。
void display()/显示。
void fifo()/fifo算法。
void lru()/lru算法。
六、结果分析。
测试(正确行测试、效率测试等)、测试结果&结果分析。
七、总结。
操作系统课程设计
课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...
操作系统课程设计
银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...
操作系统课程设计
学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....