[OS] 프로세스
1. 실행파일과 프로세스
1.1. 실행파일
실행파일이란 OS가 프로세스를 초기 구동하는 데 사용되는 파일로, Program 이라고 한다.
- 저장장치에 저장되어 있는 정적인 상태
- Windows:
.exe
- Linux, macOS: 확장자는 따로 없지만
ELF
(Executable & Linkable Format) 형식의 파일이다.
- Windows:
- OS는 executable한 파일을 읽어들여 프로그램을 실행한다.
- 파일 헤더 ‘매직 넘버’: MZ(ascii), ELF(ascii),
1.2. 프로세스
실행파일(프로그램)이 실행되면 이를 프로세스(Process)라고 한다.
- 실행파일이 메모리에 로딩되어 실행되는 상태
- 프로그램들은 메모리에 올라가야만 실행될 수 있음(프로그램 → 프로세스)
1.3. 프로세스 개념
프로세스 개념 및 정의는 교재마다 상이하다. 프로세스의 다양한 표현은 아래와 같다.
- 주기억 장치에 상주된 프로그램이 CPU에 의해 처리되는 상태
- CPU에 의해 현재 실행되고 있는 프로그램
- 실행을 위해 메모리에 올라온 동적인 상태
- PCB(Process Control Block, 프로세스 제어 블록)의 존재로서 명시되는 것
- 프로세스가 할당되는 개체로서, Dispatch가 가능한 단위
- 비동기적 행위를 일으키는 주체
- CPU가 할당되는 실체
- OS가 관리하는 최소 단위 작업
- task란 용어와 함께 사용되며, 다양한 정의 가짐
- 프로그램과 달리 메모리에 주소 공간 갖는 능동적인 객체
2. 프로그램의 실행
2.1. 다중 프로그래밍
여러 프로그램을 동시에 실행하는 것으로, 여러 프로세스들이 메모리에 동시에 있을 수 있기 때문에 가능하다.
- 프로세스들은 상호 독립적인 메모리 공간에서 실행된다.
2.2. 다중 인스턴스(Multi-instance)
같은 프로그램을 여러 개 실행할 수 있다. 실행될 때마다 독립된 프로세스가 생성된다.
- 각 프로세스는 독립된 메모리 공간을 가진다.
- 모두 별개의 프로세스로 취급된다.
2.3. Loading
- Loading(로딩): 실행파일이 메모리에 올라가는 과정
- Loader(로더): 메모리에 Load(적재)해 주는 것
- 절대 로더(Absolute loader)
- 항상 고정된 위치에만 로딩됨
- 재배치/링킹 없음
- 다중 프로그래밍 X
- 재배치 로더(Relocation loader)
- 주기억 장치 상태에 따라 목적 프로그램을 주기억 장치 임의공간에 적재
- 프로그램이 여러 개 실행되다 보면, 메모리 위치상에 충돌이 있을 수도 있음
- 동적 적재(Dynamic loading)
- 필요 부분만 주기억장치에 적재, 나머지 보조기억장치에 저장
3. 프로세스 생명 주기
프로세스는 생성부터 종료까지 여러 상태로 바뀌면서 실행된다. → State Change
3.1. 프로세스 상태 정리
상태 | 설명 | 작업 |
---|---|---|
생성 상태 | 프로그램을 메모리에 가져와 실행 준비가 완료된 상태 | 메모리 할당, PCB 생성 |
준비 상태 | 실행 기다리는 모든 프로세스가 자기 차례 기다리는 상태 실행될 프로세스를 CPU 스케줄러가 선택 | dispatch(PID): 준비 → 실행 |
실행 상태 | 선택된 프로세스가 time slice 얻어 CPU 사용하는 상태 프로세스 사이의 문맥 교환 발생 | timeout(PID): 실행 → 준비 exit(PID): 실행 → 완료 block(PID): 실행 → 대기 |
대기 상태 | 실행 상태 프로세스가 I/O 요청시 I/O 완료될 때까지 기다리는 상태 I/O 완료시 준비 상태로 감 | wakeup(PID): 대기 → 준비 |
완료 상태 | 프로세스 종료된 상태 사용 중이던 모든 데이터 정리됨 exit(정상 종료), abort(비정상 종료) 모두 포함 | 메모리 삭제, 프로세스 제어 블록 삭제 |
3.2. 보류 상태
- 프로세스가 어떤 이유로 인해 실행 미뤄지고, 메모리에서 쫓겨난 상태
메모리에서 쫓겨났다는 것은, 프로그램이 저장장치에 놓여졌다는 것이다.
- 보류 상태로 진입하는 이유
- 메모리 용량 초과
- 프로그램 오류
- Malware라서 격리
- 매우 긴 주기로 실행됨
- IO에 지연 있을 경우
- 예시: 업데이트 소프트웨어
4. PCB: Process Control Block
4.1. 프로세스 관리
프로세스는 생성부터 종료까지 모두 커널(OS)에 의해 관리됨
- 프로세스 생명 주기: 생성, 실행, 중단, 일지 중단, 재개
- 프로세스 정보(Metadata) 관리
- 프로세스 통신, 동기화
- 문맥 교환(Context switching)
OS는 프로세스를 제어하기 위해 상태 정보 일정한 자료 구조로 저장하는데, 이를 PCB(Process Control Block)라 한다.
- 프로세스마다 고유의 PCB가 생성된다.
4.2. PCB 구조
- OS는 PCB를 PCB table(Process table)이라는 곳을 통해 관리함
- OS마다 구조가 전부 다르다.
- PCB에 저장된 이러한 정보들을 프로세스의 Context라고도 부른다.
5. 시분할 (Time-slicing)
- 여러개의 프로세스를 동시에 처리하는 방법
- 프로세스들에게 번갈아가며 CPU를 사용하게 하는 방법
- 진짜로 동시에 실행되는 건 X
- ‘번갈아가는 것’에서 파생되는 문제들
- 어떻게 번갈아가는 것인가? → Context Switching
- 어떤 순서로 번갈아가는 것인가? → 스케쥴링 문제
6. 문맥 교환(Context Switching)
- 한 프로세스에서 다른 프로세스로 CPU를 넘겨주는 과정
- 실행 상태에서 나가는 프로세스의 PCB에는 지금까지의 작업 내용 저장
- 실행 상태로 들어오는 프로세스의 PCB의 내용으로 CPU가 세팅됨
7. 고민해볼 문제들
프로그램은 로더를 통해 메모리에 적재되어야 하며, 적재된 것을 프로세스라 부른다. 이 과정에서여러 가지 고민해볼 문제들이 파생된다.
- 로더는 누가 실행하는 것일까?
- 메모리 어디에 로딩하며, 어떻게 로딩하는 것인가?
- Allocation 문제
- 프로그램의 크기가 메우 크면?
- 가상 메모리, Paging
- Context Switching이 Suspend에 걸쳐 이루어지면?
- Swapping, 단편화 문제
- 어떤 프로세스가 다른 프로세스 메모리 영역을 침범한다면?
- 보안 문제
이 문제들은 OS를 더 공부하면서 하나씩 알아 볼 것이다.
이 포스팅은 작성자의 CC BY-NC 4.0 라이선스를 준수합니다.