搜档网
当前位置:搜档网 › 操作系统原理课程设计读者-写者问题的实现

操作系统原理课程设计读者-写者问题的实现

操作系统原理课程设计读者-写者问题的实现
操作系统原理课程设计读者-写者问题的实现

*******************

实践教学

*******************

计算机与通信学院

2012年秋季学期

操作系统原理课程设计

题目:读者-写者问题的实现

专业班级:

姓名:

学号:

指导教师:

成绩:

目录

摘要 (2)

1.设计思想 (3)

2.各模块的伪码算法 (4)

3. 函数关系调用图 (6)

4.程序测试结果 (7)

设计总结 (10)

参考文献 (11)

致谢 (12)

摘要

本设计的读者写者问题,是指一些进程共享一个数据区。数据区可以使一个文件、一块内存空间或者一组寄存器。Reader进程只能读数据区中的数据,而writer进程必须与其他进程互斥地访问共享对象的同步问题。

读者写者问题可以这样的描述, 有一群写者和一群读者, 写者在写同一本书, 读者也在读这本书, 多个读者可以同时读这本书。但是,只能有一个写者在写书, 并且,读者必写者优先,也就是说,读者和写者同时提出请求时,读者优先。当读者提出请求时需要有一个互斥操作, 另外, 需要有一个信号量S来确定当前是否可操作。

本设计方案就是通过利用记录型信号量对读者写者问题的解决过程进行模拟演示,形象地阐述记录型信号量机制的工作原理。

关键词:共享对象,互斥,同步,信号量

1.设计思想

本设计借助C语言实现进程同步和互斥的经典问题--读者写者问题,用高级语言编写和调试一个进程同步程序,以加深对进程同步机制的理解。通过用C 语言模拟进程同步实现,加深理解有关进程同步和互斥机制的概念及P、V操作的应用。学生通过该题目的设计过程,掌握读者、写者问题的原理、软件开发方法并提高解决实际问题的能力。

在 Windows环境下,创建一个包含n个线程的控制台进程。用这n个线每个线程按相应测试数据文件的要求,进行读写操作。程来表示 n 个读者或写者。请用信号量机制分别实现读者优先和写者优先的读者-写者问题。

将所有的读者和所有的写者分别放进两个等待队列中,当读允许时就让读者队列释放一个或多个读者,当写允许时,释放第一个写者操作。

读者-写者的读写限制(包括读者优先和写者优先)

1)写-写互斥,即不能有两个写者同时进行写操作;

2)读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写;

3)读读允许,即可以有 2 个以上的读者同时读;

4)读者优先附加条件:如果一个读者申请进行读操作,同时又有一个读操作正在进行读操作,则该读者可以直接开始读操作;

5)写者优先附加条件:如果一个读者申请进行读操作时已经有一个写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。

2.各模块的伪码算法

读者优先算法:

设置两个互斥信号量:

rwmutex 用于写者与其他读者/写者互斥的访问共享数据

rmutex 用于读者互斥的访问

读者计数器 readcount

semaphore rwmutex=1, rmutex=1;

int readcount = 0;

reader i //读者进程i=1,2,….

do{

P(rmutex); //读者互斥

readcount++; //读者数加1

if (readcount == 1) P(rwmutex); //读者写者互斥

V(rmutex);

读者读数据;

P(rmutex);

Readcount--;

if (readcount == 0) V(rwmutex);

V(rmutex);

}while(1);

writer j //写者进程j = 1,2,….

do{

P(rwmutex);

写文件;

V(rwmutex);

}while(1);

写者优先算法:

设置三个互斥信号量:

rwmutex 用于写者与其他读者/写者互斥的访问共享数据

rmutex 用于读者互斥的访问

读者计数器readcount

nrmutex 用于写者等待已进入读者退出,所有读者退出前互斥写操作semaphore rwmutex= 1,rmutex= 1,nrmutex= 1;

int readcount = 0;

reader i //读者进程i=1,2,….

do{

P(rwmutex);

P(rmutex);

readcount++;

if (readcount == 1) P(nrmutex); //有读者进入,互斥写操作

V(rmutex);

V(rwmutex);//及时释放读写互斥信号量,允许其它读、写进程申请资源读数据;

P(rmutex);

readcount--;

if (readcount == 0) V(nrmutex); //所有读者退出,允许写更新

V(rmutex);

}while(1);

writer j //写者进程j = 1,2,….

do{

P(rwmutex); // 互斥后续其它读者、写者

P(nrmutex); //如有读者正在读,等待所有读者读完

写更新;

V(nrmutex); //允许后续新的第一个读者进入后互斥写操作

V(rwmutex); //允许后续新读者及其它写者

}while(1);

3. 函数关系调用图

图1 函数关系图

4.程序测试结果

测试数据文件包括 n 行测试数据,分别描述创建的 n 个线程是读者还是写者,以及读写操作的开始时间和持续时间.每行测试数据包括四个字段,各字段间用空格分隔。第一字段为一个正整数,表示线程序号.第二字段表示相应线程角色,R 表示读者是,W 表示写者。第三字段为一个正数,表示读写操作的开始时间。线程创建后,延时相应时间 (单位为秒) 后发出对共享资源的读写申请. 第四字段为一个正数,表示读写操作的持续时间。当线程读写申请成功后,开始对共享资源的读写操作,该操作持续相应时间后结束,并释放共享资源。

在读者写者同时在队列中等待申请资时,读者优先调用资源.而且如果一个读者申请进行读操作时已有另一读者正在进行读操作, 则该读者可直接开始读操作,即读读允许。

图2 进程1、2的测试结果

如图2所示,进程1是W操作,在时间3时进入队列,运行时间是5,即在时间8时,进程1退出。在它进入时没有进程占用资源,它既占用资源;知道它释放资源,等候的进程有3,4,5;

图3 进程3、5的测试结果

如图3所示,进程5是R操作,在时间4时进入队列,运行时间是3, 进程3是R操作,在时间5时进入队列,运行时间是 2, 在它们进入时,进程1占用资源,它等待资源,当进程1释放资源后,由于读者优先,进程 3,5 同时调运资源,因此在时间11时,进程3退出,在时间12时,进程5退出;

图4 进程2、4、6的测试结果

如图4所示,进程4是W操作,在时间5时进入队列,运行时间是5,在它

