资源简介
假定系统有五个进程,每一个进程用一个进程控制块PCB来代表;进程控制块如包含:进程名、指针、要求运行时间、优先数、状态等。
在每次运行所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”
在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。
为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程

代码片段和文件信息
#include “stdafx.h“
#include “ProcessDlg.h“
extern enum State;
extern CListCtrl m_ProcessShow;
extern void Display( PCB* pcb );
//void Process::Run()
//{
// if (m_PCB.PState = Terminated)
// {
// return;
// }
// m_PCB.RequestTime--;
// if (m_PCB.RequestTime <= 0)
// {
// m_PCB.PState = Terminated;
// }
//}
//
//void Process::Wait()
//{
// m_PCB.Priority++;
//}
//
//void Process::SetTime( int time )
//{
// m_PCB.RequestTime = time;
//}
//
//void Process::SetPriority( int priority )
//{
// m_PCB.Priority = priority;
//}
//
//void Process::SetState( State state )
//{
// m_PCB.PState = state;
//}
//
//void Process::SetName( CString strName )
//{
// m_PCB.PName = strName;
//}
//
//void Process::SetID( int id )
//{
// m_PCB.PID = id;
//}
//
//PCB& Process::GetPCB()
//{
// return m_PCB;
//}
DWORD WINAPI ProcessSimulate( LPVOID lParam )
{
CProcessDlg* MyProcess = (CProcessDlg*) lParam;
ASSERT(MyProcess != NULL);
//HANDLE hProcessFalse = NULL;
//HANDLE hProcessTrue = NULL;
//HANDLE hThreadFalse = NULL;
//HANDLE hThreadTrue = NULL;
//hProcessFalse = GetCurrentProcess();
//hThreadFalse = GetCurrentThread();
//DuplicateHandle( hProcessFalse hThreadFalse hProcessFalse &hThreadTrue 0 FALSE DUPLICATE_SAME_ACCESS );
PCB* m_PCB = MyProcess->m_ProcessSchedule.GetPCB(MyProcess->m_ProcessSchedule.currentrun);
while(m_PCB->RequestTime >= 0)
{
m_PCB->RequestTime--;
if (m_PCB->RequestTime <= 0)
{
m_PCB->PState = Terminated;
return 0;
}
SuspendThread(MyProcess->m_ProcessSchedule.currentrun);
}
return 0;
}
bool ProcessSchedule::Step()
{
PCB* pcb = GetPCBHead();
int runPID;
runPID = SortProcess();
Display(pcb);
Sleep(100);
if (runPID == -1)
{
return false;
}
runID = runPID;
HANDLE handle = GetPCB(runPID)->pHandle;
currentrun = handle;
// ResumeThread(handle);
CreateThread(NULL0(LPTHREAD_START_ROUTINE)Waitthis0NULL);
// Wait(runPID);
Display(pcb);
return true;
}
int ProcessSchedule::SortProcess()
{
int i = -1 j = -1;
PCB* pcb = PCBHead;
while(pcb != NULL)
{
if (i<(pcb->Priority))
{
if (pcb->PState == Terminated)
{
pcb = pcb->next;
continue;
}
i = pcb->Priority;
if (pcb->RequestTime == 0)
{
continue;
}
j = pcb->PID;
}
if (GetPCB(j)->RequestTime == 0)
{
return -1;
}
if (pcb->RequestTime != 0)
{
pcb->PState =Ready;
}
else
{
pcb->PState = Terminated;
}
pcb = pcb->next;
}
MaxPriority = i;
return j;
}
int ProcessSchedule::GetLenth()
{
return iLenth;
}
PCB* ProcessSchedule::GetPCB( int pid )
{
PCB * pcb = PCBHead;
for (int i = pid;i>0;i--)
{
pcb = pcb->next;
}
return pcb;
}
PCB* ProcessSchedule::GetPCB( HANDLE handle )
{
PCB * pcb = PCBHead;
while(pcb != NULL)
{
if (handle == pcb->pHandle)
{
break;
}
pcb =
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 136192 2010-04-20 23:37 进程管理大作业\doc\设计方案报告.doc
文件 48128 2010-04-20 23:35 进程管理大作业\exe\ProcessScheduleSimulator.exe
文件 4531 2010-04-20 23:26 进程管理大作业\src\ProcessScheduleSimulator\MyProcess.cpp
文件 1846 2010-04-20 23:07 进程管理大作业\src\ProcessScheduleSimulator\MyProcess.h
文件 6516 2010-04-20 23:07 进程管理大作业\src\ProcessScheduleSimulator\ProcessDlg.cpp
文件 1149 2010-04-20 22:34 进程管理大作业\src\ProcessScheduleSimulator\ProcessDlg.h
文件 59800 2010-04-20 22:26 进程管理大作业\src\ProcessScheduleSimulator\ProcessScheduleSimulator.aps
文件 1694 2010-04-19 01:13 进程管理大作业\src\ProcessScheduleSimulator\ProcessScheduleSimulator.cpp
文件 481 2010-04-19 01:13 进程管理大作业\src\ProcessScheduleSimulator\ProcessScheduleSimulator.h
文件 6056 2010-04-20 22:26 进程管理大作业\src\ProcessScheduleSimulator\ProcessScheduleSimulator.rc
文件 5746 2010-04-20 22:51 进程管理大作业\src\ProcessScheduleSimulator\ProcessScheduleSimulator.vcproj
文件 1413 2010-04-20 16:06 进程管理大作业\src\ProcessScheduleSimulator\ProcessScheduleSimulator.vcproj.416-0040.user.user
文件 1427 2010-04-20 23:36 进程管理大作业\src\ProcessScheduleSimulator\ProcessScheduleSimulator.vcproj.ZSP-64042843A6F.zsp.user
文件 2984 2010-04-19 01:13 进程管理大作业\src\ProcessScheduleSimulator\ReadMe.txt
文件 21630 2003-07-24 09:52 进程管理大作业\src\ProcessScheduleSimulator\res\ProcessScheduleSimulator.ico
文件 380 2010-04-19 01:13 进程管理大作业\src\ProcessScheduleSimulator\res\ProcessScheduleSimulator.rc2
文件 1068 2010-04-20 22:26 进程管理大作业\src\ProcessScheduleSimulator\resource.h
文件 155 2010-04-19 01:13 进程管理大作业\src\ProcessScheduleSimulator\stdafx.cpp
文件 1796 2010-04-19 01:13 进程管理大作业\src\ProcessScheduleSimulator\stdafx.h
文件 1030 2010-04-19 01:13 进程管理大作业\src\ProcessScheduleSimulator\targetver.h
文件 938 2010-04-19 01:13 进程管理大作业\src\ProcessScheduleSimulator.sln
文件 23552 2010-04-20 23:36 进程管理大作业\src\ProcessScheduleSimulator.suo
目录 0 2012-10-29 18:00 进程管理大作业\src\ProcessScheduleSimulator\res
目录 0 2012-10-29 18:00 进程管理大作业\src\ProcessScheduleSimulator
目录 0 2013-03-24 21:26 进程管理大作业\doc
目录 0 2012-10-29 18:00 进程管理大作业\exe
目录 0 2012-10-29 18:00 进程管理大作业\src
目录 0 2012-10-29 18:00 进程管理大作业
----------- --------- ---------- ----- ----
328512 28
............此处省略1个文件信息
- 上一篇:基于51单片机的LED灯控制Proteus仿真
- 下一篇:实时游戏的网络协议设计
相关资源
- SVR算法程序可运行
- 计算机图形学 边填充算法实现代码
- 福建师范大学历年算法考卷
- 栈的实现及应用,六种基本算法
- Bresenham算法绘制线段并利用“橡皮筋
- 介绍几种压缩算法及《笨笨数据压缩
- 改进的BP神经网络算法
- A星算法_原理讲解_例子
- 云模型的相关算法cloud
- 旋转矩阵求欧拉角的简单算法
- 栅栏填充算法源码(VC)
- RSA算法源码
- 关联分析Apriori算法实现
- [免费]relax算法成像
- 操作系统 LRU算法 实验报告 及 程序代
- 分治法快速排序算法QuickSort C
- 现代谱估计算法 music ESPRIT 谐波分解
- MUSIC算法c 实现
- 007出纳管理系统 v7[1].5.94 算法注册机
- 克鲁斯卡尔算法C和C 实现代码
- capon波束形成算法-VC实现
- QGA 量子遗传算法
- 利用OpenGL写毛笔字算法
- 带头结点的单链表的c算法实现
- 自适应隐写算法wow
- 协同过滤算法源码
- RSA AES DES ECC加密算法源码
- 密码学课程设计:DES加密解密算法的
- 北航人工智能原理课大作业源代码,
- A*算法的2D演示(带源码)
评论
共有 条评论