1. 개념
- 프로세스란?
- 정의: 컴퓨터에서 실행 중인 하나의 프로그램
- 특징
- OS로부터 독립된 메모리 영역(코드, 데이터, 스택, 힙)을 할당받음
- 다른 프로세스의 메모리 영역에 접근할 수 없음
- 프로세스에 할당된 메모리 영역
- 프로세스의 메모리 영역 구조
- 스택 stack
- 정의: 지역 변수, 함수의 매개변수, 반환되는 주소 값 등이 저장되는 영역
- 메모리 할당 방식: 높은 주소 값에서 낮은 주소 값으로
- 영역 크기: 컴파일 때 결정됨 - 힙 heap
- 정의: 사용자에 의해 동적 메모리 할당이 일어나는 영역
- 메모리 할당 방식: 낮은 주소 값에서 높은 주소 값으로
- 영역 크기: 런타임 때 결정됨 - 데이터 data
- 정의: 전역 변수, 정적 변수, 배열, 구조체 등이 저장되는 영역
- 데이터 영역
: BSS 영역(Block Stated Symbol, 초기화하지 않은 변수를 저장)과 데이터 영역(초기화한 변수를 저장)으로 구분 - 코드 code
- 정의: 실행할 기계어로 컴파일되어 저장되는 영역. 텍스트 영역이라고도 함
- 스택 stack
여기서 스택 영역과 힙 영역은 동적으로 메모리 할당이 가능해 두 영역 사이에 빈 메모리 공간이 존재한다.
스택 영역은 LIFO(Last In First Out, 후입선출) 방식으로, 높은 주소 값에서 낮은 주소 값 순서로 사용한다.
힙 영역은 FIFO(First In First Out, 선입선출) 방식으로, 낮은 주소 값에서 높은 주소 값 순서로 사용한다.
하지만 메모리 영역을 공유하기 때문에 서로의 영역을 침범하는 문제가 생길 수 있다.
- 스택 오버플로: 스택 영역이 힙 영역을 침범하는 경우
- 힙 오버플로: 힙 영역이 스택 영역을 침범하는 경우
- 스레드란?
- 정의: 프로세스에서 실제로 실행되는 흐름의 단위
- 특징
- 프로세스 안에 존재하므로 프로세스의 메모리 공간을 이용함
- 지역 변수를 저장하는 스택 영역을 할당받음
- 전역 변수를 저장하는 힙 영역은 다른 스레드와 공유함
2. PCB
- 정의: OS는 프로세스를 제어하기 위해 프로세스 정보를 저장하는데, 이를 PCB(Process Control Block, 프로세스 제어 블록)이라고 함
- 역할
- 프로세스의 현재 상태, 프로세스를 나타내는 고유의 PID(Process ID), 부모 프로세스의 PID, 자식 프로세스의 PID, 다음 실행할 명령어의 주소인 PC(Program Counter, 프로그램 카운터), 프로세스의 우선순위, 메모리 제한 등을 저장함
- 저장되는 정보
3. 프로세스의 생성
새로운 프로세스는 기존 프로세스에서 fork() 함수를 호출해 생성한다.
fork() 함수에는 함수를 호출한 프로세스를 복사하는 기능이 있다.
이때 기존 프로세스를 부모 프로세스, 복사된 프로세스를 자식 프로세스라고 한다.
부모 프로세스에서 fork() 함수를 호출하면
부모 프로세스는 자식 프로세스의 PID 값을, 자식 프로세스는 0을 반환한다.
- 운영체제가 프로세스를 종료하는 경우
- 프로세스가 운영체제의 종료 서비스(exit())를 호출해 정상 종료하는 경우
- 프로세스의 실행 시간 또는 특정 이벤트 발생을 기다리는 시간이 제한된 시간을 초과한 경우
- 프로세스가 파일 검색 또는 입출력에 실패하는 경우
- 오류가 발생하거나 메모리 부족 등이 발생하는 경우
- 부모 프로세스가 자식 프로세스를 종료시키는 경우
- 자식 프로세스가 할당된 자원을 초과해 사용할 때
- 자식 프로세스에 할당된 작업이 없을 때
4. 프로세스 상태도
모든 프로세스는 CPU에 의해 생성되고 소멸하는 과정을 거친다.
이 과정에서 프로세스는 생성, 준비, 대기, 실행, 종료라는 5가지 상태로 존재한다.
- 프로세스 상태
- 생성 new: 프로세스가 PCB를 가지고 있지만 OS로부터 승인받기 전
- 준비 ready: OS로부터 승인받은 후 준비 큐에서 CPU 할당을 기다림
- 실행 running: 프로세스가 CPU를 할당받아 실행함
- 대기 waiting: 프로세스가 입출력이나 이벤트 발생을 기다려야 해서 CPU 사용을 멈추고 기다림
- 종료 terminated: 프로세스 실행을 종료함
- 프로세스의 변화
- 생성 → 준비: 생성 상태의 프로세스가 OS로부터 승인을 받아, 준비 상태의 프로세스가 모여 있는 자료구조인 준비 큐에 추가됨
- 준비 → 실행: 준비 큐에 있는 프로세스 중 우선순위가 높은 프로세스가 디스패치(dispatch)되어 실행됨
- 디스패치: 프로세스에 CPU 자원을 할당해 해당 프로세스가 준비 상태에서 실행 상태가 되는것
- 실행 → 준비: CPU 독점을 방지하기 위해 타임아웃되어 준비 상태로 변경됨
- 실행 → 대기: 입출력 또는 이벤트 때문에 대기 상태로 변경됨
- 대기 → 준비: 입출력 또는 이벤트가 완료되어 준비 상태로 변경됨
- 실행 → 종료: 실행 중인 프로세스가 정상적으로 끝나서 종료 상태로 변경됨
5. 멀티 프로세스와 멀티 스레드
멀티 프로세스와 멀티 스레드 개념을 이해하려면 동시성과 병렬성을 알아야 한다.
동시성 concurrency
- 정의: 하나의 코어(싱글 코어)에서 여러 작업을 번갈아 가면서 처리하는 방식
- CPU는 한 번에 하나의 작업만 처리할 수 있어서 여러 작업을 돌아가면서 처리함
- 콘텍스트 스위칭 context switching: 하나의 CPU에서 여러 작업을 번갈아 가면서 처리하기 위해 처리 중인 작업을 교체하는 것
병렬성 parallelism
- 정의: CPU가 여러 개(멀티 코어) 있어서 각 CPU에서 각 작업을 동시에 처리하는 방식
👉 물리적인 시간 관점에서 동시에 여러 작업이 처리됨
- 멀티 프로세스
- 정의: 응용 프로그램 하나를 여러 프로세스로 구성하는 것
- 장점
- 한 프로세스가 죽어도 다른 프로세스에 영향을 주지 않음
👉 응용 프로그램을 프로세스 하나로 구성하는 것보다 여러 개로 구성하는 것이 안정적
- 한 프로세스가 죽어도 다른 프로세스에 영향을 주지 않음
- 단점
- 시간과 메모리 공간을 많이 사용함
why? CPU는 하나의 작업만 처리할 수 있음
👉 여러 프로세스를 처리하려면 CPU에서 처리 중인 프로세스를 교체하는 콘텍스트 스위칭 작업이 이루어져야 함
- 시간과 메모리 공간을 많이 사용함
- 오버헤드 overhead
- CPU에서 기존에 처리하던 프로세스가 할당받은 메모리 영역을 다른 프로세스에서 사용할 수 있게 교체할 때 필요한 시간과 메모리
- IPC (Inter Process Communication)
- 프로세스는 독립적인 메모리를 할당받기 때문에 프로세스 간에 공유할 자원이 있으면 IPC를 통해 프로세스 간에 자원을 공유해야 함
👉 공유할 메모리를 직접 참조하는 것보다 비효율적임
- 프로세스는 독립적인 메모리를 할당받기 때문에 프로세스 간에 공유할 자원이 있으면 IPC를 통해 프로세스 간에 자원을 공유해야 함
- 멀티 스레드
- 정의: 스레드를 여러 개 생성해 스레드들이 각자 다른 작업을 처리하는 것
- 장점
- 스레드 간에 힙, 데이터, 코드 영역을 공유함
👉 콘텍스트 스위칭할 때 오버헤드가 적게 발생하고 IPC를 사용하지 않아도 됨
👉 멀티 프로세스의 단점 보완
👉 프로세스 여러 개 생성하는 것보다 스레드를 여러 개 생성하는 것이 자원 효율적으로 사용 가능 - 스레드 간 자원 공유가 프로세스 간 자원 공유보다 시스템 처리 비용이 적고 프로그램 응답 시간도 단축됨
- 스레드 간에 힙, 데이터, 코드 영역을 공유함
- 단점
- 공유 자원에 대한 동기화가 필수: 스택 영역을 제외한 메모리 영역을 다른 스레드와 공유하기 때문
- 스레드에 문제가 생기면 프로세스 내 다른 스레드에 영향을 미칠 수 있음
6. 콘텍스트 스위칭
콘텍스트 스위칭을 이해하려면 인터럽트를 알아야 한다.
인터럽트란?
- 정의: 입출력 관련 이벤트가 발생하거나 예외 상황이 발생할 때 이에 대응할 수 있게 CPU에 처리를 요청하는 것
- 발생하는 경우
- 입출력이 발생할 때
- CPU 사용 시간이 만료되었을 때
- 자식 프로세스를 생성할 때
CPU는 하나의 프로세스만 처리할 수 있으므로 멀티 프로세스를 처리하려면 CPU 스케줄러에 의해 인터럽트가 발생하면서 콘텍스트 스위칭이 이뤄진다.
콘텍스트는 CPU가 처리하는 프로세스의 정보를 의미한다.
👉 멀티 프로세스 환경에서 CPU가 처리 중인 프로세스의 정보를 바꾸는 것
참고
이수진, 「기술 면접 대비 CS 전공 핵심요약」, 도서출판 길벗, 2023, p.22 ~ 31
'Computer Science > OS' 카테고리의 다른 글
[OS] 시스템 콜 System Call (0) | 2024.06.16 |
---|---|
[OS] 인터럽트 (0) | 2024.06.16 |
[OS] CPU 스케줄링 알고리즘 (2) | 2024.06.16 |
[OS] CPU와 메모리 구조 (0) | 2024.06.13 |
[OS] 운영체제란? 그리고 컴퓨터란? (1) | 2024.06.13 |