
인프런 워밍업 클럽 4기 CS 전공지식 2주차 미션
7일 전
컴퓨터 구조
1. 다음 파일의 모든 연결을 터널로 대체해보세요.
2. 8비트 32입력 MUX를 제작해보세요.
3. 10비트 입력 두 개(A, B)를 계산하는 ALU 만들어보세요.Misson_3 circ 링크
4. 32비트 RAM을 만들어보세요. 디코더와 MUX는 logisim 기본 내장된 걸 사용해도 좋습니다.
자료구조와 알고리즘
문제
여러분은 간단한 운영체제를 개발하고 있습니다. 운영체제의 CPU 스케줄링을 구현해야 하는 차례입니다. 여러 프로세스들이 골고루 실행되도록 하기 위해, 프로세스 실행 횟수(executionCount)가 작은 프로세스의 우선순위를 높게 설정하는 CPU 스케줄링 정책을 만들려고 합니다. 또한, 모든 프로세스가 비슷하게 실행될 때는 사용자의 반응성을 높이기 위해 I/O Bound 프로세스들의 처리를 우선적으로 하려고 합니다. I/O Bound 프로세스는 CPU를 사용하다가 자발적으로 CPU를 반납(cpuReturnCount)하는 것으로 판단할 수 있습니다. 따라서 다음 두 가지 조건으로 CPU 스케줄러를 구현해 보세요:
프로세스 실행 횟수가 가장 적은 프로세스가 우선순위가 높습니다.
실행 횟수가 같을 경우, I/O Bound 프로세스가 우선순위가 높습니다.
풀이
내가 커스텀해서 만든 PriorityQueue.h를 이용해서 풀어보았다
CpuScheduler.cpp
#include "PriorityQueue.h"
#include <string>
#include <iostream>
using namespace std;
struct Process
{
string name;
int cpuReturnCount; // CPU를 자발적으로 반납한 횟수
int executionCount; // 실행 횟수
Process(string n, int cpuReturn, int exec)
: name(n), cpuReturnCount(cpuReturn), executionCount(exec)
{}
bool operator<(const Process& other) const
{
if (executionCount != other.executionCount)
return executionCount > other.executionCount; // 실행횟수가 작을수록 우선
return cpuReturnCount < other.cpuReturnCount; // 같다면 cpu반납 많은 순
}
};
class CpuScheduler
{
public:
void enqueue(const Process& p) {
pq.push(p);
}
string dequeue() {
if (pq.empty()) return "(empty)";
string name = pq.top().name;
pq.pop();
return name;
}
private:
PriorityQueue<Process> pq;
};
출력 결과
댓글을 작성해보세요.