1. CPU 스케줄링의 기초

정의 및 중요성

  • 운영체제가 여러 프로세스에게 공정하고 합리적으로 CPU 자원을 배분하는 과정이다.
  • 스케줄링이 비효율적이면 자원 배분 불균형, 처리량 감소, 무질서 상태가 발생할 수 있다.

프로세스 우선순위

  • 프로세스는 성격에 따라 입출력 집중 프로세스(I/O bound)와 CPU 집중 프로세스(CPU bound)로 나뉜다.
  • 시스템 효율을 높이기 위해 입출력 장치와 CPU를 동시에 활용할 수 있도록 입출력 집중 프로세스에 더 높은 우선순위를 부여한다.
  • 운영체제는 프로세스의 PCB(Process Control Block)에 기록된 우선순위를 바탕으로 스케줄링을 진행한다.

스케줄링 큐

  • 준비 큐(Ready Queue)는 CPU를 할당받기 위해 대기하는 프로세스들이 모인 곳이다.
  • 대기 큐(Waiting Queue)는 입출력 작업 등이 끝나기를 기다리는 프로세스들이 모인 곳이다.

선점형과 비선점형 스케줄링

  • 선점형(Preemptive)은 프로세스가 CPU를 사용 중이더라도 운영체제가 강제로 빼앗을 수 있는 방식이며, 문맥 교환 오버헤드가 크지만 반응성이 좋다.
  • 비선점형(Non-preemptive)은 프로세스가 스스로 CPU를 반납할 때까지 기다리는 방식이며, 오버헤드가 적지만 긴 작업이 CPU를 독점하면 무한정 기다리는 비효율이 발생한다.

2. 스케줄링 알고리즘

FCFS (선입 선처리)

  • 준비 큐에 먼저 도착한 순서대로 처리하는 비선점형 스케줄링이다.
  • 실행 시간이 긴 프로세스가 먼저 도착하면 뒤의 짧은 프로세스들이 무작정 기다려야 하는 호위 효과(Convoy Effect)가 발생한다.

SJF (최단 작업 우선)

  • CPU 이용 시간이 가장 짧은 프로세스부터 먼저 실행하는 방식이다.
  • 평균 대기 시간을 최소화할 수 있으나 현실에서는 프로세스의 실행 시간을 정확히 예측하기 어렵다는 한계가 있다.

RR (라운드 로빈)

  • 선입 선처리 방식에 타임 슬라이스(Time Slice)라는 시간제한 개념을 더한 선점형 방식이다.
  • 정해진 시간이 지나면 CPU를 빼앗기고 큐의 맨 뒤로 이동하며, 타임 슬라이스의 크기에 따라 성능이 크게 좌우된다.

SRT (최소 잔여 시간 우선)

  • 최단 작업 우선(SJF)과 라운드 로빈(RR)의 장점을 결합한 선점형 스케줄링이다.
  • 정해진 시간만큼 CPU를 사용한 후, 남아있는 작업 시간이 가장 짧은 프로세스에게 CPU를 넘겨준다.

우선순위 스케줄링

  • 부여된 우선순위가 가장 높은 프로세스부터 순서대로 실행한다.
  • 우선순위가 낮은 프로세스는 영원히 실행되지 못하는 기아(Starvation) 현상이 발생할 수 있다.
  • 이를 방지하기 위해 대기 시간에 비례해 우선순위를 높여주는 에이징(Aging) 기법을 활용한다.

다단계 큐 (Multilevel Queue)

  • 우선순위별로 여러 개의 큐를 두어 관리하며, 각 큐마다 서로 다른 스케줄링 알고리즘을 적용할 수 있다.
  • 단, 프로세스가 한 번 특정 큐에 배정되면 다른 큐로 이동할 수 없다는 한계가 있다.

다단계 피드백 큐 (Multilevel Feedback Queue)

  • 다단계 큐의 한계를 극복하기 위해 프로세스들이 큐 사이를 자유롭게 이동할 수 있도록 만든 방식이다.
  • CPU를 오래 사용하는 프로세스는 우선순위가 낮은 큐로 강등되고, 대기 시간이 길어지면 에이징 기법으로 우선순위를 다시 높인다.
  • 현대 운영체제에서 가장 보편적으로 사용하는 스케줄링 알고리즘이다.

'CS' 카테고리의 다른 글

CPU의 구조 및 클럭, 코어  (0) 2026.02.06
[CS] 컴파일이란?  (0) 2026.01.27

CPU - 메모리에 저장된 명령어를 읽고(Fetch), 해석(Decode), 실행(Excute) 하는 장치

1. CPU의 핵심 3요소

산술논리연산장치 (ALU, Arithmetic Logic Unit)

  • CPU 내에서 값이 변하는 장소

제어장치 (CU, Control Unit)

  • 클럭(Clock), 명령어 해독기, 제어 버스로 이뤄져 있습니다.

레지스터

  • 멀리 있는 창고(RAM)까지 가지 않고, 당장 쓸 재료를 담아두는 가장 빠른 기억 장소.
    • PC ( Program Counter ) : 다음에 실행할 명령어 주소
    • IR ( Instruction Register ) : 현재 해석 중인 명령어

