操作系统课程设计 完整报告 已给老师验收成功

合集下载

《操作系统》课程设计报告

《操作系统》课程设计报告

《操作系统》课程设计报告一、读者/写者的问题模拟实现读者/写者问题,是指保证一个writer 进程必须与其他进程互斥地访问共享对象的同步问题。

读者写者问题可以这样的描述:有一群写者和一群读者,写者在写同一本书,读者也在读这本书,多个读者可以同时读这本书,但是只能有一个写者在写书,并且读者必优先,也就是说,读者和写者同时提出请求时,读者优先。

当读者提出请求时,需要有一个互斥操作,另外需要有一个信号量S 来确定当前是否可操作。

信号量机制是支持多道程序的并发操作系统设计中解决资源共享时进程间的同步与互斥的重要机制,而读者写者则是这一机制的一个经典范例。

与记录型信号量解决读者——写者问题不同,信号量机制它增加了一个限制,即最多允许RN 个读者同时读。

为此,又引入了一个信号量L,并赋予初值为RN,通过执行wait (L,1,1)操作来控制读者的数目,每当有一个读者进入时,就要执行wait (L,1,1)操作,使L 的值减1。

当有RN 个读者进入读后,L 便减为0,第RN+1 个读者要进入读时,必然会因wait(L,1,1)操作失败而堵塞。

程序实例:#include <windows.h>#include <ctype.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <malloc.h>#define MAX_PERSON 100#define READER 0 //读者#define WRITER 1 //写者#define END -1#define R READER#define W WRITERtypedef 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,最大为100g_hWriteSemaphore = CreateSemaphore(NULL,1,100,NULL); //创建信号灯,当前可用的资源数为1,最大为100CreatePersonList(g_PersonLists); // Create All the reader and writersprintf("Created all the reader and writer\n 创建\n");g_CurrentTime = 0;while(true){g_CurrentTime++;Sleep(300); // 300 msprintf("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,654break; 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 timewhile(g_CurrentTime != pPerson->m_nStartTime){ }printf("Reader %d is Requesting 等待\n",pPerson->m_nID);printf("\n\n************************************************\n");// wait for the write requestWaitForSingleObject(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 timewhile(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 timepPerson->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;//所有的读写完成ExitThread(0);return 0;}bool CreateReader(int StartTime,int WorkTime,int ID){DWORD dwThreadID;if(g_NumPerson >= MAX_PERSON)return false;Person *pPerson = &g_Persons[g_NumPerson];pPerson->m_nID = ID;pPerson->m_nStartTime = StartTime;pPerson->m_nWorkTime = WorkTime;pPerson->m_nType = READER;g_NumPerson++;// Create an New ThreadpPerson->m_hThread= CreateThread(NULL,0,ReaderProc,(LPVOID)pPerson,0,&dwThreadID); if(pPerson->m_hThread == NULL)return false;return true;}bool CreateWriter(int StartTime,int WorkTime,int ID){DWORD dwThreadID;if(g_NumPerson >= MAX_PERSON)return false;Person *pPerson = &g_Persons[g_NumPerson];pPerson->m_nID = ID;pPerson->m_nStartTime = StartTime;pPerson->m_nWorkTime = WorkTime;pPerson->m_nType = WRITER;g_NumPerson++;// Create an New ThreadpPerson->m_hThread= CreateThread(NULL,0,WriterProc,(LPVOID)pPerson,0,&dwThreadID); if(pPerson->m_hThread == NULL)return false;return true;}二、进程间通信与子进程使用管道进行父子进程间通信,程序首先判断参数是否合法,因为输入的字符将从父进程通过发送到子进程中。

《操作系统》课程设计报告

《操作系统》课程设计报告

长江大学操作系统课程设计报告系(院):计算机科学学院专业班级:软工******姓名: ******* ***学号: 2013*****指导教师: *** **设计时间: 2015.12.27 - 2016.1.5设计地点: 4教5楼机房目录一、基本要求 (3)二、课程设计内容 (3)三、运行环境 (3)四、算法原理 (3)4.1银行家算法原理 (3)4.2页面置换算法原理 (3)4.3电梯调度算法原理 (4)五、程序结构 (4)5.1银行家算法结构 (4)5.2页面置换算法结构 (5)5.3电梯调度算法结构 (6)六、核心代码 (7)6.1银行家算法核心代码 (7)6.2页面置换算法核心代码 (13)6.3电梯调度算法核心代码 (17)七、运行结果截图 (20)7.1银行家算法截图 (20)7.2页面置换算法截图 (21)7.3电梯调度算法截图 (22)八、总结 (23)一、基本要求1.熟悉操作系统原理知识,理解各类管理算法。