进入时进程1占用资源,它等待资源,当进程1释放资源后,由于读者优先,进程3,5占用资源,它依然等待,直到进程 3,5 都结束,即进程4在时间12时开始调用资源;进程2是R操作, 在时间16时进入队列,运行时间是5,在它进入时进程4占用资源,它等待资源,当4释放时占用资源后,进程2开始运行;进程6是R操作,在时间17时进入队列,运行时间是7,在它进入时进程2占用资源,它等待进程2释放后最后调用资源。

设计总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

此次操作系统课程设计,我的感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,我学到很多的东西;同时不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,所以只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的服务于社会,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。因此,在以后的学习中要多下苦功,加强基础知识的学习,并且培养自己的动手实践能力。

参考文献

1. 汤子瀛,哲凤屏. 计算机操作系统,西安:电子科技大学学出版社,2002年

2. 王清,李光明. 计算机操作系统,北京:冶金工业出版社,2003年3月

3.孙钟秀等. 操作系统教程. 北京:高等教育出版社,2008年4月

4.曾明. Linux操作系统应用教程. 西安:陕西科学技术出版社,2005年

5. 张丽芬,刘利雄. 操作系统实验教程. 北京:清华大学出版社,2006年

6. 孟静.操作系统教程——原理和实例分析. 北京:高等教育出版社,2001年

7. 周长林. 计算机操作系统教程. 北京:高等教育出版社,2011年12月

8. 张尧学. 计算机操作系统教程.北京:清华大学出版社,2006年10月

9. 任满杰. 操作系统原理实用教程.北京:电子工业出版社,2006年1月

致谢

这次课程设计培养了我耐心、缜密、全面地思考问题的能力,从而加快了问题解决的速度、提高了个人的工作效率,以及锻炼了使问题在短时间内得以解决的品质。我从“纸上谈兵”到可以自己动脑动手分析调试程序,收获不少。

首先要感谢学校给我这次实践的机会,给了自己一个舞台。这不仅是对自身的检验,而且增加了我编写代码的功力。还有多亏了老师们从理论到上机亲自指导的辛苦教授,给予了我们最大帮助和全面指导。在这里,尤其感谢我的指导老师朱红蕾老师,你不辞辛苦的给我们耐心指导。在这里,我衷心向你们致谢!最后还要感谢热心的同学们,在我陷入误区的时候,是他们热心的帮助使我摆脱困境。

最后衷心感谢所有给予我帮助和指导的老师和同学,没有他们的帮助我的程序也不会完成得这么顺利。

源代码:

#include

#include

#include

#include

#include

#include

#define MAX_PERSON 100

#define READER 0 //读者

#define WRITER 1 //写者

#define END -1

#define R READER

#define W WRITER

typedef struct _Person {

HANDLE m_hThread; //定义处理线程的句柄int m_nType; //进程类型(读写) int m_nStartTime; //开始时间

int m_nWorkTime; //运行时间

int m_nID;//进程号

}Person;

Person g_Persons[MAX_PERSON];

int g_NumPerson = 0;

long g_CurrentTime= 0; //基本时间片数

int g_PersonLists[] = {//进程队列

1, W, 3, 5, 2, W, 16, 5, 3, R, 5, 2,

4, W, 6, 5, 5, R, 4, 3, 6, R, 17,7,

END,

};

int g_NumOfReading = 0;

int g_NumOfWriteRequest = 0; //申请写进程的个数HANDLE g_hReadSemaphore; //读者信号

HANDLE g_hWriteSemaphore; //写者信号

bool finished = false; //所有的读完成//bool wfinished = false; //所有的写完成void CreatePersonList(int *pPersonList);

bool CreateReader(int StartTime,int WorkTime,int ID);

bool CreateWriter(int StartTime,int WorkTime,int ID);

DWORD WINAPI ReaderProc(LPVOID lpParam);

DWORD WINAPI WriterProc(LPVOID lpParam);

int main()

{

g_hReadSemaphore = CreateSemaphore(NULL,1,100,NULL); //创建信号灯,当前可用的资源数为 1,最大为100

g_hWriteSemaphore = CreateSemaphore(NULL,1,100,NULL); //创建信号灯,当前可用的资源数为 1,最大为100

CreatePersonList(g_PersonLists); // 创建所有的读者和写者

printf("Created all the reader and writer\n...\n"); g_CurrentTime = 0;

while(true)

{

g_CurrentTime++;

Sleep(300); // 300 ms

printf("CurrentTime = %d\n",g_CurrentTime);

if(finished) return 0;

} // return 0;

}

void CreatePersonList(int *pPersonLists)

{

int i=0;

int *pList = pPersonLists;

bool Ret;

while(pList[0] != END)

{

switch(pList[1])

{

case R:

Ret = CreateReader(pList[2],pList[3],pList[0]); //351,w452,523,654

break;

case W:

Ret = CreateWriter(pList[2],pList[3],pList[0]);

break;

}

if(!Ret)

printf("Create Person %d is wrong\n",pList[0]);

pList += 4; // move to next person list

}

}

DWORD WINAPI ReaderProc(LPVOID lpParam) //读过

{

Person *pPerson = (Person*)lpParam;

// wait for the start time

while(g_CurrentTime != pPerson->m_nStartTime) {}

printf("Reader %d is Requesting ...\n",pPerson->m_nID);

printf("\n\n************************************** **********\n");

// wait for the write request

WaitForSingleObject(g_hReadSemaphore,INFINITE);

if(g_NumOfReading==0)

{

WaitForSingleObject(g_hWriteSemaphore,INFINITE); }

g_NumOfReading++;

ReleaseSemaphore(g_hReadSemaphore,1,NULL); pPerson->m_nStartTime = g_CurrentTime;

printf("Reader %d is Reading the Shared Buffer...\n",pPerson->m_nID);

printf("\n\n************************************** **********\n");

while(g_CurrentTime <= pPerson->m_nStartTime + pPerson->m_nWorkTime)

{}

printf("Reader %d is Exit...\n",pPerson->m_nID); printf("\n\n************************************** **********\n");

WaitForSingleObject(g_hReadSemaphore,INFINITE);

g_NumOfReading--;

if(g_NumOfReading == 0)

{

ReleaseSemaphore(g_hWriteSemaphore,1,NULL);//此时没有读者,可以写

}

ReleaseSemaphore(g_hReadSemaphore,1,NULL);

if(pPerson->m_nID == 4) finished = true; //所有的读写完成

ExitThread(0);

return 0;

}

DWORD WINAPI WriterProc(LPVOID lpParam)

