프로세스 스케줄링 알고리즘
- 운영체제에서 여러 프로세스가 CPU를 공유할 때, 어떤 프로세스가 CPU를 사용할지를 결정하는 방식
- 시스템의 성능, 응답 시간, 사용자 경험 등에 직접적인 영향을 미치는 중요한 부분
- 다양한 스케줄링 알고리즘이 개발되어왔으며, 각각의 알고리즘은 특정한 상황에 적합한 장단점을 가진다.
1. FCFS (First-Come, First-Served)
- 가장 간단한 스케줄링 알고리즘
- 프로세스가 도착한 순서대로 CPU를 할당한다.
- ex. 프로세스 A가 먼저 도착하면 CPU를 할당하고, 그 후에 도착한 프로세스 B는 A가 CPU를 반납한 후에 CPU를 할당받습니다.
- 장점은 구현이 간단하고 공정한 스케줄링을 제공한다는 것
- 평균 대기 시간이 길어질 수 있으며, 작업의 길이에 따라 기아 현상이 발생할 수 있다.
def fcfs(processes):
current_time = 0
for process in processes:
print(f"Process {process} is executing at time {current_time}")
current_time += process['burst_time']
2. SJF (Shortest Job First)
- 실행 시간이 가장 짧은 프로세스에게 CPU를 할당하는 알고리즘
- 모든 프로세스의 실행 시간을 미리 알아야 하며, 도착한 프로세스 중 실행 시간이 가장 짧은 프로세스를 먼저 실행한다.
- 장점은 평균 대기 시간을 최소화할 수 있다는 것
- 단기 작업에 대해 우수한 성능을 보인다.
- 실행 시간을 미리 알 수 없는 경우 사용할 수 없으며, 실행 시간이 긴 프로세스가 기아 상태에 빠질 수 있다.
def sjf(processes):
processes.sort(key=lambda x: x['burst_time'])
current_time = 0
for process in processes:
print(f"Process {process} is executing at time {current_time}")
current_time += process['burst_time']
3. Round Robin
- 시간 할당량(time quantum)을 정하여 각 프로세스에게 동일한 시간을 할당하고, 할당된 시간이 지나면 다음 프로세스에게 CPU를 넘기는 방식
- 모든 프로세스에게 동등한 기회를 부여하며, 응답 시간을 보장한다.
- 프로세스가 끝나지 않아도 주기적으로 CPU를 바꿀 수 있어 진행 중인 작업에 우선권을 주는 FCFS의 단점을 보완한다.
- 시간 할당량을 어떻게 설정할 것인지에 따라 성능이 달라지며, 작업의 길이가 다를 경우 평균 대기 시간이 길어질 수 있다.
def round_robin(processes, quantum):
current_time = 0
while processes:
for process in processes:
if process['burst_time'] <= quantum:
print(f"Process {process} is executing at time {current_time}")
current_time += process['burst_time']
processes.remove(process)
else:
print(f"Process {process} is executing at time {current_time}")
current_time += quantum
process['burst_time'] -= quantum
4. Priority Scheduling
- 각 프로세스에게 우선순위를 부여하고, 우선순위가 높은 프로세스에게 CPU를 할당하는 알고리즘
- 높은 우선순위를 가진 프로세스가 항상 CPU를 할당받으므로, 긴급한 작업이나 중요한 작업에 대한 응답 시간을 보장한다.
- 우선순위가 낮은 프로세스가 기아 상태에 빠질 수 있으며, 우선순위가 변경되거나 부정확하게 설정될 경우 부정확한 결과를 초래할 수 있다.
def priority_scheduling(processes):
processes.sort(key=lambda x: x['priority'])
current_time = 0
for process in processes:
print(f"Process {process} is executing at time {current_time}")
current_time += process['burst_time']
이러한 프로세스 스케줄링 알고리즘들은 시스템의 요구 사항과 특성에 따라 선택되어야 한다.
따라서 각 알고리즘의 장단점을 고려하여 최적의 스케줄링 방식을 결정해야 한다!
'CS' 카테고리의 다른 글
소켓(Socket) 통신 (0) | 2024.05.16 |
---|---|
UI/UX 용어 (0) | 2024.05.09 |
TCP vs. UDP (0) | 2024.04.23 |
데이터 웨어하우스 (0) | 2024.04.19 |
웹 표준과 웹 호환 (0) | 2024.04.17 |
프로세스 스케줄링 알고리즘
- 운영체제에서 여러 프로세스가 CPU를 공유할 때, 어떤 프로세스가 CPU를 사용할지를 결정하는 방식
- 시스템의 성능, 응답 시간, 사용자 경험 등에 직접적인 영향을 미치는 중요한 부분
- 다양한 스케줄링 알고리즘이 개발되어왔으며, 각각의 알고리즘은 특정한 상황에 적합한 장단점을 가진다.
1. FCFS (First-Come, First-Served)
- 가장 간단한 스케줄링 알고리즘
- 프로세스가 도착한 순서대로 CPU를 할당한다.
- ex. 프로세스 A가 먼저 도착하면 CPU를 할당하고, 그 후에 도착한 프로세스 B는 A가 CPU를 반납한 후에 CPU를 할당받습니다.
- 장점은 구현이 간단하고 공정한 스케줄링을 제공한다는 것
- 평균 대기 시간이 길어질 수 있으며, 작업의 길이에 따라 기아 현상이 발생할 수 있다.
def fcfs(processes):
current_time = 0
for process in processes:
print(f"Process {process} is executing at time {current_time}")
current_time += process['burst_time']
2. SJF (Shortest Job First)
- 실행 시간이 가장 짧은 프로세스에게 CPU를 할당하는 알고리즘
- 모든 프로세스의 실행 시간을 미리 알아야 하며, 도착한 프로세스 중 실행 시간이 가장 짧은 프로세스를 먼저 실행한다.
- 장점은 평균 대기 시간을 최소화할 수 있다는 것
- 단기 작업에 대해 우수한 성능을 보인다.
- 실행 시간을 미리 알 수 없는 경우 사용할 수 없으며, 실행 시간이 긴 프로세스가 기아 상태에 빠질 수 있다.
def sjf(processes):
processes.sort(key=lambda x: x['burst_time'])
current_time = 0
for process in processes:
print(f"Process {process} is executing at time {current_time}")
current_time += process['burst_time']
3. Round Robin
- 시간 할당량(time quantum)을 정하여 각 프로세스에게 동일한 시간을 할당하고, 할당된 시간이 지나면 다음 프로세스에게 CPU를 넘기는 방식
- 모든 프로세스에게 동등한 기회를 부여하며, 응답 시간을 보장한다.
- 프로세스가 끝나지 않아도 주기적으로 CPU를 바꿀 수 있어 진행 중인 작업에 우선권을 주는 FCFS의 단점을 보완한다.
- 시간 할당량을 어떻게 설정할 것인지에 따라 성능이 달라지며, 작업의 길이가 다를 경우 평균 대기 시간이 길어질 수 있다.
def round_robin(processes, quantum):
current_time = 0
while processes:
for process in processes:
if process['burst_time'] <= quantum:
print(f"Process {process} is executing at time {current_time}")
current_time += process['burst_time']
processes.remove(process)
else:
print(f"Process {process} is executing at time {current_time}")
current_time += quantum
process['burst_time'] -= quantum
4. Priority Scheduling
- 각 프로세스에게 우선순위를 부여하고, 우선순위가 높은 프로세스에게 CPU를 할당하는 알고리즘
- 높은 우선순위를 가진 프로세스가 항상 CPU를 할당받으므로, 긴급한 작업이나 중요한 작업에 대한 응답 시간을 보장한다.
- 우선순위가 낮은 프로세스가 기아 상태에 빠질 수 있으며, 우선순위가 변경되거나 부정확하게 설정될 경우 부정확한 결과를 초래할 수 있다.
def priority_scheduling(processes):
processes.sort(key=lambda x: x['priority'])
current_time = 0
for process in processes:
print(f"Process {process} is executing at time {current_time}")
current_time += process['burst_time']
이러한 프로세스 스케줄링 알고리즘들은 시스템의 요구 사항과 특성에 따라 선택되어야 한다.
따라서 각 알고리즘의 장단점을 고려하여 최적의 스케줄링 방식을 결정해야 한다!
'CS' 카테고리의 다른 글
소켓(Socket) 통신 (0) | 2024.05.16 |
---|---|
UI/UX 용어 (0) | 2024.05.09 |
TCP vs. UDP (0) | 2024.04.23 |
데이터 웨어하우스 (0) | 2024.04.19 |
웹 표준과 웹 호환 (0) | 2024.04.17 |