코딩하는 해맑은 거북이
[운영체제] Program, Process, Thread 본문
해당 글은 아래의 3가지를 다룬다.
📌 프로그램(Program)
📌프로세스(Process)
📌 쓰레드(Thread)
📌 프로그램(Program)
메모리 상에 올라가 있지않고, 하드디스크에 들어있는 실행파일
cf) '.exe'로 끝나는 파일들이 프로그램이다!
📌 프로세스(Process)
- 실행 중인 프로그램의 인스턴스
- 실행파일의 내용이 메모리로 올라와서 CPU를 사용할 준비가 되어있는 것
- 프로그램은 1개지만, 해당 프로그램을 실행하는 인스턴스를 여러 개가 생길 수 있다.
cf) Chrome도 하나의 실행파일이지만, 여러 개의 창을 띄울 수 있다.
🔷 프로세스 구성
- CPU Register
- PC(Program Counter), SP(Stack Pointer), FP(Frame Pointer), ...
- Memory
- Text : Program Code (CPU에서 직접 수행되는 명령, 함수)
- Data : Global/Static variables (전역/정적변수)
- Stack : Local variables (including parameters) (지역변수, 인자, 함수의 리턴 주소)
- Heap : Allocated dynamically (동적으로 할당받는 곳)
- I/O Information
🔷 프로세스 상태
- 생성 (New)
- 프로세스가 생성되었지만 아직 승인 받지 못한 상태
- 준비 (Ready)
- 실행 준비는 되어 있지만 CPU가 사용 가능하지 않은 상태
- ex) 다른 프로세스가 실행 중
- 실행 (Running)
- CPU(Processor)가 프로세스에 포함된 명령을 실행 중인 상태
- 프로세스가 CPU를 차지하고 있는 상태
- 대기 (Blocked, Waiting)
- 프로세스가 입출력, 이벤트 등 다른 사건을 기다리는 동안 프로세스의 실행이 중단되어 있는 상태
- ex) 입출력 요청 발생
- 종료 (Terminated)
- 프로세스가 실행을 끝내고 종료한 상태
- 할당된 CPU 반납
🔷 프로세스 상태 전이
- Admitted : 프로세스 생성을 승인 받음
- Dispatch : 준비 상태에 있는 여러 프로세스들 중 하나가 스케줄러에 의해 실행되는 상태
- Interrupt : Timeout 예외상황 발생 시 현재 실행 중인 프로세스를 준비 상태로 전환하고, 다른 작업에 대응
- I/O or event wait : 실행 중인 프로세스가 입출력이나 이벤트를 처리해야 하는 경우, 끝날 때까지 대기 상태로 전환
- I/O or event completion : 입출력이나 이벤트가 모두 끝난 프로세스를 다시 준비 상태로 만들어 스케줄러에 의해 선택될 수 있는 상태로 전환
📌 쓰레드(Thread)
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
- 같은 주소 공간에서 따로 실행되는 함수
- 하나의 프로세스 내에 독립적인 실행 흐름
- 1개의 프로세스 내에 여러 개의 쓰레드가 존재할 수 있다.
(프로세스 주소 공간 공유한다. 즉, 데이터 공유 가능하다. → Concurrency(동시성) 문제발생)
- 쓰레드는 프로세스 내에 각각 PC, SP, Registers, Stack만 따로 고유하게 할당받고, Code/Data/Heap 영역은 공유한다.
cf) 인공지능에서 학습시키기 위한 데이터를 로더할 때, 병렬로 처리되게하는 num_workers가 생성되는 쓰레드의 갯수!
[참고자료]
'ETC' 카테고리의 다른 글
[기업탐색] 도움되는 사이트 (1) | 2023.11.12 |
---|---|
[프론트엔드] 쉽고 빠른 웹 개발 - Bootstrap (0) | 2023.07.18 |
[리눅스] Shell Command (0) | 2023.04.25 |
[Github] Github 명령어 모음 (0) | 2023.03.13 |
Comments