操作系统课程设计:模拟进程管理器实现

4星 · 超过85%的资源 需积分: 10 20 下载量 121 浏览量 更新于2024-07-23 2 收藏 241KB DOC 举报
"进程管理器的模拟实现 - 操作系统课程设计" 在操作系统课程设计中,学生被要求模拟实现一个进程管理器,这是一项旨在深化理解进程管理和程序执行概念的任务。进程管理是操作系统核心功能之一,它涉及到系统资源的分配与调度,以及进程的创建、执行、同步和通信。 设计题目为“进程管理器的模拟实现”,目标是通过编程来展示进程管理的关键特性。设计的主要内容包括: 1. **显示当前运行的进程及其占用的资源**:这部分要求能够列出操作系统中所有活动进程的信息,如进程ID、进程名、内存占用、CPU使用率等。这需要对接操作系统内核或使用API获取进程信息。 2. **对进程进行操作**:例如,能够停止某个特定的进程。这涉及到进程控制操作,如发送信号量来终止进程的执行。 为了完成这个课程设计,学生需要遵循一系列步骤: - **需求分析**:明确系统需要实现的功能,如用户界面、进程信息的显示方式、进程控制命令等。 - **系统设计**:分为概要设计和详细设计。概要设计中,需要绘制软件结构图,表示系统各组件间的关系。详细设计则需要流程图,清晰地展示程序执行的逻辑。 - **编程实现**:使用适合的编程语言和Windows API来编写代码,实现上述功能。 - **测试**:编写测试用例,确保每个功能都能正常工作,并对结果进行分析。 - **文档编写**:包括课程设计说明书,内容应包含系统设计的目的和要求、类的设计、功能模块图、参考资料、程序代码、设计反思等。 - **提交材料**:提交课程设计说明书、软件源代码以及可能的电子文档。 课程设计的进度通常在两周内完成,包括需求调查、系统分析与设计、编程调试和报告撰写等阶段。 参考资料通常会包括操作系统原理的教材和相关的实验教程,帮助学生深入理解和应用理论知识。 通过这个课程设计,学生不仅能提升编程技能,还能增强对操作系统内部机制的理解,特别是关于进程管理的部分,这对于将来从事系统级开发或系统管理员等工作至关重要。
2014-04-08 上传
#include #include "dos.h" #include "stdlib.h" #include "conio.h" //PCB结构体 struct pcb{ int id; //进程序号 int ra; //所需资源A的数量 int rb; //所需资源B的数量 int rc; //所需资源C的数量 int ntime; //所需的时间片个数 int rtime; //已经运行的时间片个数 char state; //进程状态 struct pcb *next; } *hready=NULL,*hblock=NULL,*p; //hready,hblock分别为指向就绪和阻塞队列 typedef struct pcb PCB; int m,n,r,a,b,c,h=0,i=1,time1Inteval; //m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //建立一个PCB结构体型的空链表 PCB *increat(void) { PCB *head=NULL; //head=NULL; return(head); } //从链表起始地址开始输出该链表的内容 void disp(PCB *head) {PCB *p1; p1=head; AnsiString str2; if(head!=NULL) //链表非空 { do { str2+=" "; str2+=IntToStr(p1->id);str2+=" "; str2+=(p1->state);str2+=" "; str2+=IntToStr(p1->ra);str2+=" "; str2+=IntToStr(p1->rb);str2+=" "; str2+=IntToStr(p1->rc);str2+=" "; str2+=IntToStr(p1->ntime);str2+=" "; str2+=IntToStr(p1->rtime);str2+="\r\n"; p1=p1->next; }while(p1!=NULL); //不断输出进程的信息,直到链尾! } //if else { str2+="\t\t该 队 列 中 没 有 进 程!\r\n" ;} Form1->Memo1->Lines->Add(str2); } //将进程插入到链尾(包括就绪队列和阻塞队列) PCB *insert(PCB *head,PCB*pcb) //带两个指针形参:队列指针和当前进程PCB { PCB *pi,*p1; p1=head; pi=pcb; if (head==NULL) { head=pi; pi->next=NULL; } else { while(p1->next!=NULL) {p1=p1->next;} p1->next=pi; pi->next=NULL; } return(head); } //对进程进行初始化,建立就绪队阻塞队列。 void input() { AnsiString str1; m=StrToInt (Form1->Edit1->Text); //读取要模拟的进程总数给m n=StrToInt (Form1->Edit2->Text); //读取需初