2.能根据具体问题的数据特点,选用适当的数据结构,实现数据的组织和管理。

3.进一步巩固程序设计与数据结构的实践技能。

二、课程设计内容1.银行家算法模拟;2.页面置换算法模拟(OPT,FIFO,LRU);3.电梯调度算法(磁盘调度)模拟。

三、运行环境编程语言:C++,编程软件Microsoft Visual C++6.0,操作系统:Windows7。

四、算法原理4.1银行家算法原理银行家算法:系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。

如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。

把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。

当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。

”资源需求总量”表示进程在整个执行过程中总共要申请的资源量。

操作系统课程设计实验报告

操作系统课程设计实验报告

操作系统课程设计实验报告操作系统课程设计实验报告引言:操作系统是计算机科学中的重要课程,通过实验设计,可以帮助学生更好地理解操作系统的原理和实践。

本文将结合我们在操作系统课程设计实验中的经验,探讨实验设计的目的、实验过程和实验结果,以及对操作系统的理解和应用。

一、实验设计目的操作系统课程设计实验的目的是帮助学生深入理解操作系统的工作原理和实际应用。

通过设计和实现一个简单的操作系统,学生可以更好地掌握操作系统的各个组成部分,如进程管理、内存管理、文件系统等。

同时,实验设计还可以培养学生的动手能力和问题解决能力,提高他们对计算机系统的整体把握能力。

二、实验过程1. 实验准备在进行操作系统课程设计实验之前,我们需要对操作系统的基本概念和原理进行学习和理解。

同时,还需要掌握一些编程语言和工具,如C语言、汇编语言和调试工具等。

这些准备工作可以帮助我们更好地进行实验设计和实现。

2. 实验设计根据实验要求和目标,我们设计了一个简单的操作系统实验项目。

该项目包括进程管理、内存管理和文件系统三个主要模块。

在进程管理模块中,我们设计了进程创建、调度和终止等功能;在内存管理模块中,我们设计了内存分配和回收等功能;在文件系统模块中,我们设计了文件的创建、读写和删除等功能。

通过这些模块的设计和实现,我们可以全面了解操作系统的各个方面。

3. 实验实现在进行实验实现时,我们采用了分阶段的方法。

首先,我们实现了进程管理模块。

通过编写相应的代码和进行调试,我们成功地实现了进程的创建、调度和终止等功能。

接下来,我们实现了内存管理模块。

通过分配和回收内存空间,我们可以更好地管理系统的内存资源。

最后,我们实现了文件系统模块。

通过设计文件的读写和删除等功能,我们可以更好地管理系统中的文件资源。

三、实验结果通过实验设计和实现,我们获得了一些有意义的结果。

首先,我们成功地实现了一个简单的操作系统,具备了进程管理、内存管理和文件系统等基本功能。

操作系统课程设计报告

操作系统课程设计报告

操作系统课程设计报告概述:本课程设计旨在使学生熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。

通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。

同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。

主要任务:本课程设计的主要任务是设计和实现一个简单的文件系统,包括建立文件存储介质的管理机制、建立目录(采用一级目录结构)、文件系统功能(显示目录、创建、删除、打开、关闭、读、写)和文件操作接口(显示目录、创建、删除、打开、关闭、读、写)。

系统设计:本系统模拟一个文件管理系统,要完成对文件的基本操作,包括文件、文件夹的打开、新建、删除和读取写入文件,创建更改目录,列出目录内容等信息。

系统建立了文件目录树,存储文件系统中的所有文件。

对于用户名下的文件,用文件目录树的分支来存储。

采用命令行操作界面很直观,也方便用户进行操作,用户只要按照操作界面所显示的命令来操作即可。

整体设计框架:系统初始化界面由创建用户存储空间、管理文件、退出系统三个模块组成。

用户创建由创建用户存储空间、进入目录、删除用户存储空间、显示所有用户存储空间等模块组成。

然后各个模块再由一些小模块组成。

其中创建文件、打开关闭文件、读写文件等文件操作模块包括在进入目录模块里面。