2. 시스템 버스 (The Road)

CPU(주방)와 메모리(창고) 사이를 연결하는 데이터의 이동 통로입니다.

  • 주소 버스 (Address Bus): 위치 지정, 단방향
  • 데이터 버스 (Data Bus): 실제 데이터나 명령어가 이동하는 도로 (양방향)
  • 제어 버스 (Control Bus): "읽어라/써라" 명령을 내리는 신호등

1. 클럭 (Clock): 요리사의 칼질 속도 

1초에 CPU가 작업을 몇 번 수행 수

  • 정의: CPU 명령어 사이클(인출-해독-실행)의 반복
  • 특징:
    • 한계: 속도가 너무 빠르면 발열이 발생하여 시스템이 멈출 수 있음.
  • 핵심: 클럭이 높으면 단일 작업의 처리 속도가 빨라짐.

2. 코어 (Core): 주방에 있는 요리사 수 

클럭이 속도면 코어는 작업자의 수

  • 멀티코어: 하나의 CPU 칩 안에 물리적인 계산 장치(코어)가 여러 개 들어있는 구조.
  • 언리얼 개발 적정 사양:
    • 6~8코어: 일반적인 게임 개발 및 플레이의 표준.
    • 12코어 이상: 셰이더 컴파일, 라이팅 빌드 등 대량의 연산이 필요한 개발 작업에 유리.
  • 조별 과제의 함정: 코어가 많아도 작업을 공평하게 나누지 못하면(최적화 실패), 일부 코어만 일하고 나머지는 놀게 된다.

'CS' 카테고리의 다른 글

CPU 스케쥴링  (0) 2026.03.20
[CS] 컴파일이란?  (0) 2026.01.27

 

내가 설명해보는 컴파일

컴퓨터는 0 과 1로 이루어진 2진수를 읽어 계산을 해주는 기계다. 하지만 사람들의 언어는 문자로 이루어져 있고 컴퓨터는 이런 고급 언어는 이해하지 못한다. 하지만, C++을 코딩 할때에는 cout, cin printf 등 우리가 이해할 수 있는 고급어로 이루어져 있다. 이건 C++이라는 언어가 cout, cin, printf 같은 단어에 동작 메크로를 0과 1로 구현하고 사람이 사용하기 편하게 만들었기 때문이다. 컴파일이란 사람이 구현한 고급 언어를 컴퓨터가 정의해 놓은 동작 메크로를 0과 1로 변환하여 읽고 그것 대로 동작을 수행하는 동작이다.


 

위와 같이 내가 아는 컴파일이라는 동작을 설명 해봤다. 아래 내용부터는 위의 내용을 보충하기 위해 찾아본 내용을 추가로 컴파일에 대해 작성 해보았다.


1. 전처리 (Preprocessing)

본격적인 번역을 하기 전에 코드를 정리하는 준비 단계 소스 파일을 읽어서 전처리기(Preprocessor)가 다음과 같은 작업을 수행한다.

  • 헤더 파일 삽입: #include로 시작하는 부분을 해당 파일의 내용으로 그대로 복사해서 붙여넣는다.
  • 매크로 치환: #define으로 정의된 상수나 매크로 함수를 실제 값이나 코드로 치환.

2. 컴파일 (Compilation)

전처리가 끝난 파일을 어셈블리어라는 중간 언어로 번역하는 단계. 이 단계가 좁은 의미의 '컴파일'입니다.

  • 문법 검사: 오타나 문법 오류를 여기서 잡아냅니다.
  • 최적화: 코드를 더 효율적으로 동작하도록 구조를 일부 변경하기도 합니다.

3. 어셈블리 (Assembly)

어셈블리 코드를 실제 기계어(0과 1로 이루어진 바이너리 코드)로 변환하는 단계입니다.

  • 결과물: 목적 파일이 생성.
    • 하지만 이 파일은 기계어지만, 아직 실행은 불가능. 다른 파일들과 연결되지 않았기 때문이다.

4. 링킹 (Linking)

여러 개의 목적 파일과 라이브러리 파일들을 하나로 합쳐서 실행 가능한 파일을 만드는 최종 단계.

  • 연결: main.cpp에서 다른 파일에 있는 함수를 호출했다면, 그 함수의 실제 위치를 찾아서 연결해줍니다.

이렇게 정리 하고 다시 보면 맞는 부분도 있지만 과정을 자세히 설명하지 못했다.

찾아본 정보를 요약하자면

  1. 전처리: 매크로 치환, 헤더 포함
  2. 컴파일: 문법 검사, 어셈블리어 변환
  3. 어셈블: 기계어 변환, 목적 파일 생성
  4. 링킹: 여러 파일을 합쳐 실행 파일 생성

'CS' 카테고리의 다른 글

CPU 스케쥴링  (0) 2026.03.20
CPU의 구조 및 클럭, 코어  (0) 2026.02.06

+ Recent posts