{

Person *pPerson = (Person*)lpParam;

// wait for the start time

while(g_CurrentTime != pPerson->m_nStartTime)

{}

printf("Writer %d is Requesting ...\n",pPerson->m_nID);

printf("\n\n************************************** **********\n");

WaitForSingleObject(g_hWriteSemaphore,INFINITE);

// modify the writer's real start time

pPerson->m_nStartTime = g_CurrentTime;

printf("Writer %d is Writting the Shared Buffer...\n",pPerson->m_nID);

while(g_CurrentTime <= pPerson->m_nStartTime + pPerson->m_nWorkTime)

{}

printf("Writer %d is Exit...\n",pPerson->m_nID); printf("\n\n************************************** **********\n");

//g_NumOfWriteRequest--;

ReleaseSemaphore(g_hWriteSemaphore,1,NULL);

if(pPerson->m_nID == 4) finished = true;//所有的读写完成

java实现读者写者问题(写着优先)

实验一实验报告 学号:20092128 姓名:徐卓远 实验序号:1 实验名称:用信号量来实现读者-写者问题 实验目的:理解进程同步与互斥的概念,掌握用信号量来实现进程的同步与互斥。 实验设计及实现: 为了实现读者和写者的读写过程,将每个读者和每个写者作为了一个单独的线程,所以设置了两个类,一个是读者类Reader,一个是写者类Writer.以读者类为例: 一个读者的动作过程为由睡眠->等待->开始读->结束读->睡眠的一个循环过程,而一个写者的动作过程也为此. 读者调用方法napping()进行等待,调用startRead()方法开始读,最后在调用endReading()方法结束读入,释放运行空间.写者同读者. 但是为了实现读者写者之间的写-写互斥,读-写互斥,读-读允许,需要另外一个类Database,类中分别用关于读者的方法和写者的方法来控制读写之间的这种关系. 首先要实现睡眠的方法napping(),读者和写者在睡眠过程都应该是一样的,只是他们睡眠的时间不同,所以只需写出一个方法: public static void napping() {

int sleepTime = (int) (NAP_TIME * Math.random()); try { Thread.sleep(sleepTime * 1000); } catch (Exception e) { e.printStackTrace(); } } 在方法中,控制线程休眠随机的时间,由于每个读者或写者都是一个线程,而每个读者或写者他们工作休眠的时间都不一定相同,他们请求工作的时间也不一定相同,所以取了随机时间其次设置了读者的两个方法,开始读和结束读,由于这只是个模拟读写问题,所以只需要知道结果就行,就不用显示出他是怎么读的. 在开始读中,当有写者在写时,读者需要等待wait(),在没有人在工作时,如果有写者和读者同时请求,那么就让写者先进,这是写者优先.所以这就归纳于一种情况, 当读者布尔变量dbReading为FALSE时,如果有需要工作的写者,那么读者就等待. 当读者请求读入后,计数有多少读者需要工作的变量readerCount +1,如果这是第一个进入工作的读者就需要将显示是否有读者在工作的读者布尔变量变为TRUE. public synchronized int startRead() { if (dbReading == false) {

《操作系统原理》课程设计--银行家算法程序设计

信息与计算科学 操作系统原理 课程设计报告 题目:银行家算法程序设计 班级: 姓名: 专业:

银行家算法程序设计 目录 1.绪论 (2) 2.需求分析 (2) 2.1功能需求 (2) 2.2数据需求 (2) 3. 总体设计 (2) 3.1功能模块设 (2) 3.2系统设计方案 (3) 3.3开发工具 (4) 4. 详细设计 (4) 4.1银行家算法中的数据结构 (4) 4.2银行家算法 (5) 4.3安全性算法 (6) 5. 调试与测试 (8) 6. 结论 (8) 结束语 (8) 参考文献 (9) 附录1-用户手册 (10) 附录2-源程序清单 (11)

1.绪论 20世纪末,随着计算机科学的发展,C语言的应用越来越广泛,很多程序都需要使用C语言来编写。C语言使用方便快捷,它已经成为计算机编程中不可缺少的一部分,而且它也被用于各个方面。例如:政府部门,银行,学校等等。 银行家算法是判断系统是否安全,并且允许其它进程来申请这里的资源,任何一个进程来申请资源时,必须先登记该进程对资源的申请要求然后由系统检查当前资源的状况,并用银行家算法和安全性算法来检查是否允许分配资源给进程。通过课程设计,加深我们对利用银行家算法避免死锁的理解。在设计中主要的难点是用语言编写银行家算法和安全性算法,使系统资源分配能安全进行,避免系统死锁。 2.需求分析 2.1 功能需求 1.添加进程的可用资源,最大资源,已分配资源; 2.判断系统是否安全; 3.申请资源; 4.申请资源后如何分配; 5.进行安全检查。 2.2 数据需求 主要数据包括:可用资源,最大资源,已分配资源,申请资源数。 3. 总体设计 3.1 功能模块设

读者写者课程设计

目录 第一章课程设计目的和要求?错误!未定义书签。 1.1 课程设计目的?错误!未定义书签。 1.2 课程设计要求 0 第二章课程设计任务内容?错误!未定义书签。 2.1课程设计任务......................................... 错误!未定义书签。 2.2课程设计内容?1 第三章详细设计说明?错误!未定义书签。 3.1问题描述?错误!未定义书签。 3.2模块设计?错误!未定义书签。 3.3程序流程图?错误!未定义书签。 3.4算法与数据结构....................................... 错误!未定义书签。 3.4.1数据结构..................................... 错误!未定义书签。 3.4.2算法描述..................................... 错误!未定义书签。 3.4.3算法流程图 (5) 第四章软件使用说明.......................................... 错误!未定义书签。 4.1系统开发与运行环境?错误!未定义书签。 4.2系统的运行说明?错误!未定义书签。 4.3 运行结果 (9) 第五章课程设计心得体会...................................... 错误!未定义书签。附录1:参考文献?错误!未定义书签。 附录2:程序清单.............................................. 错误!未定义书签。

第一章课程设计目的和要求 1.1课程设计目的 操作系统是计算机系统的核心和灵魂,是计算机系统必不可少的组成部分,也是计算机专业教学的重要内容。该课程概念众多、内容抽象、灵活性与综合性强,不但需要理解操作系统的概念和原理,还需要加强操作系统实验,上机进行编程实践,故进行此次课程设计,使我们更好地掌握操作系统的精髓,真正做到深刻理解和融会贯通。 操作系统课程设计是本课程重要的实践教学环节。课程设计的目的,一方面使学生更透彻地理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。此次课程设计给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。 本次课程设计的题目为读者写者同步问题的实现,在熟练掌握进程同步原理的基础上,利用C程序设计语言在windows操作系统下模拟实现读者写者同步问题的功能,一方面加深对原理的理解,另一方面提高根据已有原理通过编程解决实际问题的能力,为进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。 1.2课程设计要求 在深入理解操作系统基本原理的基础上,对于选定的题目以小组为单位,先确定设计方案,设计系统的数据结构和程序结构,设计每个模块的处理流程。要求设计合理,编程序实现系统,要求实现可视化的运行界面,界面应清楚地反映出系统的运行结果,确定测试方案,对系统进程测试,运行系统并要通过验收,讲解运行结果,说明系统的特色和创新之处,并提交课程设计报告。

计算机操作系统原理课程设计

上海电力学院 课程设计报告 课程名称:操作系统原理 题目名称:采用可变分区存储管理,模拟主存空间的分配和回收 姓名: xxx 学号: xxx 班级: 2013054 同组姓名: xxx 课程设计时间: 2015.7.6~2015.7.10 评语: 成绩:

课程设计题目 一、设计内容及要求 可变分区存储管理模拟 设计内容:编写程序模拟实现可变分区存储管理。 具体要求: 编写程序模拟实现可变分区存储管理,实现存储管理的基本功能,包括内存的分配、内存的回收、地址变换等。 输入:1、输入新进程名称及使用内存的大小(可创建多个进程); 2、撤销某个指定的进程; 3、某个进程的逻辑地址; 输出:显示每次创建进程或者撤销进程后内存使用的状况,包括每一个进程占据的内存的位置和大小; 计算并输出给定逻辑地址对应的物理地址。 必须分别使用以下分配算法完成模拟: 1、首次适应算法; 2、最佳适应算法; 3、最差适应算法; 小组分工: 程序设计讨论: 程序主体设计: 程序调试及修改: 实验报告设计: 总结: (要求注明小组分工情况) 二、详细设计 1)原理概述 对于可变分区存储管理的内存分配与回收,主要为设计以下几个部分: 1、设计动态输入空闲分区表的程序 2、设计内存分配的程序 3、设计内存回收的程序 首次适应算法: FF算法要求空闲分区表或空闲分区链以地址递增的次序链接。在分配内时,从链首开始查找,直至找到一个大小能满足要求分区为止;然后再按照作业大小,从该分区中划一块内存空间分配给请求者,余下的空闲分区仍留在空闲链中。如从链首直至链尾都不能找到一个能满足要求的分区,则此次分配失败,返回 最佳适应算法: BF算法是指每次为作业分配内存,总是把满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。为了加速寻找,该算法要求所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。这样,第一次找到能满足要求的空闲区,

实验二 读者写者问题实验报告..

实验二读者写者问题实验报告 一、实验目的 Windows2000/XP提供了互斥量(mutex)、信号量(semapore)、事件(event)等三种同步对象和相应的系统调用,用于线程的互斥与同步。通过对读者写者问题的调试,了解Windows2000/XP中的同步机制。 二、实验内容及实验步骤 利用Windows2000/XP信号量机制,实现读者写者问题。 在Windows 2000环境下,创建一个控制台进程,此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件(后面有介绍)的要求进行读写操作。用信号量机制分别实现读者优先和写者优先的读者-写者问题。 读者-写者问题的读写操作限制(包括读者优先和写者优先): 写-写互斥,即不能有两个写者同时进行写操作。 读-写互斥,即不能同时有一个线程在读,而另一个线程在写。 读-读允许,即可以有一个或多个读者在读。 读者优先的附加限制:如果一个读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。 写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态才能开始读操作。 运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结果读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。 三、实验结果及分析 图2.1 选择界面 第一字段为一个正整数,表示线程序号。第二字段表示相应线程角色,R 表示读者是,W 表示写者。第三字段为一个正数,表示读写操作的开始时间。线程创建

后,延时相应时间(单位为秒)后发出对共享资源的读写申请。第四字段为一个正数,表示读写操作的持续时间。当线程读写申请成功后,开始对共享资源的读写操作,该操作持续相应时间后结束,并释放共享资源。下面是一个测试数据文件的例子: 1 R 3 5 2 W 4 5 3 R 5 2 4 R 6 5 5 W 5.1 3 测试结果如下: 图2.2 读者优先运行结果

读者写者问题课程设计说明书

-- 数学与计算机学院 课程设计说明书 课程名称: 操作系统原理-课程设计课程代码: 题目:读者写者问题 年级/专业/班: 学生姓名: 学号: 开始时间:2011 年12月05日完成时间:2011 年12月25 日课程设计成绩: 学习态度及平时成绩(30) 技术水平与实际 能力(20) 创新(5)说明书撰写质量(45) 总分 (100) 指导教师签名:年月日

目录 1 引言?错误!未定义书签。 1.1问题的提出?错误!未定义书签。 1.2任务于分析?错误!未定义书签。 2程序的主要功能?错误!未定义书签。 2.1测试文本录入功能.................................... 错误!未定义书签。 2.2读者优先判断功能.................................... 错误!未定义书签。2.3写者优先判断功能.................................. 错误!未定义书签。 3 程序运行平台........................................... 错误!未定义书签。 4 总体设计............................................... 错误!未定义书签。5模块分析 ............................................... 错误!未定义书签。 5.1测试文本录入模块.................................... 错误!未定义书签。 5.2读者优先判断模块.................................... 错误!未定义书签。 5.3写者优先判断模块.................................... 错误!未定义书签。6系统测试............................................. 错误!未定义书签。 7 结论................................................................. 8致谢.................................................. 错误!未定义书签。参考文献 (10)

操作系统课程设计

计算机科学技术学院 操作系统原理课程设计报告 题目:进程管理系统 专业: 班级: 姓名: 学号: 指导老师: 年月日

《操作系统原理》课程设计任务书 一、课程设计题目(任选一个题目) 1.模拟进程管理 2.模拟处理机调度 3.模拟存储器管理 4.模拟文件系统 5.模拟磁盘调度 二、设计目的和要求 1.设计目的 《操作系统原理》课程设计是网络工程专业实践性环节之一,是学习完《操作系统原理》课程后进行的一次较全面的综合练习。其目的在于加深对操作系统的理论、方法和基础知识的理解,掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,培养学生的系统设计能力,并了解操作系统的发展动向和趋势。 2.基本要求: (1)选择课程设计题目中的一个课题,独立完成。 (2)良好的沟通和合作能力 (3)充分运用前序课所学的软件工程、程序设计、数据结构等相关知识 (4)充分运用调试和排错技术 (5)简单测试驱动模块和桩模块的编写 (6)查阅相关资料,自学具体课题中涉及到的新知识。 (7)课题完成后必须按要求提交课程设计报告,格式规范,内容详实。 三、设计内容及步骤 1.根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么。

2.根据实现的功能,划分出合理的模块,明确模块间的关系。 3.编程实现所设计的模块。 4.程序调试与测试。采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果; 5.结果分析。程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。 6.编写课程设计报告; 设计报告要求:A4纸,详细设计部分主要叙述本人的工作内容 设计报告的格式: (1)封面(题目、指导教师、专业、班级、姓名、学号) (2)设计任务书 (3)目录 (4)需求分析 (5)概要设计 (6)详细设计(含主要代码) (7)调试分析、测试结果 (8)用户使用说明 (9)附录或参考资料 四、进度安排 设计在学期的第15、16周进行,时间安排如下:

操作系统课程设计(采用读写平等策略的读者写者问题)完整版--内含代码

淮北师范大学 课程设计 采用读写平等策略的读者写者问题 学号: 姓名: 专业: 指导教师: 日期:

目录 第1部分课设简介 (3) 1.1 课程设计题目 (3) 1.2 课程设计目的.................. 错误!未定义书签。 1.3 课程设计内容 (3) 1.4 课程设计要求 (4) 1.5 时间安排 (4) 第2部分实验原理分析 (4) 2.1问题描述 (4) 2.2算法思想 (5) 2.3主要功能模块流程图 (5) 第3部分主要的功能模块 (6) 3.1数据结构 (6) 3.2测试用例及运行结果 (7) 第4部分源代码 (7) 第5部分总结及参考文献 (22) 5.1 总结 (22) 5.2 参考文献 (23)

第1部分课设简介 1.1 课程设计题目 采用读写平等策略的读者写者问题 1.2课程设计目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。 1)进一步巩固和复习操作系统的基础知识。 2)培养学生结构化程序、模块化程序设计的方法和能力。 3)提高学生调试程序的技巧和软件设计的能力。 4)提高学生分析问题、解决问题以及综合利用C语言进行课程设计的能力。 1.3课程设计内容 用高级语言编写和调试一个采用“读写平等”策略的“读者-- 写者”问题的模拟程序。 1.4课程设计要求 1)读者与写者至少包括ID、进入内存时间、读写时间三项内容,可在界面上进行输入。