系统实现:以下是本课程设计的主要内容的实现程序代码:cincludeincludeincludetypedef struct file{ char name[10];struct file *next; File;typedef struct content{ char name[10];File *file;int f_num;struct content *next; Content;typedef struct user{ char name[10];char psw[10]; Content *con;struct user *next; User;char cur_user[20];XXX;int user_num=0;添加文件:在该函数中,我们首先需要获取文件名,然后检查是否已经存在该文件。

操作系统课程设计报告.doc

操作系统课程设计报告.doc

操作系统课程设计报告xx信息技术学院操作系统课程设计报告一、操作系统课程设计的目的与要求1、目的死锁会引起进程僵死,严重的话会造成整个系统瘫痪。

因此,死锁现象是操作系统特别是大型系统中必须设法防止的。

学生应独立的使用C语言(或其它程序设计语言)编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效的防止死锁的发生。

从而更直观地了解死锁的起因,初步掌握防止死锁的简单方法,加深理解课堂上讲授过的知识。

2、要求(1)设计一个由n个并发进程共享m个系统资源的系统。

系统中进程可动态地申请资源和释放资源。

系统按各进程的申请动态地分配各资源。

(2)系统应能显示各进程申请和释放资源以及系统动态分配资源的过程,便于用户观察和分析。

(3)系统应能选择是否采用防止死锁算法或选用何种防止算法(如有多种算法)。

在不采用防止算法时观察死锁现象的发生过程。

在使用防止死锁算法时,了解在同样申请条件下,防止死锁的过程。

二、简述课程设计内容、主要功能和实现环境本示例采用银行家算法防止死锁的发生。

假设有三个并发进程共享十个系统。

在三个进程申请的系统资源之和不超过10时,当然不可能发生死锁,因为各个进程申请的资源都能满足。

在有一个进程申请的系统资源数超过10时,必然会发生死锁。

应该排除这二种情况。

程序采用人工输入各进程的申请资源序列。

如果随机给各进程分配资源,就可能发生死锁,这就是不采用防止死锁算法的情况。

假如,按照一定的规则,为各进程分配资源,就可以防止死锁的发生。

示例中采用了银行算法。

1编制和调试示例给出的死锁观察与避免程序,并用进程的各种资源请求序列测试死锁的形成和避免死锁的过程,强调过程显示。

2修改并调试一个使用有序资源使用法来预防死锁的模拟程序,并用进程的各种资源请求序列测试死锁的形成和预防死锁的过程。

实现环境C三、任务的分析、设计、实现和讨论1、任务的分析操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。

《操作系统课程设计》报告范本(doc 10页)

《操作系统课程设计》报告范本(doc 10页)

《操作系统课程设计》报告学号:姓名:班级:指导教师:报告日期:一、课设目的通过对操作系统课程的学习,熟悉进程的概念、进程的管理与存储、进程的调度,通过实践深入理解进程的调度算法。

二、课设任务要求编写一个程序,可以创建若干个虚拟进程,并对若干个虚拟进程进行调度,调度策略为时间片轮转法,主要任务包括:①进程的个数,进程的内容(即进程的功能序列)来源于一个进程序列描述文件,另外调度运行结果输出到一个运行日志文件;②设计PCB适用于时间片轮转法;③建立进程队列;④实现时间片轮转调度算法,尽量可视化的展示调度的动态过程。

○5总结程序设计的开发过程:需求分析、系统设计、系统实现及文档的收集和整理。

三、实验方法与设计分析每个进程有一个进程控制块( PCB)表示。

进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

据需要设计调查计划调查、收集数据,能按要求整理数据,在统计表进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。

进程的到达时间为输入进程的时间。

,计算机,千千万万中小创业者渴望成功高中语文,语文试卷,计算机摇篮课进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。

式,因此上开店成为了一种潮流,并且越来越多高中语文,语文试卷,计算机就绪进程获得 CPU后都只能运行一个时间片。

用已占用CPU时间加1来表示。

卷,计算机络购物高中语文,语文试卷,计算机市场潜力还远未被释放课件同如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

语文,语文试卷,计算机,第5代速度达自动软件,不用东奔西走高中语文,语文每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。

湖南科技大学操作系统课程设计实验报告

湖南科技大学操作系统课程设计实验报告

湖南科技大学计算机科学与工程学院操作系统课程设计报告****************目录1、实验一:Windows 进程管理 (02)2、实验二:Linux 进程管理 (10)3、实验三:进程同步的经典算法 (14)3、实验四:银行家算法的模拟与实现 (18)4、实验五:存储管理(选做) (24)5、实验六:进程间通信 (38)实验一一、实验题目Windows 进程管理二、实验目的(1) 学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序)。

(2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解 Windows 进程的“一生”。

(3)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。

三、总体设计(含背景知识或基本原理与算法、或模块介绍、设计步骤等)3.1、知识背景:Windows 所创建的每个进程都从调用 CreateProcess() API 函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。

每一进程都以调用 ExitProcess() 或TerminateProcess()API函数终止。

通常应用程序的框架负责调用 ExitProcess()函数。

对于C++ 运行库来说,这一调用发生在应用程序的 main()函数返回之后。

(1)创建进程CreateProcess() 调用的核心参数是可执行文件运行时的文件名及其命令行。

表 1-1 详细地列出了每个参数的类型和名称。

可以指定第一个参数,即应用程序的名称,其中包括相对于当前进程的当前目录的全路径或者利用搜索方法找到的路径; lpCommandLine 参数允许调用者向新应用程序发送数据;接下来的三个参数与进程和它的主线程以及返回的指向该对象的句柄的安全性有关。

然后是标志参数,用以在 dwCreationFlags 参数中指明系统应该给予新进程什么行为。

操作系统课程设计报告

操作系统课程设计报告

操作系统课程设计报告1. 引言操作系统是计算机系统中最核心的软件之一,它负责管理和优化计算机资源的分配和调度,为用户和应用程序提供一个可靠、高效的执行环境。

在操作系统课程设计中,我们通过设计一个简单的操作系统,深入理解操作系统的原理和功能,提升对操作系统的理解和实践能力。

本报告将详细介绍我们小组在操作系统课程设计过程中所完成的工作和实现的目标。

2. 设计目标在本次操作系统课程设计中,我们的设计目标包括:•实现一个基本的中断处理、进程调度和内存管理机制;•设计一个简单的文件系统;•确保操作系统的稳定性和可靠性;•实现用户命令解析和执行功能。

3. 系统架构我们的操作系统设计采用了经典的分层结构,主要由硬件抽象层、内核和用户接口层组成。

1.硬件抽象层:负责与硬件进行交互,提供基本的底层硬件接口,如处理器管理、中断处理、设备控制等。

2.内核:实现操作系统的核心功能,包括进程管理、内存管理、文件系统管理等。

这一层是操作系统的核心,负责管理和调度系统资源。

3.用户接口层:为用户提供简单友好的界面,解析用户输入的命令并调用内核功能进行处理。

用户可以通过命令行或图形界面与操作系统进行交互。

4. 功能实现4.1 中断处理中断是操作系统与外部设备通信的重要机制,我们的操作系统设计中实现了基本的中断处理功能。

通过在硬件抽象层中捕获和处理硬件的中断信号,内核可以对中断进行相应的处理,保证系统的响应能力和稳定性。

4.2 进程调度进程调度是操作系统中的重要任务之一,它决定了系统如何分配和调度上下文切换。

我们的操作系统设计中实现了一个简单的进程调度算法,通过时间片轮转算法和优先级调度算法来管理多个进程的执行顺序,以提高系统的吞吐量和响应性能。

4.3 内存管理内存管理是操作系统中必不可少的功能,它负责对系统内存的分配和回收。

我们的操作系统设计中实现了基本的内存管理功能,包括内存分区、内存空闲管理和地址映射等。

通过合理的内存管理,可以提高系统的内存利用率和性能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学技术学院操作系统原理课程设计报告题目:进程管理系统专业:班级:姓名:学号:指导老师:年月日《操作系统原理》课程设计任务书一、课程设计题目(任选一个题目)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周进行,时间安排如下:五、成绩评定办法成绩分为优(A)、良(B)、中(C)、及格(D)、不及格(E)五个等级。

其中设计表现占30%,验收40%,设计报告占30%。

1.设计表现:教师可依据学生使用实验环境的能力、观察和分析实验现象的能力、实验结果和数据的正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。

2.验收:要求学生演示设计的程序,讲解设计思路、方法、解决的主要问题,教师根据具体情况向每个学生提问2至3个问题。

3.设计报告:学生设计后应按时完成设计报告。

要求:内容充实、写作规范、项目填写正确完整、书面整洁等。

目录一、需求分析 (6)1.进一步理解进程的基本概念 (6)2.加强进程管理的设计及算法 (6)3.观察和管理进程 (6)二、概要设计 (6)1.实验原理 (6)2.数据结构 (6)3. 算法描述 (6)4. 算法流程图 (7)三、详细设计 (8)1.源程序代码 (8)四、调试分析及测试结果 (15)五、用户及用说明 (17)六、附录或参考资料 (17)一、需求分析1.进一步理解进程的基本概念。

2.加强进程管理中主要数据结构的设计及进程调度算法。

3.观察和管理进程——系统在运行过程中可显示或打印各进程的状态及有关参数的变化情况。

二、概要设计1.实验原理定义PCB的数据结构,用链表的形式管理进程,采用多级反馈队列调度的算法模拟进程的控制,最终完成有创建、撤销、调度、阻塞、唤醒进程等功能。

2.数据结构类:class queuenodeclass queue函数:void enqueue( char &item);char dequeue();void del(char item);void display();int find(char item);int isempty()3.算法描述1-1、创建进程,根据进程的顺序依次放入就绪队列。

2-1、执行进程——管理系统将就绪队列中的第一个进程调入运行队列;2-2、将阻塞队列中进程调入就绪队列;2-3、封锁进程——管理系统将就绪队列中的第一个进程调入阻塞队列;2-4、结束进程——管理系统撤销所选进程;2-5、结束程序。

4. 算法流程图三、详细设计1.源程序代码#include<iostream.h>class queuenode{friend class queue;private:char data;queuenode * link;queuenode (char d=0,queuenode * l=NULL): data(d),link(l){} };class queue{public:queue():rear(NULL),front(NULL){};~queue();void enqueue( char &item);char dequeue();void del(char item);void display();int find(char item);int isempty(){return front==NULL;}private:queuenode *front,*rear;};queue::~queue(){queuenode * p;while(front!=NULL){p=front;front=front->link;delete p;}}void queue::enqueue(char &item){if(front==NULL)front=rear=new queuenode(item,NULL);else rear=rear->link=new queuenode(item,NULL);}char queue::dequeue(){queuenode *p=front;char f=p->data;front=front->link;delete p;return f;}void queue::display(){queuenode *p;p=front;while(p!=NULL){ cout<<p->data<<"->";p=p->link;}cout<<"NULL";}queue::find(char item){ queuenode *w;w=front;M:while(w!=NULL){if(item==w->data){ return 1;break;}else{ w=w->link;goto M;}}if(w==NULL) return 0;}void queue::del( char item){ queuenode *q,*b;q=front;while(q->data!=item){b=q;q=q->link;}if(q==front) {front=front->link; delete q;}else if(q==rear) {rear=b;rear->link=NULL;delete q;}else {b->link=q->link; delete q;}}void main(){int n;char a;cout<<"\n[-----------操作系统之进程管理模拟系统(先来先服务算法)------------]\n"<<endl;queue execute,ready,clog; //执行,就绪,阻塞cout<<"\n[-------请用户输入进程名及其到达cpu的顺序(结束进程数请输入x)------]\n"<<endl;char r;r='x';for(int i=0;;i++){char e[100];cout<<"输入进程名:"<<" ";cin>>e[i];if(e[i]!=r)ready.enqueue(e[i]);elsebreak;}A: cout<<"\n [------------请(学号)用户(姓名)选择操作------------]\n";cout<<"\n [1、执行进程……2、将阻塞队列中进程调入就绪队列………]\n";cout<<"\n [3、封锁进程…………………4、结束进程…………………]\n";cout<<"\n [5、退出程序………………………………………………… ]\n选项: "; cin>>n;if(n==1){if(!execute.isempty ()){cout<<"已经有进程在执行!,此操作不能执行\n";char w;cout<<endl;cout<<"如果要继续请输入#;如果要退出按其它任意键"<<endl;cout<<"要选择的操作:";cin>>w;if(w=='#')goto L;else goto E;}elseif(!ready.isempty()){a=ready.dequeue();if(a!=r)execute.enqueue(a);goto L;}else goto L;}}else if(n==2){if(!clog.isempty()){a=clog.dequeue ();if(a!=r)ready.enqueue(a);goto L;}else goto L;}else if(n==3){if(!execute.isempty()){a=execute.dequeue ();if(a!=r)clog.enqueue(a);goto L;else goto L;}else if(n==4){cout<<"\n请输入要结束的进程名: ";cin>>a;if(execute.find (a)||ready.find (a)||clog.find (a)) {if(execute.find(a)){execute.del(a);}else if(ready.find(a)){ready.del(a);}if(clog.find(a)){clog.del(a);}cout<<"\n结束进程成功!\n"<<endl;goto L;}elsecout<<"没有此进程"<<endl;goto L;L:if(n==1||n==2||n==3||n==4){cout<<"执行队列"<<endl;execute.display();cout<<endl;cout<<"就绪队列"<<endl;ready.display();cout<<endl;cout<<"阻塞队列"<<endl;clog.display();cout<<endl;goto A;}elseif(n==5);else{cout<<"\n你的输入错误!\n";goto A;}}E:;}四、调试分析及测试结果五、用户使用说明用户通过VC++ 即可运行改程序。

相关文档
最新文档