操作系统课程设计(完整报告已给老师验收成功)
操作系统课设报告
《操作系统》课程设计(2011/2012学年第二学期第20周)指导教师:XXX班级:学号:姓名:计算机操作系统A课程设计目录一、题目: (3)二、目的和设计要求: (3)(1)、目的: (3)(2)设计要求: (3)三、设计思想或方法: (3)1.读者优先 (3)2.写者优先 (4)3.退出程序 (4)四、实现的功能说明(相关API函数说明): (4)五、设计流程图: (10)六、核心源程序代码和界面图: (10)1、源程序代码 (10)2、主菜单界面: (17)3、读者优先界面: (17)4、写者优先界面: (18)七、实验心得与体会: (19)一、题目:读者写者问题二、目的和设计要求:(1)、目的:①理解读者写者问题的基本概念,读写操作限制;②掌握基于windows的多线程编程的基本流程;③实现读者优先和写者优先的调度算法;(2)设计要求:在windows 2000环境下,创建一个控制台进程,此进程包含n个线程。
用这n个线程来表示n个读者或写者。
每个线程按相应测试数据文件(后面有介绍)的要求进行读写操作。
用信号量机制分别实现读者优先和写者优先的读者—写者问题。
读者—写者问题的读写操作限制(包括读者优先和写者优先):读者优先/写者优先先来先服务,避免并发抢占1)写—写互斥,即不能有两个写者同时进行写操作。
2)读—写互斥,即不能同时有一个线程在读,而另一个线程在写。
3)读—读允许,即可以有一个或多个读者在读。
读者优先的附加限制:如果一个读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。
写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。
运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。
三、设计思想或方法:可以将所有读者和所有写者分别存于一个读者等待队列和一个写者等待队列中,每当读允许时,就从读者队列中释放一个或多个读者线程进行读操作;每当写允许时,就从写者队列中释放一个写者进行写操作。
《操作系统》课程设计报告
《操作系统》课程设计报告一、读者/写者的问题模拟实现读者/写者问题,是指保证一个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设计目的通过实现经典的读者写者问题,巩固对线程及其同步机制的学习效果,加深对相关基本概念的理解,并学习如何将基本原理和实际设计有机的结合。
2 设计要求在Windows 2000/XP环境下,使用多线程和信号量机制实现经典的读者写者问题,每个线程代表一个读者或一个写者。
每个线程按相应测试数据文件的要求,进行读写操作。
请用信号量机制分别实现读者优先和写者优先的读者-写者问题。
读者-写者问题的读写操作限制:(1)写-写互斥,即不能有两个写者同时进行写操作(2)读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写(3)读-读允许,即可以有二个以上的读者同时读读者优先的附加限制:如果一个读者申请进行读操作时已有另一读者正在进行读操作,则该读者可直接开始读操作。
写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。
运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确信所有处理都遵守相应的读写操作限制。
3 测试数据文件格式测试数据文件包括n 行测试数据,分别描述创建的n 个线程是读者还是写者,以及读写操作的开始时间和持续时间。
每行测试数据包括四个字段,各字段间用空格分隔。
第一字段为一个正整数,表示线程序号。
第二字段表示相应线程角色,R 表示读者是,W 表示写者。
第三字段为一个正数,表示读写操作的开始时间。
线程创建后,延时相应时间(单位为秒)后发出对共享资源的读写申请。
第四字段为一个正数,表示读写操作的持续时间。
当线程读写申请成功后,开始对共享资源的读写操作,该操作持续相应时间后结束,并释放共享资源。
下面是一个测试数据文件的例子:1 r 3 52 w 4 53 r 5 24 r 6 55 w 5.1 34 相关API函数CreateThread()在调用进程的地址空间上创建一个线程ExitThread()用于结束当前线程Sleep()可在指定的时间内挂起当前线程CreateMutex()创建一个互斥对象,返回对象句柄OpenMutex()打开并返回一个已存在的互斥对象句柄,用于后续访问ReleaseMutex()释放对互斥对象的占用,使之成为可用WaitForSingleObject()可在指定的时间内等待指定对象为可用状态InitializeCriticalSection()初始化临界区对象EnterCriticalSection()等待指定临界区对象的所有权LeaveCriticalSection()释放指定临界区对象的所有权文件系统的设计通过对文件系统的设计,加深理解文件系统的内部功能及内部实现。
操作系统课程设计实验报告
操作系统课程设计实验报告操作系统课程设计实验报告引言:操作系统是计算机科学中的重要课程,通过实验设计,可以帮助学生更好地理解操作系统的原理和实践。
本文将结合我们在操作系统课程设计实验中的经验,探讨实验设计的目的、实验过程和实验结果,以及对操作系统的理解和应用。
一、实验设计目的操作系统课程设计实验的目的是帮助学生深入理解操作系统的工作原理和实际应用。
通过设计和实现一个简单的操作系统,学生可以更好地掌握操作系统的各个组成部分,如进程管理、内存管理、文件系统等。
同时,实验设计还可以培养学生的动手能力和问题解决能力,提高他们对计算机系统的整体把握能力。
二、实验过程1. 实验准备在进行操作系统课程设计实验之前,我们需要对操作系统的基本概念和原理进行学习和理解。
同时,还需要掌握一些编程语言和工具,如C语言、汇编语言和调试工具等。
这些准备工作可以帮助我们更好地进行实验设计和实现。
2. 实验设计根据实验要求和目标,我们设计了一个简单的操作系统实验项目。
该项目包括进程管理、内存管理和文件系统三个主要模块。
在进程管理模块中,我们设计了进程创建、调度和终止等功能;在内存管理模块中,我们设计了内存分配和回收等功能;在文件系统模块中,我们设计了文件的创建、读写和删除等功能。
通过这些模块的设计和实现,我们可以全面了解操作系统的各个方面。
3. 实验实现在进行实验实现时,我们采用了分阶段的方法。
首先,我们实现了进程管理模块。
通过编写相应的代码和进行调试,我们成功地实现了进程的创建、调度和终止等功能。
接下来,我们实现了内存管理模块。
通过分配和回收内存空间,我们可以更好地管理系统的内存资源。
最后,我们实现了文件系统模块。
通过设计文件的读写和删除等功能,我们可以更好地管理系统中的文件资源。
三、实验结果通过实验设计和实现,我们获得了一些有意义的结果。
首先,我们成功地实现了一个简单的操作系统,具备了进程管理、内存管理和文件系统等基本功能。
《操作系统》课程设计
《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。
技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。
情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。
学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。
在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。
二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。
- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。
- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。
- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。
操作系统课程设计报告
操作系统课程设计报告概述:本课程设计旨在使学生熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。
通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。
同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
主要任务:本课程设计的主要任务是设计和实现一个简单的文件系统,包括建立文件存储介质的管理机制、建立目录(采用一级目录结构)、文件系统功能(显示目录、创建、删除、打开、关闭、读、写)和文件操作接口(显示目录、创建、删除、打开、关闭、读、写)。
系统设计:本系统模拟一个文件管理系统,要完成对文件的基本操作,包括文件、文件夹的打开、新建、删除和读取写入文件,创建更改目录,列出目录内容等信息。
系统建立了文件目录树,存储文件系统中的所有文件。
对于用户名下的文件,用文件目录树的分支来存储。
采用命令行操作界面很直观,也方便用户进行操作,用户只要按照操作界面所显示的命令来操作即可。
整体设计框架:系统初始化界面由创建用户存储空间、管理文件、退出系统三个模块组成。
用户创建由创建用户存储空间、进入目录、删除用户存储空间、显示所有用户存储空间等模块组成。
然后各个模块再由一些小模块组成。
其中创建文件、打开关闭文件、读写文件等文件操作模块包括在进入目录模块里面。
系统实现:以下是本课程设计的主要内容的实现程序代码: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;添加文件:在该函数中,我们首先需要获取文件名,然后检查是否已经存在该文件。
操作系统课程设计报告
目录一、课程设计目的 (2)二、课程设计要求 (2)三、创新思维 (3)四、系统环境支持及语言选择 (4)五、系统框架构成 (4)(一)整体框架: (4)(二)流程图 (5)1.先来先服务算法流程图 (5)2.优先级算法 (5)六、系统功能说明 (6)(一)先来先服务算法的实现: (6)(二)静态优先级算法的实现: (6)(三)动态优先级算法的实现: (6)(四)创建进程的实现: (6)(五)阻塞进程的实现: (7)(六)唤醒进程的实现: (7)(七)撤销进程的实现: (7)(八)进程控制的实现: (7)七、用户使用说明 (8)八、体会与自我评价 (8)一、课程设计目的在学习操作系统课程的基础上,在对操作系统各部分充分理解的基础上,对操作系统的整体进行一个模拟。
本实验进行的进程调度系统的算法采用的是动态和静态优先数优先的调度算法(即把处理机分配给优先数最低的进程)先来先服务算法。
通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。
同时,可以提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力、创新能力、开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。
二、课程设计要求1.进程管理功能以进程调度为主要功能。
以进程控制为辅助功能。
2.体现操作系统原理中进程调度算法和进程控制算法。
按照操作系统原理设计。
3.结构化设计。
设计时构建出模块结构图并存于文件中。
模块化实现,对每一功能,每一操作使用模块、函数、子程序设计方法实现。
4.进程以PCB为代表。
队列、指针用图示。
每一步功能在桌面上能显示出来。
5.系统应具有排错功能,对可能出现的错误应具有排查功能和纠错能力。
6.界面自行设计,语言自行选择。
(可用C#语言,也可用你会的其他语言,甚至还可用PPT)7.每人的设计功能都能表现或说明出来。
8.进程以队列法组织,对不同进程调度算法:FIFO队列或PRI队列或rotate(轮转队列)用同一个进程序列组织,对阻塞队列可设置一个,也可设多个。
操作系统课程设计报告.doc
操作系统课程设计报告xx信息技术学院操作系统课程设计报告一、操作系统课程设计的目的与要求1、目的死锁会引起进程僵死,严重的话会造成整个系统瘫痪。
因此,死锁现象是操作系统特别是大型系统中必须设法防止的。
学生应独立的使用C语言(或其它程序设计语言)编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效的防止死锁的发生。
从而更直观地了解死锁的起因,初步掌握防止死锁的简单方法,加深理解课堂上讲授过的知识。
2、要求(1)设计一个由n个并发进程共享m个系统资源的系统。
系统中进程可动态地申请资源和释放资源。
系统按各进程的申请动态地分配各资源。
(2)系统应能显示各进程申请和释放资源以及系统动态分配资源的过程,便于用户观察和分析。
(3)系统应能选择是否采用防止死锁算法或选用何种防止算法(如有多种算法)。
在不采用防止算法时观察死锁现象的发生过程。
在使用防止死锁算法时,了解在同样申请条件下,防止死锁的过程。
二、简述课程设计内容、主要功能和实现环境本示例采用银行家算法防止死锁的发生。
假设有三个并发进程共享十个系统。
在三个进程申请的系统资源之和不超过10时,当然不可能发生死锁,因为各个进程申请的资源都能满足。
在有一个进程申请的系统资源数超过10时,必然会发生死锁。
应该排除这二种情况。
程序采用人工输入各进程的申请资源序列。
如果随机给各进程分配资源,就可能发生死锁,这就是不采用防止死锁算法的情况。
假如,按照一定的规则,为各进程分配资源,就可以防止死锁的发生。
示例中采用了银行算法。
1编制和调试示例给出的死锁观察与避免程序,并用进程的各种资源请求序列测试死锁的形成和避免死锁的过程,强调过程显示。
2修改并调试一个使用有序资源使用法来预防死锁的模拟程序,并用进程的各种资源请求序列测试死锁的形成和预防死锁的过程。
实现环境C三、任务的分析、设计、实现和讨论1、任务的分析操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。
《操作系统课程设计》报告范本(doc 10页)
《操作系统课程设计》报告学号:姓名:班级:指导教师:报告日期:一、课设目的通过对操作系统课程的学习,熟悉进程的概念、进程的管理与存储、进程的调度,通过实践深入理解进程的调度算法。
二、课设任务要求编写一个程序,可以创建若干个虚拟进程,并对若干个虚拟进程进行调度,调度策略为时间片轮转法,主要任务包括:①进程的个数,进程的内容(即进程的功能序列)来源于一个进程序列描述文件,另外调度运行结果输出到一个运行日志文件;②设计PCB适用于时间片轮转法;③建立进程队列;④实现时间片轮转调度算法,尽量可视化的展示调度的动态过程。
○5总结程序设计的开发过程:需求分析、系统设计、系统实现及文档的收集和整理。
三、实验方法与设计分析每个进程有一个进程控制块( PCB)表示。
进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
据需要设计调查计划调查、收集数据,能按要求整理数据,在统计表进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。
进程的到达时间为输入进程的时间。
,计算机,千千万万中小创业者渴望成功高中语文,语文试卷,计算机摇篮课进程的运行时间以时间片为单位进行计算。
每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。
式,因此上开店成为了一种潮流,并且越来越多高中语文,语文试卷,计算机就绪进程获得 CPU后都只能运行一个时间片。
用已占用CPU时间加1来表示。
卷,计算机络购物高中语文,语文试卷,计算机市场潜力还远未被释放课件同如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
语文,语文试卷,计算机,第5代速度达自动软件,不用东奔西走高中语文,语文每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。
操作系统课程设计报告
操作系统课程设计报告1. 引言操作系统是计算机系统中最核心的软件之一,它负责管理和优化计算机资源的分配和调度,为用户和应用程序提供一个可靠、高效的执行环境。
在操作系统课程设计中,我们通过设计一个简单的操作系统,深入理解操作系统的原理和功能,提升对操作系统的理解和实践能力。
本报告将详细介绍我们小组在操作系统课程设计过程中所完成的工作和实现的目标。
2. 设计目标在本次操作系统课程设计中,我们的设计目标包括:•实现一个基本的中断处理、进程调度和内存管理机制;•设计一个简单的文件系统;•确保操作系统的稳定性和可靠性;•实现用户命令解析和执行功能。
3. 系统架构我们的操作系统设计采用了经典的分层结构,主要由硬件抽象层、内核和用户接口层组成。
1.硬件抽象层:负责与硬件进行交互,提供基本的底层硬件接口,如处理器管理、中断处理、设备控制等。
2.内核:实现操作系统的核心功能,包括进程管理、内存管理、文件系统管理等。
这一层是操作系统的核心,负责管理和调度系统资源。
3.用户接口层:为用户提供简单友好的界面,解析用户输入的命令并调用内核功能进行处理。
用户可以通过命令行或图形界面与操作系统进行交互。
4. 功能实现4.1 中断处理中断是操作系统与外部设备通信的重要机制,我们的操作系统设计中实现了基本的中断处理功能。
通过在硬件抽象层中捕获和处理硬件的中断信号,内核可以对中断进行相应的处理,保证系统的响应能力和稳定性。
4.2 进程调度进程调度是操作系统中的重要任务之一,它决定了系统如何分配和调度上下文切换。
我们的操作系统设计中实现了一个简单的进程调度算法,通过时间片轮转算法和优先级调度算法来管理多个进程的执行顺序,以提高系统的吞吐量和响应性能。
4.3 内存管理内存管理是操作系统中必不可少的功能,它负责对系统内存的分配和回收。
我们的操作系统设计中实现了基本的内存管理功能,包括内存分区、内存空闲管理和地址映射等。
通过合理的内存管理,可以提高系统的内存利用率和性能。
计算机操作系统课设操作系统课程设计报告
课程实验报告题目:操作系统原理专业班级:信息安全1302 班学号:姓名:指导教师:报告日期:2016 年2 月29 日计算机科学与技术学院目录1. 初探Linux 编程环境 (1)1.1. 实验目的 (1)1.2. 实验内容 (1)1.2.1. 实验一 (1)1.2.2. 实验二 (1)1.3. 实验设计 (1)1.3.1. 实验一 (1)1.3.2. 实验二 (2)1.4. 实验环境 (3)1.5. 实验步骤 (3)1.5.1. 实验一 (3)1.5.2. 实验二 (3)1.6. 调试记录 (4)1.6.1. 实验一 (4)1.6.2. 实验二 (4)1.7. 实验结果 (5)1.7.1. 实验一 (5)1.7.2. 实验二 (6)2. 通过编译内核的方式为Linux 增加系统调用 (8)2.1. 实验目的 (8)2.2. 实验内容 (8)2.3. 实验设计 (8)2.4. 实验环境 (8)2.5. 实验步骤 (8)2.6. 调试记录 (10)2.7. 实验结果 (11)3. 编写设备驱动程序 (13)3.1. 实验目的 (13)3.2. 实验内容 (13)3.3. 实验设计 (13)3.4. 实验环境 (14)3.5. 实验步骤 (14)3.6. 调试记录 (15)3.7. 实验结果 (15)4. 实现系统监控程序 (17)4.1. 实验目的 (17)4.2. 实验内容 (17)4.3. 实验设计 (18)4.4. 实验环境 (22)4.5. 实验步骤 (22)4.6. 调试记录 (22)4.7. 实验结果 (23)5. 设计模拟文件系统 (28)5.1. 实验目的 (28)5.2. 实验内容 (28)5.3. 实验设计 (28)5.4. 实验环境 (33)5.5. 实验步骤 (34)5.6. 调试记录 (34)5.7. 实验结果 (34)6. 附注:程序清单 (39)6.1. 文件拷贝程序 (39)6.2. 多进程多窗口实验 (40)6.3. 编译内核添加系统调用 (41)6.4. 编写模块 (43)6.5. 任务监视器 (49)6.6. 模拟文件系统 (64)1. 初探Linux 编程环境1.1. 实验目的掌握Linux 操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux 下的编程环境,了解在Linux 如何进行多线程编程以及图形编程。
操作系统课程设计(银行家算法设计)
《 操作系统 》课程设计报告系 别: 信息科学与技术系专业班级:学生姓名:指导教师:(课程设计时间:2010年7月5日——2010年7月9日)目 录一、课程设计目的和意义 (3)二、课程设计题目描述及算法 (3)三、课程设计报告内容 (3)1.算法描述 (3)2.数据结构 (4)3.主要函数说明 (4)4.算法流程图 (5)5.运行结果及说明 (7)6.附录清单及分析 (8)四、总结 (14)一、课程设计目的和意义了解掌握银行家算法,学会模拟实现资源分配,同时有要求编写和调试一个系统分配资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生二、课程设计题目描述及算法题目:银行家算法设计设计要求:编制银行家算法通用程序,并检测所给状态的系统安全性。
设进程I提出请求Request[N],则银行家算法按如下规则进行判断。
(1)如果Request[N]<=NEED[I,N],则转(2);否则,出错。
(2)如果Request[N]<=AVAILABLE,则转(3);否则,出错。
(3)系统试探分配资源,修改相关数据:AVAILABLE=AVAILABLE-REQUESTALLOCATION=ALLOCATION+REQUESTNEED=NEED-REQUEST(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
上述三个矩阵存在如下关系:Need[i,j]= Max[i,j]- Allocation[i,j]三、课程设计报告内容1.算法描述设Request[i] 是进程Pi的请求向量,如果Requesti[j]=K,表示进程Pi需要K 个Rj类型的资源,当Pi发出资源请求后,系统按下面步骤进行检查:,便转向步骤2;否则认为出错,因为它所需(1)如果Requesti[j]<=Need[i,j]要的资源数已超过它所宣布的最大值。
(完整word版)操作系统课程设计实验报告
操作系统课程设计报告时间:2015-12-28 〜2013-1-8地点:信息技术实验中心计算机科学与技术专业2013 级2 班07 号2015-12-28目录一.课程设计的目的和意义 (3)二进程调度算法模拟 (4)1 设计目的 (4)2 设计要求 (4)3 使用动态优先权的进程调度算法的模拟 (6)4. ............................................................................................................................................ 程序流程图 (10)5. ............................................................................................................................................ 实验结果 .. (11)6. ............................................................................................................................................ 实验代码 .. (14)7. ............................................................................................................................................ 实验总结 .. (20)三动态分区分配方式模拟 (21)1 设计目的 (21)2 设计要求 (21)3 模拟算法的实现 (21)4 程序流程图 (24)5 实验结果 (24)6 实验代码 (25)7.实验总结 (30)四请求调页存储管理方式模拟 (31)1 设计目的 (31)2 设计要求 (31)3 模拟算法的实现 (32)4 程序流程图 (37)5. ............................................................................................................................................ 实验结果 .. (38)6. ............................................................................................................................................ 实验代码 .. (39)7. ............................................................................................................................................ 实验总结 .. (42)五简单文件系统的实现 (43)1 设计目的 (43)2 设计要求 (43)3 算法的实现 (44)4.程序流程图 (46)5.实验结果 (46)6 实验代码 (47)7.实验总结 (61)操作系统课程设计总结 (62)课程设计的目的和意义目的:1. 根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容。
操作系统课程设计报告
操作系统课程设计实验报告姓名:学号:班级专业:软件工程操作系统课程设计---建立基于磁盘存储设备的FAT文件系统一、课程设计要求、目的在现代计算机系统中,用到大量的程序和数据,由于内存容量有限,且不能长期保存,故而平时总是把他们以文件的形式存放在外村中,需要时可随时将他们调入到内存。
如果用户直接管理外存上的文件,不仅要求用户熟悉外存的特性,了解各种文件的属性,以及他们在外存上的位置,而且在多用户的环境下,还必须能保持数据的安全性和一致性。
显然,这是用户多不能胜任、也不愿意承担的工作。
取而代之的是操作系统中又增加了文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。
这不仅方便了用户,保证了文件的安全性,还可以有效的提高系统资源的利用率。
课程设计不仅要求我们紧扣课本知识,熟练的掌握课FAT文件系统实现原理上,而且要求最终的软件实现有很好的人机交互界面,从多方面考查我们的学习、实践能力。
让我们在实践中去认识FAT文件系统的实现原理,加深对文件系统存储、数据的安全性和一致性理解,在实践中去完善自己的理论知识,纠正理论学习过程中出现的错误。
二、课程设计的任务1、首先分配一定容量的磁盘存储空间,作为文件存储空间。
2、建立相应的文件系统,使用FAT文件系统。
3、为该文件系统设计相应的数据结构来管理目录、磁盘空闲空间、已分配空间等。
4、提供文件的创建、删除、移位、改名等功能。
5、提供良好的界面,可以显示磁盘文件系统的状态和空间的使用情况。
6、提供虚拟磁盘转储功能,可将信息存入磁盘,还可从磁盘读入内存。
三、相关原理及算法描述3.1文件系统设计原理本次设计的基于磁盘存储设备的FAT文件系统利用的是二级目录管理方式,分别由用户文件目录UFD( User File Directory )、主文件目录MFD( Master File Diretory )构成。
其中UFD由用户的所有文件块组成,在MFD中每个用户目录文件占用一个目录项,其中目录项中包括用户名和指向用户目录文件的指针,其基本构成如图所示:用户文件目录项的基本信息包括基本信息、地址信息、访问控制信息、使用信息。
操作系统课程设计报告免费
操作系统课程设计报告免费一、课程目标知识目标:1. 理解操作系统的基本概念,掌握操作系统的功能、类型和结构;2. 学习操作系统的进程管理、内存管理、文件系统、设备管理等方面的基本原理;3. 了解操作系统的发展历程,掌握当前主流操作系统的特点。
技能目标:1. 能够分析操作系统的基本工作原理,运用所学知识解决实际问题;2. 学会使用操作系统提供的接口和工具,进行简单的系统编程;3. 掌握操作系统性能评价和优化的基本方法,提高系统运行效率。
情感态度价值观目标:1. 培养学生对操作系统的学习兴趣,激发他们探索计算机科学领域的热情;2. 增强学生的团队合作意识,提高他们在项目实践中沟通、协作的能力;3. 培养学生严谨、务实的科学态度,使他们具备良好的计算机素养。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在帮助学生掌握操作系统的基础知识,提高实践能力。
学生特点:学生已具备一定的计算机基础,具有较强的逻辑思维能力和编程能力。
教学要求:注重理论与实践相结合,强调学生动手实践,培养具备实际操作能力的应用型人才。
在此基础上,将课程目标分解为具体的学习成果,以便后续的教学设计和评估。
的内容,只输出教学内容部分,300字左右。
教学内容:本章节教学内容围绕操作系统的核心概念和原理展开,主要包括以下几部分:1. 操作系统的概述:介绍操作系统的定义、功能和目标,使学生理解操作系统的基本概念及其在计算机系统中的作用。
- 教材章节:第1章 操作系统概述2. 进程管理:讲解进程与线程的概念、进程调度算法、同步互斥机制等,使学生掌握操作系统进程管理的基本原理。
- 教材章节:第2章 进程管理3. 内存管理:探讨内存分配策略、虚拟内存技术、页面置换算法等,帮助学生理解操作系统内存管理的方法。
- 教材章节:第3章 内存管理4. 文件系统:介绍文件和目录结构、文件存储与访问控制、磁盘空间分配策略等,使学生了解文件系统的基本组成和工作原理。
操作系统课程设计报告(完成版)
XX大学课程设计报告课程设计题目:Windows系统资源管理器与任务管理器学院:专业班级:年级:2008级姓名:学号:完成时间:2012 年7 月 3 日成绩:指导教师:教务处课程设计指导教师评定成绩表指导教师评定成绩:指导教师签名:年月日重庆大学本科学生课程设计任务书目录摘要 (1)第一章课程设计要求 (2)第二章设计概要 (3)2.1功能设计 (3)2.2程序系统功能模块 (3)2.2.1 Windows任务管理器功能模块 (3)2.2.2 Windows资源管理器功能模块 (4)2.3功能分析 (4)2.3.1 Windows任务管理器功能流程图 (4)2.3.2 Windows资源管理器功能流程图 (5)2.3.3 Windows任务管理器界面截图 (6)2.3.4 Windows资源管理器界面截图 (8)2.3.5 程序主要功能说明 (11)第三章调试分析与测试结果 (34)3.1 Windows任务管理器 (34)3.1.1基本界面 (34)3.1.2 进程状态查看 (35)3.1.3 CPU状态查看 (36)3.1.4 进程管理功能 (36)3.2 Windows资源管理器 (39)3.2.1 基本界面 (39)3.2.2 剪切功能的实现 (41)3.2.3 复制功能的实现 (42)3.2.4 删除功能的实现 (43)第四章设计总结 (44)第五章参考文献 (45)摘要操作系统是一个介于软件和硬件之间的特殊硬件,一方面分配硬件资源另一方面支持软件在它上面的实现,如何实时地监控和掌握系统软硬件工作的状态、资源分配和使用的情况,对计算机用户而言十分重要,于是就有了任务管理器这样的实时监控窗口;同理,我们也需要掌握计算机硬件设备的工作状态,掌握其如何存储文件、分配硬盘资源等,这也是我们做资源管理器的初衷。
我们的电脑需要我们去了解它的运行状况,掌握和管理它的进程,并对其异常情况给予操作和控制,任务管理器就像是我们了解和控制自己电脑运作的一个窗口,通过这个窗口我们可以了解到电脑所有进程运行状况,并对运行的进程加于管理和控制,正如在本实验中,启动进程管理器后,可以通过”获取进程”功能来获得本计算机启动的进程,以及与该进程相关的信息,其中包括的信息有:进程映像名称,进程开启的线程数,进程的PID以及进程的优先数,我们可以通过这些信息来了解计算机中每个进程的使用状况。
c操作系统课程设计报告
c 操作系统课程设计报告一、课程目标知识目标:1. 理解操作系统的基本概念,掌握操作系统的功能和作用;2. 学习C语言在操作系统中的应用,理解操作系统核心模块的实现原理;3. 掌握进程管理、内存管理、文件系统等基本知识,了解其与C语言编程的关联。
技能目标:1. 能够运用C语言编写简单的操作系统程序,如进程调度、内存分配等;2. 学会分析操作系统的性能,提出优化方案,并运用C语言进行改进;3. 培养学生的动手实践能力,能够独立完成一个小型操作系统的设计与实现。
情感态度价值观目标:1. 培养学生对计算机操作系统的兴趣,激发学习热情,形成主动学习的习惯;2. 培养学生的团队合作意识,学会与他人共同解决问题,提高沟通与协作能力;3. 培养学生的创新精神,鼓励学生勇于尝试,敢于突破,培养解决复杂问题的信心。
本课程针对高年级学生,课程性质为理论与实践相结合。
根据学生的知识水平,课程目标具体、可衡量,旨在帮助学生深入理解操作系统原理,提高C语言编程能力,培养实际操作与解决问题的技能。
课程目标分解为具体学习成果,便于后续教学设计和评估。
在教学过程中,注重启发式教学,引导学生主动探索,提高学生的实践能力和创新能力。
二、教学内容1. 操作系统基本概念:介绍操作系统的定义、功能、发展历程及分类;教材章节:第1章 操作系统概述2. 进程管理:讲解进程与线程的概念、进程调度算法、进程同步与互斥;教材章节:第2章 进程管理3. 内存管理:介绍内存分配策略、虚拟内存技术、页面置换算法;教材章节:第3章 内存管理4. 文件系统:讲解文件和目录结构、文件存储与访问控制、文件系统性能优化;教材章节:第4章 文件系统5. C语言在操作系统中的应用:分析C语言在操作系统编程中的优势,举例说明;教材章节:第5章 操作系统编程6. 操作系统性能分析与优化:介绍性能评价方法,分析操作系统性能瓶颈,提出优化方案;教材章节:第6章 操作系统性能分析与优化7. 课程实践:设计小型操作系统模块,如进程调度、内存分配等,运用C语言实现;教材章节:第7章 操作系统课程实践教学内容安排和进度:本课程共16课时,教学内容按照以上大纲进行安排,每部分内容分配2-3课时,最后4课时用于课程实践。
操作系统课程设计报告
物理与电子信息工程学院题目:12完成日期:指导教师:曾令华目录一、操作系统课程设计1、操作系统课程设计宗旨2、课程目的二、页面置换算法1、目的2、背景3、常见的页面置换算法4、设计思想三、页面置换算法流程图1、页面置换算法实现流程图四、页面置换算法代码运行结果1、采用随机数产生结果2、采用自定义页面信息产生结果五、进程调度算法实现1、目的2、设计思想3、可行性分析六、进程调度算法流程图1、主流程图七、进程调度算法执行结果1、先来先服务算法2、优先级算法八、页面置换算法源代码九、进程调度算法源代码一、操作系统课程设计1、操作系统课程设计宗旨为了更好的帮助我们同学进一步加深对计算机操作系统的掌握与理解,学校给计本班开设了操作系统这门课程。
帮助我们进一步了解并巩固了计算机操作系统的一些有关进程调度,页面置换,文件处理等方面的知识。
2、课程目的利用简单的数据结构,模拟操作系统中的一些有关文件操作,进程调度,页面置换。
二、页面置换算法实现1、目的利用简单的数据结构,模拟实现操作系统中的页面置换机制1、用C语言编写OPT、FIFO、LRU三种置换算法。
2、熟悉内存分页管理策略。
3、了解页面置换的算法。
4、掌握一般常用的调度算法。
5、根据方案使算法得以模拟实现。
6、锻炼知识的运用能力和实践能力。
2、背景在操作系统当中,在进程运行过程中,若其访问的页面不在内存中而需把他们调入内存,但内存已无空闲空间时,为了保证该进程能够正常的运行,系统必须从内存中调出一页程序或数据送到磁盘的兑换区中,但是应该是哪个页面被调出,需根据一定的算法来确定。
通常,我们把这一类的算法称为“页面置换算法”,页面置换算法执行效率的高低,往往直接影响到操作系统的性能。
3、常见页面置换算法1、先进先出算法(FIFO)这是最早出现的置换算法,该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面换出,该算法实现简单。
2、最近最久未使用(LRU)最近最久未使用的置换算法,是根据页面调入内存后的使用情况却决策的,由于无法预测个页面将来的使用情况,只能根据“最近的过去”作为“最近的将来”的近似,因此,最近最久未使用(LRU)算法是选择最近的最久未使用的页面予以淘汰。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;}else{if(!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++ 即可运行改程序。