2) 读者与写者均有两个以上,可在程序运行期间进行动态增加 读者与写者。 3)可读取样例数据(要求存放在外部文件中),进行读者/写者、 进入内存时间、读写时间的初始化。 4) 要求将运行过程用可视化界面动态显示,可随时暂停,查看 阅览室中读者/写者数目、读者等待队列、读写时间、等待时间。 5) 读写策略:读写互斥、写写互斥、读写平等(严格按照读 者与写者到达的顺序进入阅览室,有写着到达,则阻塞后续到 达的读者;有读者到达,则阻塞后续到达的写者)。 1.5时间安排 1)分析设计贮备阶段(1 天) 2)编程调试阶段(7 天) 3)写课程设计报告、考核(2 天) 第2部分实验原理分析2.1问题描述 有一个被许多进程共享的数据区,这个数据区可以是一个文件,或者主存的一块空间,甚至可以是一组处理器寄存器。有一些只读取这个数据区的进程reader和一些只往数据区中写数据的进程writer 以下假设共享数据区是文件。这些读者和写者对数据区的操作必须满

操作系统课设: 实现读者写者(Reader-Writer Problem)问题

学 号: 课 程 设 计 2014——2015学年 第1学期 课程名称 操作系统 学 院 计算机科学与技术学院 专 业 软件工程 班 级 姓 名 指导教师

