ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1074)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (183)
      • Unreal (69)
      • Unity (103)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (349)
      • C++ (168)
      • C# (90)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (10)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 오블완
  • 포인터
  • 유니티
  • 언리얼
  • string
  • 클래스
  • 문자열
  • C
  • 그래픽스
  • 알고리즘
  • 티스토리챌린지
  • c#
  • 함수
  • C++
  • 파이썬
  • 백준
  • 프로그래머스
  • SQL
  • 배열
  • Unity

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

CS/자료구조 & 알고리즘

[C++] 라운드 로빈 스케줄링 구현 (우선순위 큐 이용)

2024. 3. 6. 15:32

EHProcess.h

#pragma once

#include <iostream>
#include <string>

using namespace std;

class EHProcess
{
	string pname; //프로그램 이름    
	const int tjob; //전체 작업량    
	const int cjob; //cpu 점유 시 수행가능 최대 작업량    
	int ntjob = 0; //현재 남은 작업량    
	int ncjob = 0; //현재 cpu 점유 시 수행가능 최대 작업량

public:
	EHProcess(string pname, int tjob, int cjob);

	//Idle 상태에서 Ready 상태로 전이  
	void IdleToReady(); 

	//CPU를 점유하여 실행, 남은 작업량 반환
	int Running();

	//프로세스 종료
	void EndProgram(); 
};

 

EHProces.cpp

#include "EHProcess.h"

EHProcess::EHProcess(string pname, int tjob, int cjob) : pname(pname), tjob(tjob), cjob(cjob)
{

}

void EHProcess::IdleToReady()
{
	cout << pname << " 시작" << endl;
	ntjob = tjob; //프로그램 이미지 메모리에 로딩을 표현
}

int EHProcess::Running()
{
	ncjob = cjob; //ncjob에 CPU 사용할 수 있는 시간 대입
	
	//남은 작업량(ntjob)과 CPU 사용할 수 있는 시간(ncjob)이 있다면    
	for(; ntjob && ncjob ; ntjob--, ncjob--)
		cout<<pname<<" "; //단위 시간 작업 수행을 표현

	cout << endl;
	return ntjob;
}

void EHProcess::EndProgram()
{
	cout << pname << "종료" << endl;
}

 

Scheduler.h

#pragma once

#include <vector>
#include <queue>

using namespace std;
class EHProcess;

typedef vector<EHProcess*> Memory;

typedef queue<EHProcess*> ReadyQueue;

typedef Memory::iterator miter;

class Scheduler
{
	Memory hardDisk; // 하드디스크
	ReadyQueue rq; //대기 큐

public:

	Scheduler();

	virtual	~Scheduler();

private:

	// 시뮬레이션 초기화- 프로그램 설치 및 실행 명령
	void Init();

	// 시뮬레이션 시작
	void Simulation();

	//시뮬레이션 종료
	void Ending();
};

 

Scheduler.cpp

#include "Scheduler.h"
#include "EHProcess.h"

Scheduler::Scheduler()
{
	Init();
	Simulation();
}

void Scheduler::Init()
{
	//하드디스크에 프로그램 설치를 표현
	hardDisk.push_back(new EHProcess("A", 30, 5));
	hardDisk.push_back(new EHProcess("B", 24, 6));
	hardDisk.push_back(new EHProcess("C", 25, 4));

	miter seek = hardDisk.begin();
	miter end = hardDisk.end();
	EHProcess* pro = 0;

	//하드디스크에 설치한 프로그램을 실행 명령을 표현
	for (; seek	!= end; ++seek)
	{
		pro = *seek;
		rq.push(pro); //대기 큐에서 기다림
		pro->IdleToReady();//Idle 상태에서 Ready상태로 전이
	}
}

Scheduler::~Scheduler()
{
	Ending();
}

void Scheduler::Ending()
{
	miter seek = hardDisk.begin();

	for (; seek != hardDisk.end(); ++seek)
		delete (*seek);
}

void Scheduler::Simulation()
{
	EHProcess* process = 0;
	int job = 0;

	while (!rq.empty())
	{
		process = rq.front();//가장 먼저 대기한 프로세스를 꺼냄
		rq.pop();
		job = process->Running();//꺼낸 프로세스를 실행

		//남은 작업이 있다면
		if (job)
			rq.push(process); //대기큐에서 기다림

		else
			process->EndProgram();//프로세스 종료
	}
}

 

main.cpp

#include "Scheduler.h"

int main()
{
	Scheduler* pro = new Scheduler;

	delete pro;
}

 

 

https://ehclub.net/300

저작자표시 (새창열림)

'CS > 자료구조 & 알고리즘' 카테고리의 다른 글

스택 포인터와 프레임 포인터  (0) 2024.04.16
에이전트의 정의  (0) 2024.04.08
[C++] lower bound, upper bound  (0) 2023.12.19
[C++] 계단 오르기 알고리즘  (0) 2023.12.18
sort() 함수에서 쓰여지는 정렬 알고리즘 (Intro 인트로, Tim 팀)  (0) 2023.12.11
    'CS/자료구조 & 알고리즘' 카테고리의 다른 글
    • 스택 포인터와 프레임 포인터
    • 에이전트의 정의
    • [C++] lower bound, upper bound
    • [C++] 계단 오르기 알고리즘
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바