# of Processes : 3
Arrival time : 2 5 10
Burst time : 2 2 2
time : 0
responseRatio[스왑 전] :
queue[스왑 전] :
responseRatio[스왑 후] :
queue[스왑 후] :
runProcess[실행 도중] : -1
runProcess : -1
exitProcessCnt : 0
runProcessCuurentBurstTime : 2 2 2
queue :
isInQueue : 0 0 0
---------------------
time : 1
responseRatio[스왑 전] :
queue[스왑 전] :
responseRatio[스왑 후] :
queue[스왑 후] :
runProcess[실행 도중] : -1
runProcess : -1
exitProcessCnt : 0
runProcessCuurentBurstTime : 2 2 2
queue :
isInQueue : 0 0 0
---------------------
time : 2
responseRatio[스왑 전] : 1
queue[스왑 전] : 0
responseRatio[스왑 후] : 1
queue[스왑 후] : 0
runProcess[실행 도중] : 0
runProcess : 0
exitProcessCnt : 0
runProcessCuurentBurstTime : 1 2 2
queue :
isInQueue : 1 0 0
---------------------
time : 3
responseRatio[스왑 전] :
queue[스왑 전] :
responseRatio[스왑 후] :
queue[스왑 후] :
runProcess[실행 도중] : 0
runProcess : -1
exitProcessCnt : 1
runProcessCuurentBurstTime : 0 2 2
queue :
isInQueue : 1 0 0
---------------------
time : 4
responseRatio[스왑 전] :
queue[스왑 전] :
responseRatio[스왑 후] :
queue[스왑 후] :
runProcess[실행 도중] : -1
runProcess : -1
exitProcessCnt : 1
runProcessCuurentBurstTime : 0 2 2
queue :
isInQueue : 1 0 0
---------------------
time : 5
responseRatio[스왑 전] : 1
queue[스왑 전] : 1
responseRatio[스왑 후] : 1
queue[스왑 후] : 1
runProcess[실행 도중] : 1
runProcess : 1
exitProcessCnt : 1
runProcessCuurentBurstTime : 0 1 2
queue :
isInQueue : 1 1 0
---------------------
time : 6
responseRatio[스왑 전] :
queue[스왑 전] :
responseRatio[스왑 후] :
queue[스왑 후] :
runProcess[실행 도중] : 1
runProcess : -1
exitProcessCnt : 2
runProcessCuurentBurstTime : 0 0 2
queue :
isInQueue : 1 1 0
---------------------
time : 7
responseRatio[스왑 전] :
queue[스왑 전] :
responseRatio[스왑 후] :
queue[스왑 후] :
runProcess[실행 도중] : -1
runProcess : -1
exitProcessCnt : 2
runProcessCuurentBurstTime : 0 0 2
queue :
isInQueue : 1 1 0
---------------------
time : 8
responseRatio[스왑 전] :
queue[스왑 전] :
responseRatio[스왑 후] :
queue[스왑 후] :
runProcess[실행 도중] : -1
runProcess : -1
exitProcessCnt : 2
runProcessCuurentBurstTime : 0 0 2
queue :
isInQueue : 1 1 0
---------------------
time : 9
responseRatio[스왑 전] :
queue[스왑 전] :
responseRatio[스왑 후] :
queue[스왑 후] :
runProcess[실행 도중] : -1
runProcess : -1
exitProcessCnt : 2
runProcessCuurentBurstTime : 0 0 2
queue :
isInQueue : 1 1 0
---------------------
time : 10
responseRatio[스왑 전] : 1
queue[스왑 전] : 2
responseRatio[스왑 후] : 1
queue[스왑 후] : 2
runProcess[실행 도중] : 2
runProcess : 2
exitProcessCnt : 2
runProcessCuurentBurstTime : 0 0 1
queue :
isInQueue : 1 1 1
---------------------
time : 11
responseRatio[스왑 전] :
queue[스왑 전] :
responseRatio[스왑 후] :
queue[스왑 후] :
runProcess[실행 도중] : 2
runProcess : -1
exitProcessCnt : 3
runProcessCuurentBurstTime : 0 0 0
queue :
isInQueue : 1 1 1
---------------------
---processState---
0 time has waitingRow :
1 time has waitingRow :
2 time has waitingRow :
3 time has waitingRow :
4 time has waitingRow :
5 time has waitingRow :
6 time has waitingRow :
7 time has waitingRow :
8 time has waitingRow :
9 time has waitingRow :
10 time has waitingRow :
11 time has waitingRow :
waitingTime : 0 0 0
turnaroundTime : 2 2 2
nomarlizeTurnaroundTime : 1 1 1
TUI : -1 -1 0 0 -1 1 1 -1 -1 -1 2 2
intervalRunTime[0] : 2 intervalRunTime[1] : 2 intervalRunTime[2] : 1 intervalRunTime[3] : 2 intervalRunTime[4] : 3
intervalRunTime[5] : 2
runSequence[0] : -1 runSequence[1] : 0 runSequence[2] : -1 runSequence[3] : 1 runSequence[4] : -1
runSequence[5] : 2
끝
위는 실행 화면입니다.
3개의 프로세스를 2 5 10의 Init Time을 갖고, 2 2 2의 Burst Time을 가졌을 때 TUI로 나타낸 것입니다 !
아래는 이 중 하나인 HRRN 코드입니다.
int currentTime = 0;
int exitProcessCnt = 0;
int runProcess = -1;
bool *isInQueue = new bool[processes];
bool isEmptyTime = false;
int runTimeSelecter = -1;
vector<int> queue;
int *cloneBurstTime = new int[processes];
//@수정함
vector<double> responseRatio;
for (int i = 0; i < processes; i++) {
//대기시간 초기화
waitingTime[i] = 0;
//BusrtTime 클론 생성.
cloneBurstTime[i] = burstTime[i];
isInQueue[i] = false;
}
while (exitProcessCnt < processes) {
cout << "time : " << currentTime << endl;;
//지금 시간대에 누군가 왔을 경우 Q 처리.
for (int optionProcess = 0; optionProcess < processes; optionProcess++) {
//해당 프로세스 도착시간이 지났으며, 프로세스 실행 시간이 남아있고, Q안에 존재하지 않을 경우.
if (_arrivalTime[optionProcess] == currentTime && cloneBurstTime[optionProcess] > 0 && !isInQueue[optionProcess]) {
isInQueue[optionProcess] = true;
queue.push_back(optionProcess);
}
}
//Queue의 대기열 상태를 바꿈 ->(WT + BT) / BT 기준.
//@수정함.
//생성
responseRatio.clear();
for (int queueSwaper = 0; queueSwaper < queue.size(); queueSwaper++) responseRatio.push_back(0);
//대입
for (int queueSwaper = 0; queueSwaper < queue.size(); queueSwaper++) {
responseRatio[queueSwaper] = double(burstTime[queue[queueSwaper]] + waitingTime[queue[queueSwaper]]) / double(burstTime[queue[queueSwaper]]);
}
cout << "responseRatio[스왑 전] : ";
for (int i = 0; i < responseRatio.size(); i++) cout << responseRatio[i] << " ";
cout << endl;
cout << "queue[스왑 전] : ";
for (int i = 0; i < queue.size(); i++) cout << queue[i] << " ";
cout << endl;
//스왑
for (int queueSwaper = 0; queueSwaper < queue.size(); queueSwaper++) {
for (int queueInSwaper = queueSwaper + 1; queueInSwaper < queue.size(); queueInSwaper++) {
if (responseRatio[queueSwaper] < responseRatio[queueInSwaper]) {
double dtemp;
int itemp;
dtemp = responseRatio[queueSwaper];
responseRatio[queueSwaper] = responseRatio[queueInSwaper];
responseRatio[queueInSwaper] = dtemp;
itemp = queue[queueSwaper];
queue[queueSwaper] = queue[queueInSwaper];
queue[queueInSwaper] = itemp;
}
}
}
//@여기까지
cout << "responseRatio[스왑 후] : ";
for (int i = 0; i < responseRatio.size(); i++) cout << responseRatio[i] << " ";
cout << endl;
cout << "queue[스왑 후] : ";
for (int i = 0; i < queue.size(); i++) cout << queue[i] << " ";
cout << endl;
//프로세서 할당
//대기열에 누군가 있냐 ? 그리고 실행중인 프로세스가 없냐 ?
if (queue.size() > 0 && runProcess == -1) {
runProcess = queue[0];
queue.erase(queue.begin());
runTimeSelecter++;
intervalRunTime.push_back(0);
runSequence.push_back(runProcess);
isEmptyTime = false;
}
//대기열에도 없으면서 실행중이지도 않냐? ==> 공백시간이냐 ?
else if (queue.size() <= 0 && runProcess == -1 && isEmptyTime == false) {
runTimeSelecter++;
intervalRunTime.push_back(0);
runSequence.push_back(-1);
isEmptyTime = true;
}
cout << "runProcess[실행 도중] : " << runProcess << endl;
//실행 처리
//누군가 실행중이냐?
if (runProcess != -1) {
//burstTime이 아직 남았냐?
if (cloneBurstTime[runProcess] > 0) {
intervalRunTime[runTimeSelecter]++;
cloneBurstTime[runProcess] --;
//burstTime이 더 이상 없냐?
if (cloneBurstTime[runProcess] <= 0) {
exitProcessCnt++;
runProcess = -1;
}
}
}
//공백시간이냐?
else if (runProcess == -1 && isEmptyTime == true) {
intervalRunTime[runTimeSelecter]++;
}
//대기열에 남은 프로세스가 존재 하냐?(대기시간)
for (int waitProcess = 0; waitProcess < queue.size(); waitProcess++) {
waitingTime[queue[waitProcess]] ++;
}
//Queue저장.
queueLine.push_back(queue);
currentTime++;
//----------------------------------------출력 부분----------------------------------------------
cout << "runProcess : " << runProcess << endl;
cout << "exitProcessCnt : " << exitProcessCnt << endl;
cout << "runProcessCuurentBurstTime : ";
for (int i = 0; i < processes; i++) cout << cloneBurstTime[i] << " ";
cout << endl;
cout << "queue : ";
for (int i = 0; i < queue.size(); i++) cout << queue[i] << " ";
cout << endl;
cout << "isInQueue : ";
for (int i = 0; i < processes; i++) cout << isInQueue[i] << " ";
cout << endl;
cout << "---------------------" << endl;
}
for (int i = 0; i < processes; i++) {
turnAroundTime[i] = waitingTime[i] + burstTime[i];
normalizedTurnAroundTime[i] = (double)turnAroundTime[i] / (double)burstTime[i];
}
cout << "---processState---" << endl;
for (int i = 0; i < queueLine.size(); i++) {
cout << i << " time has waitingRow : ";
for (int j = 0; j < queueLine[i].size(); j++)
cout << queueLine[i][j] << " ";
cout << endl;
}
cout << "waitingTime : ";
for (int i = 0; i < processes; i++) cout << waitingTime[i] << " ";
cout << endl;
cout << "turnaroundTime : ";
for (int i = 0; i < processes; i++) cout << turnAroundTime[i] << " ";
cout << endl;
cout << "nomarlizeTurnaroundTime : ";
for (int i = 0; i < processes; i++) cout << normalizedTurnAroundTime[i] << " ";
cout << endl;
cout << "\t" << endl;
delete[] cloneBurstTime;
코드 : https://github.com/kiJu2/Schduling-Simulator-consoleVer
kiJu2/Schduling-Simulator-consoleVer
This is Scheduling-Simulator C++ ver. Contribute to kiJu2/Schduling-Simulator-consoleVer development by creating an account on GitHub.
github.com
'프로젝트 > 개인 프로젝트' 카테고리의 다른 글
[Aduino Mega] 시각 장애인을 위한 거리 탐지기 웨어러블 (0) | 2019.10.12 |
---|---|
3D 도면 쇼핑몰 제작 (0) | 2019.06.27 |
[HTML/CSS/JS(jQuery)] 스크롤 슬라이드 페이지 만들기 ! (0) | 2019.06.27 |
운영체제 스케줄링 시뮬레이터 (0) | 2019.06.23 |
[C++]PC방 Simulator TUI (0) | 2019.06.23 |