1《操作系统原理》课程设计指导书 课程编号: 课程名称:操作系统/Operating System 周数/学分:1周/1学分 先修课程:高级语言程序设计、汇编语言、数据结构、计算机组成原理 适用专业:计算机科学与技术、软件工程 开课学院、系或教研室:计算机科学与技术学院 一、课程设计的目的 通过对操作系统内核实现代码的阅读、修改、设计,理解和掌握复杂的操作系统的工作原理。 二、课程设计的内容和要求 1.系统调用 学习在Linux中产生一个系统调用以及怎样通过往Linux内核中增加一个新函数从而在该内核空间中实现对用户空间的读写。这个函数的功能是返回当前的系统时间。 实验条件要求:每人一台Linux主机且有超级用户权限。 2.内核定时器 通过研究内核的时间管理算法学习内核源代码。然后应用这些知识并且使用“信号”建立一种用户空间机制来测量一个多线程程序的执行时间。 实验条件要求:每人一台Linux主机且有超级用户权限。 3.实现生产者消费者(Bounded – Buffer Problem)问题 通过研究Linux的线程机制和信号量实现生产者消费者(Bounded Buffer)问题的并发控制。 实验条件要求:每人一台与Linux主机联网的Windows主机,普通用户权限。 4.实现读者写者(Reader-Writer Problem)问题 通过研究Linux的线程机制和信号量实现读者写者(Reader-Writer)问题并

操作系统读者写者实验报告

《操作系统》上机实验报告 实验项目读者写者 学院(部)信息学院 专业计算机科学与技术班级 学生姓名 学号

