资源简介
假定系统有五个进程,每一个进程用一个进程控制块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仿真
- 下一篇:实时游戏的网络协议设计
相关资源
- 数值最优化算法与理论第二版(李董
- 基于图像识别的循迹车路径识别算法
- 基于Mean Shift的序列图像手势跟踪算法
- labview实现CRC算法
- PSOT粒子群算法工具箱
- 24点游戏的算法及实现
- Yen算法求前K短路
- 数据结构与算法考试复习试题和答案
- kuangbin的经典ACM算法模板几乎涵盖所有
- 旋转不变算法ESPRIT
- 多重信号分类MUSIC 算法
- wellner二值化算法
- 基于加汉宁窗的FFT高精度谐波检测改
- NSGA-II非支配排序算法
- 粒子群优化算法应用--函数最值问题求
- 复合形算法及流程图,很好的资料
- 自己写的运动目标检测算法汇总
- OpenCV基于分水岭图像分割算法
- 节拍探测算法
- 13种pso粒子群优化算法代码合集
- 各自块匹配算法的matalb代码附参考文
- Relief算法程序
- 基于L_系统的三维分形植物的算法及实
- LMS最小均方误差算法
- 基于广义互相关时延估计算法声源定
- K均值算法流程图
- 一种简单有效的手写体数字特征提取
- 小波加密算法
- 基于Fourier神经网络的图像复原算法
- CRC32校验码算法
评论
共有 条评论