
프로세스는 실행 중인 프로그램을 의미
운영체제로부터 시스템 자원(메모리, CPU 시간 등)을 할당받는 작업의 단위
각 프로세스는 자신만의 고유한 메모리 공간을 가짐
따라서 한 프로세스가 다른 프로세스의 메모리 영역에 직접 접근할 수 없음
독립성: 각 프로세스는 독립적인 메모리 공간(Code, Data, Stack, Heap)을 가짐
자원 할당의 단위: 운영체제는 프로세스 단위로 자원을 할당
프로세스 간 통신 (IPC, Inter-Process Communication): 독립된 메모리 공간 때문에, 프로세스 간 데이터 교환을 위해서는 별도의 통신 방법이 필요
스레드는 프로세스 내에서 실행되는 흐름의 단위
하나의 프로세스는 하나 이상의 스레드를 가질 수 있으며, 같은 프로세스에 속한 스레드들은 프로세스의 자원(메모리, 파일 등)을 공유
경량 프로세스 (Lightweight Process): 생성 및 컨텍스트 스위칭 비용이 프로세스보다 작음
자원 공유: Code, Data, Heap 영역을 다른 스레드와 공유하고, Stack 영역만 독립적으로 가짐
응답성 향상: 여러 스레드를 사용하면 사용자와의 상호작용을 유지하면서 시간이 오래 걸리는 작업을 동시에 처리 가능
| 구분 | 프로세스 (Process) | 스레드 (Thread) |
|---|---|---|
| 정의 | 실행 중인 프로그램 | 프로세스 내 실행 흐름의 단위 |
| 메모리 | 독립적인 메모리 공간 | Stack을 제외한 메모리 공유 |
| 자원 | 자원 할당의 단위 | 프로세스의 자원 공유 |
| 통신 | IPC 필요 | 메모리 공유로 통신 용이 |
| 오버헤드 | 생성 및 전환 비용이 큼 | 생성 및 전환 비용이 작음 |
CPU 스케줄링은 여러 프로세스가 CPU를 효율적으로 사용할 수 있도록 순서를 정하는 방법

먼저 온 순서대로 처리하는 가장 간단한 비선점형 스케줄링 알고리즘

실행 시간이 가장 짧은 프로세스에게 CPU를 먼저 할당하는 비선점형 스케줄링 알고리즘
SJF의 선점형 버전입니다. 현재 실행 중인 프로세스의 남은 시간보다 더 짧은 프로세스가 도착하면 CPU를 빼앗아 그 프로세스에게 할당

각 프로세스가 CPU를 사용할 수 있는 일정한 시간 할당량(Time Quantum)을 정하고, 그 시간만큼만 실행한 뒤 준비 큐(Ready Queue)의 맨 뒤로 갑니다. 시분할 시스템에 적합한 선점형 스케줄링

프로세스를 여러 그룹으로 나누어 각 그룹마다 다른 큐를 할당
각 큐는 자신만의 스케줄링 알고리즘을 가질 수 있음(예: 전위(Foreground) 큐는 라운드 로빈, 후위(Background) 큐는 FCFS)


세마포어와 뮤텍스는 여러 프로세스나 스레드가 공유 자원에 동시에 접근하는 것을 제어하기 위한 동기화 도구
뮤텍스 (Mutex, MUTual EXclusion): 오직 하나의 스레드/프로세스만이 공유 자원에 접근할 수 있도록 하는 잠금(Locking) 메커니즘. 자원을 사용하려는 스레드는 뮤텍스를 획득(acquire)해야 하고, 사용이 끝나면 반드시 반환(release)해야 함
세마포어 (Semaphore): 지정된 개수(S)의 스레드/프로세스가 공유 자원에 접근할 수 있도록 함. S개의 허용치를 가진 카운터로 생각할 수 있으며, 자원을 사용하려면 카운터를 감소시키고, 반납하면 증가 카운터가 0이면 자원을 사용할 수 없음
| 구분 | 뮤텍스 (Mutex) | 세마포어 (Semaphore) |
|---|---|---|
| 접근 허용 | 1개 | S개 (S >= 1) |
| 목적 | 상호 배제 (Mutual Exclusion) | 자원의 개수를 세어 접근 제어 |
| 소유권 | 락을 획득한 스레드만 해제 가능 | 다른 스레드도 락 해제 가능 |

경쟁 상태는 두 개 이상의 프로세스나 스레드가 공유 자원에 동시에 접근하고, 그 실행 순서에 따라 결과가 달라지는 상황을 말합니다. 동기화 메커니즘이 없다면 데이터의 일관성을 해칠 수 있는 심각한 문제입니다.
예시: 두 스레드가 공유 변수 balance를 동시에 100씩 증가시키는 경우, 한 스레드가 읽은 값을 기반으로 계산하는 동안 다른 스레드가 값을 변경하면 예상치 못한 결과(200이 아닌 100이 될 수 있음)가 발생할 수 있습니다.

교착 상태는 두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 블록된 상태로, 무한정 대기하게 되는 상황을 의미
아래 4가지 조건이 모두 충족될 때 교착 상태가 발생 가능

컨텍스트 스위칭은 CPU가 현재 실행하고 있는 프로세스(또는 스레드)의 상태를 저장하고, 다음 실행할 프로세스의 상태를 불러오는 과정. 이 과정 덕분에 여러 프로세스가 하나의 CPU에서 번갈아 가며 실행될 수 있어 멀티태스킹이 가능

다단계 피드백 큐 스케줄러는 다단계 큐 스케줄링을 개선한 방식으로, 프로세스가 큐 사이를 이동할 수 있게 하여 유연성을 높인 알고리즘
동작 방식:
목표: 짧은 작업과 I/O 중심 작업에 높은 우선순위를 부여하여 응답 시간을 줄이고, 실행 시간이 긴 작업은 낮은 우선순위 큐로 보내 시스템 처리율을 높이는 균형을 맞춤
유닉스 계열 운영체제인 4BSD에서 사용된 MLFQS는 이 알고리즘의 고전적인 구현 예시. CPU 사용량에 따라 동적으로 우선순위를 조정하여 대화형 프로세스의 응답성을 보장하고, CPU 중심 프로세스도 공정하게 처리하도록 설계
nicenice는 유닉스 계열 시스템에서 프로세스의 우선순위를 사용자가 수동으로 조정할 수 있게 하는 명령어입니다.
nice 값: -20 (가장 높음) 부터 19 (가장 낮음) 까지의 값을 가집니다. 기본값은 0nice 값을 낮추면(음수 방향) 프로세스의 우선순위가 높아져 더 많은 CPU 시간을 할당받고, 값을 높이면(양수 방향) 우선순위가 낮아져 다른 프로세스에 CPU 시간을 양보하게 됨. 시스템 관리자가 중요한 백그라운드 작업의 우선순위를 낮추는 등의 용도로 사용