读者写者问题 一.实验目的: 1.熟悉读者优先和写者优先的过程。 2.更好地理解进程同步的概念及其实现方法。 二.实验要求: 分别实现读者优先和写者优先。 “读-写”互斥,即不能同时有一个读者在读,同时去有一个写者在写; “写-写”互斥,即不能有两个写者同时进行写操作; “读-读”允许,即可以有两个以上的读者同时进行读操作。 三.实验内容: 读者优先: 如果没有写者正在操作,则读者不需要等待,用一个整型变量readcount 记录当前的读者数目,用于确定是否释放写者线程,(当readcout=0 时,说明所有的读者都已经读完,释放一个写者线程),每个读者开始读之前都要修改readcount,为了互斥的实现对readcount 的修改,需要一个互斥对象Mutex来实现互斥。 另外,为了实现写-写互斥,需要一个临界区对象write,当写者发出写的请求时,必须先得到临界区对象的所有权。通过这种方法,可以实现读写互斥,当readcount=1 时,(即第一个读者的到来时,),读者线程也必须申请临界区对象的所有权. 当读者拥有临界区的所有权,写者都阻塞在临界区对象write上。当写者拥有临界区对象所有权时,第一个判断完readcount==1 后,其余的读者由于等待对readcount的判断,阻塞在Mutex上! 写者优先: 写者优先和读者优先有相同之处,不同的地方在:一旦有一个写者到来时,应该尽快让写者进行写,如果有一个写者在等待,则新到的读者操作不能读操作,为此添加一个整型变量writecount,记录写者的数目,当writecount=0时才可以释放读者进行读操作!为了实现对全局变量writecount的互斥访问,设置了一个互斥对象Mutex3。 为了实现写者优先,设置一个临界区对象read,当有写者在写或等待时,读者必须阻塞在临界区对象read上。 读者除了要一个全局变量readcount实现操作上的互斥外,还需要一个互斥对象对阻塞在read这一个过程实现互斥,这两个互斥对象分别为mutex1和mutex2。

操作系统课程设计报告——读者写者问题

操作系统课程设计 课题:读者写者问题 姓名:赫前进 班级:1020552 学号102055211 指导教师:叶瑶 提交时间:2012/12/30

(一)实验目的 1.进一步理解“临界资源”的概念; 2.把握在多个进程并发执行过程中对临界资源访问时的必要约束条件; 3.理解操作系统原理中“互斥”和“同步”的涵义。 (二)实验内容 利用程序设计语言编程,模拟并发执行进程的同步与互斥(要求:进程数目不少于3 个)。 (三)、程序分析 读者写者问题的定义如下:有一个许多进程共享的数据区,这个数据区可以是一个文件或者主存的一块空间;有一些只读取这个数据区的进程(Reader)和一些只往数据区写数据的进程(Writer),此外还需要满足以下条件: (1)任意多个读进程可以同时读这个文件; (2)一次只有一个写进程可以往文件中写; (3)如果一个写进程正在进行操作,禁止任何读进程度文件。 实验要求用信号量来实现读者写者问题的调度算法。实验提供了signal类,该类通过P( )、V( )两个方法实现了P、V原语的功能。实验的任务是修改Creat_Writer()添加写者进程,Creat_Reader()创建读者进程。Reader_goon()读者进程运行函数。读优先:要求指一个读者试图进行读操作时,如果这时正有其他读者在进行操作,他可直接开始读操作,而不需要等待。 读者优先的附加限制:如果一个读者申请进行读操作时已有另一读者正在进行读操作,则该读者可直接开始读操作。 写优先:一个读者试图进行读操作时,如果有其他写者在等待进行写操作或正在进行写操作,他要等待该写者完成写操作后才开始读操作。 写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。 在Windows 7 环境下,创建一个控制台进程,此进程包含n 个线程。用这n 个线程来表示n 个读者或写者。每个线程按相应测试数据文件(格式见下)的要求进行读写操作。用信号量机制分别实现读者优先和写者优先的读者/写者问题。

操作系统课程设计-读者写者问题

操作系统课程设计报告

一、开题报告 (一)该项课程设计的意义; 1.更加深入的了解读者写者问题的算法; 2.加深对线程,进程的理解; 3.加深对“线程同步”概念的理解,理解并应用“信号量机制”; 4.熟悉计算机对处理机的管理,了解临界资源的访问方式; 5.了解C++中线程的实现方式,研读API。 (二)课程设计的任务 多进程/线程编程:读者-写者问题。 ●设置两类进程/线程,一类为读者,一类为写者; ●随机启动读者或写者; ●显示读者或写者执行状态; ●随着进程/线程的执行,更新显示; (三)相关原理及算法描述; 整体概况: 该程序从大体上来分只有两个模块,即“读者优先”和“写者优先”模块. 读者优先: 如果没有写者正在操作,则读者不需要等待,用一个整型变量readcount记录读者数目,用于确定是否释放读者线程,readcount的初值为0.当线程开始调入时. 每个读者准备读. 等待互斥信号,保证对readcount 的访问,修改互斥.即readcount++. 而当读者线程进行读操作时,则读者数目减少(readcount--).当readcout=0 时,说明所 有的读者都已经读完,离开临界区唤醒写者(LeaveCriticalSection(&RP_Write);), 释 放互斥信号(ReleaseMutex(h_Mutex)). 还需要一个互斥对象mutex来实现对全局变量Read_count修改时的互斥. 另外,为了实现写-写互斥,需要增加一个临界区对象Write。当写者发出写请求时, 必须申请临界区对象的所有权。通过这种方法,可以实现读-写互斥,当 Read_count=1时(即第一个读者到来时),读者线程也必须申请临界区对象的所有 权 写者优先: 写者优先与读者不同之处在于一旦一个写者到来,它应该尽快对文件进行写操作,如果有一个写者在等待,则新到来的读者不允许进行读操作。为此应当填加 一个整形变量write_count,用于记录正在等待的写者的数目,write_count的初值 为0.当线程开始调入时.只允许一个写者准备读. 等待互斥信号,保证对write_count 的访问,修改互斥.即write_count++.而当写者线程进行读操作时,则相应写者数目减 少(write_count--).当write_count=0 时,说明所有的读者都已经读完,离开临界区唤 醒读者,释放互斥信号. 为了实现写者优先,应当填加一个临界区对象read,当有写者在写文件或等待时,读者必须阻塞在read上。

操作系统原理课程设计实践报告

操作系统原理课程设计 实践报告 题目: 仿真多进程并发环境中死锁的预防、避免、检测与解除 姓名: 学院: 信息科技学院 专业: 计算机科学技术系 班级: 学号: 指导教师: 职称: 20010年4月8日 仿真多进程并发环境中死锁的预防、避免、检测与解除 摘要:在多道程序系统中,多个程序并发执行时可能造成死锁。所谓死锁是指多

