Skip to content

운영체제 ‐ CPU 스케줄링

dnwls16071 edited this page Mar 10, 2025 · 1 revision

📚 CPU 스케줄링⭐

  • 운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것

📚 프로세스 우선순위

  • 입출력 작업이 많은 프로세스 우선순위는 CPU 작업이 많은 프로세스 우선순위보다 높다.
  • 선점형 스케줄링
    • 현재 CPU를 사용 중인 프로세스로부터 CPU 자원을 빼앗아 다른 프로세스에 할당
    • 어느 한 프로세스의 자원 독점을 막고 프로세스들에게 골고루 자원을 분배할 수 있다.
    • 골고루 자원을 분배할 수 있다는 점에서 미루어 보았을 때 문맥 교환 과정이 빈번하게 일어나 오버헤드가 발생할 수 있다.
  • 비선점형 스케줄링
    • 현재 CPU를 사용 중인 프로세스 작업이 끝날 때까지 프로세스 기다리기

📚 FCFS 스케줄링

  • 준비 큐에 삽입된 순서대로 처리하는 비선점 스케줄링
  • 먼저 CPU를 요청한 프로세스부터 CPU 할당
  • 프로세스들이 기다리는 시간이 매우 길어질 수 있다는 부작용

📚 SJF 스케줄링

  • CPU 사용이 긴 프로세스는 나중에 실행하고, CPU 사용이 짧은 프로세스 먼저 실행
  • CPU 사용 시간이 짧은 프로세스가 중간에 추가되면 CPU 사용 시간이 긴 프로세스의 실행이 점점 미뤄져 기아 현상이 발생할 위험이 높다.

📚 RR 스케줄링

  • FCFS + Time Slice
  • Time Slice : 각 프로세스가 CPU를 사용할 수 있는 정해진 시간
  • 정해진 타임 슬라이스만큼의 시간 동안 돌아가며 CPU를 이용하는 선점형 스케줄링

📚 SRT 스케줄링

  • 작업 시간이 짧은 프로세스부터 우선적으로 처리하는 스케줄링 알고리즘
  • 정해진 시간만큼 CPU를 사용하되, 다음으로 CPU를 사용할 프로세스로는 남은 작업 시간이 가장 적은 프로세스 선택

📚 우선순위 스케줄링

문제 : 기아(starvation) 현상

  • 우선순위가 높은 프로세스만 주구장창 실행되면서 우선순위가 낮은 프로세스가 CPU를 할당받지 못하는 문제

해결 : 에이징(aging) 기법

  • 오랫동안 방치된 프로세스 우선순위를 점차 높이는 방식
  • 대기 중인 프로세스 우선순위를 점차 증가시키는 방법

📚 다단계 큐 스케줄링

스크린샷 2025-03-10 오후 12 37 49
  • 우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식
  • 우선순위가 가장 높은 큐에 있는 프로세스를 먼저 처리
  • 우선순위가 가장 높은 큐가 비어있으면 그 다음 우선순위 큐에 있는 프로세스를 처리

Spring Batch

✏️스프링 배치에 대해서 정리한 내용입니다.

Spring & Spring Boot

✏️스프링과 스프링 부트에 대해 정리한 내용입니다.

Java

✏️자바에 대해서 정리한 내용입니다.

JPA(Java Persistence API)

✏️JPA에 대해 정리한 내용입니다.

QueryDsl

✏️QueryDsl에 대해 정리한 내용입니다.

HTTP(Hypertext Transfer Protocol)

✏️HTTP에 대해 정리한 내용입니다.

Docker

✏️Docker에 대해 정리한 내용입니다.

Kubernetes

✏️Kubernetes에 대해 정리한 내용입니다.

CI/CD(Continuous Integration/Continuous Deploy)

✏️Github Actions에 대한 개념을 공부하는데 좋았던 리포지토리입니다.

Redis

✏️Redis에 대해 학습한 내용과 프로젝트에서 Redis를 활용한 내용을 정리합니다.

MySQL

✏️MySQL에 대해 학습한 내용과 프로젝트에서 MySQL을 활용한 내용을 정리합니다.

Clean Code & Test

✏️[인프런 워밍업 스터디 3기] 클린 코드와 테스트에 대해 학습한 내용과 프로젝트에서 테스트 코드를 도입한 내용을 정리합니다.

Nginx

✏️Nginx에 대해 학습한 내용과 프로젝트에서 적용한 부분에 대해 정리한 내용입니다.

RabbitMQ

✏️RabbitMQ 공식문서와 서적, 강의 등으로 개인적으로 학습한 내용과 프로젝트에서 적용한 부분에 대해 정리한 내용입니다.

Algorithm

✏️신입/경력 이직시 필요한 코딩 테스트 시험을 준비합니다.

CS

✏️기술면접 CS 지식 기록

Clone this wiki locally