-
大小: 166KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-07
- 語言: 其他
- 標(biāo)簽: 進程調(diào)度??電梯調(diào)度??算法??C++??操作系統(tǒng)??
資源簡介
假定系統(tǒng)有五個進程,每一個進程用一個進程控制塊PCB來代表;進程控制塊如包含:進程名、指針、要求運行時間、優(yōu)先數(shù)、狀態(tài)等。
在每次運行所設(shè)計的處理器調(diào)度程序之前,為每個進程任意確定它的“優(yōu)先數(shù)”和“要求運行時間”
在所設(shè)計的程序中應(yīng)有顯示或打印語句,能顯示或打印每次被選中進程的進程名以及運行一次后進程隊列的變化。
為五個進程任意確定一組“優(yōu)先數(shù)”和“要求運行時間”,啟動所設(shè)計的處理器調(diào)度程序,顯示或打印逐次被選中進程的進程名以及進程控制塊的動態(tài)變化過程

代碼片段和文件信息
#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??進程管理大作業(yè)\doc\設(shè)計方案報告.doc
?????文件??????48128??2010-04-20?23:35??進程管理大作業(yè)\exe\ProcessScheduleSimulator.exe
?????文件???????4531??2010-04-20?23:26??進程管理大作業(yè)\src\ProcessScheduleSimulator\MyProcess.cpp
?????文件???????1846??2010-04-20?23:07??進程管理大作業(yè)\src\ProcessScheduleSimulator\MyProcess.h
?????文件???????6516??2010-04-20?23:07??進程管理大作業(yè)\src\ProcessScheduleSimulator\ProcessDlg.cpp
?????文件???????1149??2010-04-20?22:34??進程管理大作業(yè)\src\ProcessScheduleSimulator\ProcessDlg.h
?????文件??????59800??2010-04-20?22:26??進程管理大作業(yè)\src\ProcessScheduleSimulator\ProcessScheduleSimulator.aps
?????文件???????1694??2010-04-19?01:13??進程管理大作業(yè)\src\ProcessScheduleSimulator\ProcessScheduleSimulator.cpp
?????文件????????481??2010-04-19?01:13??進程管理大作業(yè)\src\ProcessScheduleSimulator\ProcessScheduleSimulator.h
?????文件???????6056??2010-04-20?22:26??進程管理大作業(yè)\src\ProcessScheduleSimulator\ProcessScheduleSimulator.rc
?????文件???????5746??2010-04-20?22:51??進程管理大作業(yè)\src\ProcessScheduleSimulator\ProcessScheduleSimulator.vcproj
?????文件???????1413??2010-04-20?16:06??進程管理大作業(yè)\src\ProcessScheduleSimulator\ProcessScheduleSimulator.vcproj.416-0040.user.user
?????文件???????1427??2010-04-20?23:36??進程管理大作業(yè)\src\ProcessScheduleSimulator\ProcessScheduleSimulator.vcproj.ZSP-64042843A6F.zsp.user
?????文件???????2984??2010-04-19?01:13??進程管理大作業(yè)\src\ProcessScheduleSimulator\ReadMe.txt
?????文件??????21630??2003-07-24?09:52??進程管理大作業(yè)\src\ProcessScheduleSimulator\res\ProcessScheduleSimulator.ico
?????文件????????380??2010-04-19?01:13??進程管理大作業(yè)\src\ProcessScheduleSimulator\res\ProcessScheduleSimulator.rc2
?????文件???????1068??2010-04-20?22:26??進程管理大作業(yè)\src\ProcessScheduleSimulator\resource.h
?????文件????????155??2010-04-19?01:13??進程管理大作業(yè)\src\ProcessScheduleSimulator\stdafx.cpp
?????文件???????1796??2010-04-19?01:13??進程管理大作業(yè)\src\ProcessScheduleSimulator\stdafx.h
?????文件???????1030??2010-04-19?01:13??進程管理大作業(yè)\src\ProcessScheduleSimulator\targetver.h
?????文件????????938??2010-04-19?01:13??進程管理大作業(yè)\src\ProcessScheduleSimulator.sln
?????文件??????23552??2010-04-20?23:36??進程管理大作業(yè)\src\ProcessScheduleSimulator.suo
?????目錄??????????0??2012-10-29?18:00??進程管理大作業(yè)\src\ProcessScheduleSimulator\res
?????目錄??????????0??2012-10-29?18:00??進程管理大作業(yè)\src\ProcessScheduleSimulator
?????目錄??????????0??2013-03-24?21:26??進程管理大作業(yè)\doc
?????目錄??????????0??2012-10-29?18:00??進程管理大作業(yè)\exe
?????目錄??????????0??2012-10-29?18:00??進程管理大作業(yè)\src
?????目錄??????????0??2012-10-29?18:00??進程管理大作業(yè)
-----------?---------??----------?-----??----
???????????????328512????????????????????28
............此處省略1個文件信息
評論
共有 條評論