个进程在运行过程中因争夺资源而造成的一种僵局。当进程处于这种僵局状态时若无外力作用,它们都将无法再向前推进,造成资源的浪费。该程序将模拟多进程并发时死锁现象的产生、避免、检测与解除。死锁避免用最著名的银行家算法,用银行家安全性算法类似的死锁检测算法来检测进程状况,又用资源剥夺法来实现死锁的解除。该程序实现操作简易,表示清晰并且形象描述多进程并发环境中死锁的预防、避免、检测与解除。 关键字:死锁;避免死锁;安全状态;银行家算法 引言:在操作系统、数据库系统以及网络通信中,由于进程并发和资源共享,当系统中资源分配顺序或者进程推进顺序不当就会造成系统死锁[1]。处于死锁状态的系统中,进程之间互相等待资源而永远不能继续向前推进,严重地影响了系统的可靠性。因而有时需要合理的对资源进行分配必要的时候加以限制保证系统安全、高效、稳定的运行。 1理论分析 1.1 死锁的概念 如果一个进程集合中的每个进程都在等待只能由此集合中的其他进程才能引发的事件,而无限期陷入僵持的局面称为死锁[2]。 1.2 产生死锁的条件: 1、互斥使用(资源独占):一个资源每次只能给一个进程使用。 2、不可强占(不可剥夺):资源申请者不能强行的从资源占有者手中夺取资 源,资源只能由占有者自愿释放。 3、请求和保持(部分分配,占有申请):一个进程在申请新的资源的同时保 持对原有资源的占有(只有这样才是动态申请,动态分配)。 4、循环等待:存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占 有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路[3]。 1.3死锁的预防 在系统设计时确定资源分配算法,保证不发生死锁。具体的做法是破坏产生死锁的四个必要条件之一。 ①破坏“不可剥夺”条件 在允许进程动态申请资源前提下规定,一个进程在申请新的资源不能立即得到满足而变为等待状态之前,必须释放已占有的全部资源,若需要再重新申请。 ②破坏“请求和保持”条件 要求每个进程在运行前必须一次性申请它所要求的所有资源,且仅当该进程所要资源均可满足时才给予一次性分配。 ③破坏“循环等待”条件 采用资源有序分配法:把系统中所有资源编号,进程在申请资源时必须严格按资源编号的递增次序进行,否则操作系统不予分配。

操作系统课程设计--读者-写者问题

操作系统课程设计报告 一、操作系统课程设计任务书 读者- 写者问题实现 1设计目的通过实现经典的读者写者问题,巩固对线程及其同步机制的学习效果,加深对相关基本概念的理解,并学习如何将基本原理和实际设计有机的结合。 2设计要求 在Windows 2000/XP 环境下,使用多线程和信号量机制实现经典的读者写者问题,每个线程代表一个读者或一个写者。每个线程按相应测试数据文件的要求,进行读写操作。请用信号量机制分别实现读者优先和写者优先的读者- 写者问题。 读者-写者问题的读写操作限制: (1)写-写互斥,即不能有两个写者同时进行写操作 (2)读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写 (3)读-读允许,即可以有二个以上的读者同时读读者优先的附加限制:如果一个读者申请进行读操作时已有另一读者正在进行读操作,则该读者可直接开始读操作。 写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。 运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确信所有处理都遵守相应的读写操作限制。 3测试数据文件格式 测试数据文件包括n 行测试数据,分别描述创建的n 个线程是读者还是写者,以及读写操作的开始时间和持续时间。每行测试数据包括四个字段,各字段间用空格分隔。第一字段为一个正整数,表示线程序号。第二字段表示相应线程角色,R 表示读者是,W 表示写者。第三字段为一个正数,表示读写操作的开始时间。线程创建后,延时相应时间(单位为秒)后发出对共享资源的读写申请。第四字段为一个正数,表示读写操作的持续时

操作系统实验 读者写者问题

《计算机操作系统》实验报告 题目读者写者问题 学院(部)信息学院 专业计算机科学与技术 班级 学生姓名 学号 指导教师(签字)

一、问题描述 一个数据文件或者记录,可以被多个进程共享,我们把只要求读该文件的进程称为“Reader进程”,其他进程则称为“Writer进程”。允许多个进程同时读一个共享对象,因为读操作不会是数据文件混乱。但不允许一个Writer进程和其他Reader进程或者Writer进程同时访问共享对象,因为这种访问将会引起混乱。所谓“读者——写着问题(Reader—Writer Problem)”是指保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题 二、解决问题 为实现Reader与Writer进程间在读或写是的互斥而设置了一个互斥的信号量Wmutex。另外,在设置一个整型变量Readcount表示正在读的进程数目。由于只要有一个Reader进程在读,便不允许Writer去写。因此,仅当Readercount=0时,表示尚无Reader进程在读时,Reader进程才需要进行Wait(wmutex)操作。若Wait(Wmutex)操作成功,Reader进程便可去读,相应地,做Readcount+1操作。同理,仅当Reader进程在执行了Readercount-1操作后其值为0时,才执行Signal(Wmutex)操作,以便让Writer进程写。又因为Readercount是一个可被多个Reader进程访问的临界资源,因此也应该为它设置一个互斥信号量rmutex。 三、代码实现 1、读者优先 #include #include using namespace std; CRITICAL_SECTION rmutex,wmutex; int wr; int readernum; DWORD WINAPI reader(LPVOID IpParamter){ cout<<"读者申请\n"; wr++; EnterCriticalSection(&rmutex); if(readernum==0) EnterCriticalSection(&wmutex); readernum++; cout<<"读者进入成功正在读取\n"; LeaveCriticalSection(&rmutex); Sleep(2000); EnterCriticalSection(&rmutex); readernum--; cout<<"读者退出\n"; wr--;

读者写者问题

一设计概述 所谓读者写者问题,是指保证一个writer进程必须与其他进程互斥地访问共享对象的同步问题。 读者写者问题可以这样的描述,有一群写者和一群读者,写者在写同一本书,读者也在读这本书,多个读者可以同时读这本书,但是,只能有一个写者在写书,并且,读者必写者优先,也就是说,读者和写者同时提出请求时,读者优先。当读者提出请求时需要有一个互斥操作,另外,需要有一个信号量S来当前是否可操作。 信号量机制是支持多道程序的并发操作系统设计中解决资源共享时进程间的同步与互斥的重要机制,而读者写者问题则是这一机制的一个经典范例。 与记录型信号量解决读者—写者问题不同,信号量机制它增加了一个限制,即最多允许RN个读者同时读。为此,又引入了一个信号量L,并赋予初值为RN,通过执行wait(L,1,1)操作,来控制读者的数目,每当有一个读者进入时,就要执行wait(L,1,1)操作,使L的值减1。当有RN个读者进入读后,L便减为0,第RN+1 个读者要进入读时,必然会因wait(L,1,1)操作失败而堵塞。对利用信号量来解决读者—写者问题的描述如下: Var RN integer;L,mx:semaphore: =RN,1; Begin Parbegin Reader :begin Repeat Swait(L,1,1); Swait(mx,1,0); . Perform reader operation; Ssignal(L,1); Until false; End

Writer :begin Repeat Swait(mx ,1,1,l,RN,0); Perform writer operation; Ssignal(mx,1); Until false; End Parend End 其中,Swait(mx,1,0)语句起着开关作用,只要无Writer进程进入些,mx=1,reader进程就都可以进入读。但是要一旦有Writer进程进入写时,其MX=0,则任何reader进程就都无法进入读。Swait(mx ,1,1,l,RN,0)语句表示仅当既无Write 进程在写(mx=1),又无reader进程在读(L=RN)时,writer进程才能进入临界区写。 本设计方案就是通过利用记录型信号量对读者写者问题的解决过程进行模拟演示,形象地阐述记录型信号量机制的工作原理。 二设计目的与内容 一实验目的 l. 用信号量来实现读者写者问题。 2. 理解和运用信号量、PV原语、进程间的同步互斥关系等基本知识。二、二实验内容 读者写者问题的定义如下:有一个许多进程共享的数据区,这个数据区可以是一个文件或者主存的一块空间;有一些只读取这个数据区的进程(Reader)和一些只往数据区写数据的进程(Writer),此外还需要满足以下条件:(1)任意多个读进程可以同时读这个文件; (2)一次只有一个写进程可以往文件中写; (3)如果一个写进程正在进行操作,禁止任何读进程度文件。

操作系统课程设计1要点

操作系统原理 课程设计报告题目:采用二级目录实现文件管理 所在学院: 班级: 学号: 姓名: 指导教师: 2013年1月15日

目录 一、课程设计目的 (1) 二、课题内容 (1) 三、总体路线 (1) 四、概要设计 (2) 1.数据结构 (2) 2.所使用函数及其功能 (3) 五、详细设计 (4) 1.主函数流程图 (4) 2.创建文件函数流程图 (5) 3.删除文件函数流程图 (7) 4.分解命令函数流程图 (10) 六、测试、修改及运行结果 (10) 七、结束语 (13) 八、参考文献 (14)

一、课程设计目的 文件系统是现代OS用来存储和管理信息机构,具有按名存取的功能,不仅能方便用户对信息的使用,也有效提高了信息的安全性。本课题模拟文件系统的目录结构,并在此基础上实现文件的各种操作方法。 通过本课题,深入理解文件文件目录的作用和功能,掌握文件打开结构,熟悉与文件有关的系统调用,从而更好地掌握文件系统概念。 二、课题内容 1.文件目录采用二级目录结构,第一级为主文件目录master_file_directory;第二级为用户文件目录user_file_directory。 图1 master_file_directory 结构 图2 user_file_directory 结构 2.为加速文件存取,为每个用户建立一张用户打开表fileTable,用以记录该 3.为该系统提供6条操作命令:创建、打开、读、写、关闭、删除等。 4.在该模拟系统中,应先建立主文件目录、用户目录和用户打开文件表,然后接受合法用户,给出一个菜单,按用户选择执行相关操作。 三、总体路线 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。在退出这个简单的文件系统时,应将该虚拟文件系统保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。 2.文件存储空间的分配采用显式链接分配。为了实现创建和删除文件必

北理工操作系统实验二读者写者问题

本科实验报告 实验名称:操作系统原理实验(读者写者问题) 课程名称:操作系统原理实验时间:2015.10.30 任课教师:王耀威实验地点:10#102 实验教师:苏京霞 实验类型: 原理验证□综合设计□自主创新 学生姓名:孙嘉明 学号/班级:1120121474/05611202 组号:学院:信息与电子学院同组搭档:专业:信息对抗技术成绩:

实验二:读者写者问题 一、实验目的 1.通过编写和调试程序以加深对进程、线程管理方案的理解; 2.熟悉Windows多线程程序设计方法; 二、实验要求 在Windows环境下,创建一个控制台进程,此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件(后面介绍)的要求进行读写操作。用信号量机制分别实现读者优先和写者优先问题。 读者-写者问题的读写操作限制(包括读者优先和写者优先) 1)写-写互斥:不能有两个写者同时进行写操作 2)读-写互斥:不能同时有一个线程在读,而另一个线程在写。 3)读-读允许:可以有一个或多个读者在读。 读者优先的附加限制:如果读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。 运行结果显示要求:要求在每个线程创建、发出读写申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。 测试数据文件包括 n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。每行测试数据包括四个字段,每个字段间用空格分隔。第1个字段为正整数,表示线程的序号。第2个字段表示线程的角色,R表示读者,W表示写者。第3个字段为一个正数,表示读写开始时间:线程创建后,延迟相应时间(单位为秒)后发出对共享资源的读写申请。第4个字段为一个正数,表示读写操作的延迟时间。当线程读写申请成功后,开始对共享资源进行读写操作,该操作持续相应时间后结束,释放该资源。 下面是一个测试数据文件的例子(在记事本手工录入数据): 1 R 3 5 2 W 4 5 3 R 5 2 4 R 6 5 5 W 5.1 3

操作系统课程设计报告

上海电力学院 计算机操作系统原理 课程设计报告 题目名称:编写程序模拟虚拟存储器管理 姓名:杜志豪.学号: 班级: 2012053班 . 同组姓名:孙嘉轶 课程设计时间:—— 评语: 成绩: 目录 一、设计内容及要求 (4) 1. 1 设计题目 (4) 1.2 使用算法分析: (4)

1. FIFO算法(先进先出淘汰算法) (4) 1. LRU算法(最久未使用淘汰算法) (5) 1. OPT算法(最佳淘汰算法) (5) 分工情况 (5) 二、详细设计 (6) 原理概述 (6) 主要数据结构(主要代码) (6) 算法流程图 (9) 主流程图 (9) Optimal算法流程图 (10) FIFO算法流程图 (10) LRU算法流程图 (11) .1源程序文件名 (11) . 2执行文件名 (11) 三、实验结果与分析 (11) Optimal页面置换算法结果与分析 (11) FIFO页面置换算法结果与分析 (16) LRU页面置换算法结果与分析 (20) 四、设计创新点 (24) 五、设计与总结 (27)

六、代码附录 (27) 课程设计题目 一、设计内容及要求 编写程序模拟虚拟存储器管理。假设以M页的进程分配了N

块内存(N

相关主题