용어 정리
프로세서(Processor)
- 하드웨어적 측면: 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛, 중앙처리장치(CPU) 등
- 소프트웨어적 측면: 데이터 포맷을 변환하는 역할을 수행하는 데이터 처리 시스템, 워드프로세서, 컴파일러 등
프로세스(Process)
- 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램, 작업의 목록, 스케줄링의 대상이 됨
프로그램(Program)
- 하드디스크 등의 저장공간에 저장되어 있는 코드와 리소스 등이 집합되어 있는 파일
스레드(Thread)
- 프로세스 내 작업의 단위, 프로세스에서 한 단계 낮춰 규정한 것
프로세스와 스레드
프로세스
- 컴퓨터에서 실행되고 있는 프로그램
- Code, Data, Stack, Heap으로 구성된 독립된 메모리 영역을 할당 받음
- 1개 이상의 스레드를 가지고 있음
스레드
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
- 스레드끼리 프로세스의 메모리를 공유하며 작동할 수 있음
- 프로세스 메모리 영역 내에서 Code, Data, Heap 형식으로 할당된 메모리 영역은 공유함
- Stack, PC register 형식으로 할당된 메모리 영역은 스레드 별로 따로 할당받음
Stack, PC register를 독립적으로 가지는 이유
Stack
- Stack은 함수 호출 시 전달되는 인자, 되돌아갈 주소값, 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간
- 스택 메모리 공간이 독립적이라는 것은, 독립적인 함수 호출이 가능하다는 것
- 스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건
PC register
- PC 값은 스레드가 명령어의 어디까지 수행하였는지 나타냄
- 스레드는 CPU를 할당 받았다가 스케줄러에 의해 다시 선점되므로, 어느 부분까지 수행했는지 기억해야 함
PCB(Process Control Block)
- 프로세스 제어 블록
- 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조
- 프로세스가 생성되면 운영체제는 해당 프로세스의 PCB를 생성함
- 프로세스 작업 중 프로세스 간 전환이 발생하면, 진행하던 작업 상황을 PCB에 저장하고 CPU를 반환함
- 이후 다시 CPU를 할당받을 때 PCB에 저장된 내용을 불러와 이전에 종료한 시점부터 다시 작업을 진행함
- 아래와 같은 정보들이 저장됨
- Process State(프로세스 상태): new, ready, running 등 프로세스의 상태 정보
- Process ID(프로세스 ID): 프로세스 ID, 해당 프로세스의 자식 프로세스 ID
- Process priority(프로세스 권한): 컴퓨터 자원 또는 I/O 디바이스에 대한 권한 정보
- Program counter(프로그램 카운터): 프로세스에서 실행해야 할 다음 명령어의 주소에 대한 포인터
- CPU register(CPU 레지스터): 프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보
Context Switching(문맥 교환)
- PCB를 교환하는 과정
- 프로세스에 할당된 시간이 끝나거나 인터럽트에 의해 발생함
- 사용자 입장에서는 컴퓨터가 동시에 여러 프로그램을 실행하는 것처럼 보이지만, 프로세스 간 context switching을 통해 실행되는 프로세스를 전환하는 것
멀티태스킹 VS 멀티스레드
멀티 태스킹(Multi-Tasking)
- 하나의 운영체제 안에서 여러 프로세스가 실행되는 것
- 여러 프로세스가 동시에 실행되는 것처럼 보이지만, CPU 스케줄링에 의해 번갈아 가며 실행되는 것
멀티 스레드(Multi-Thread)
- 하나의 프로세스가 여러 개의 스레드로 여러 작업을 수행하는 것
멀티 프로세스(Multi-Process)
- 두 개 이상의 프로세서(CPU)가 하나의 작업을 동시에 처리하는 것
- 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
- IPC(Inter-Process Commuication): 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 방법
- 장점: 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않음
- 단점: 독립된 메모리 영역이기 때문에 작업량이 많을수록 Context Switching이 자주 일어나 성능저하가 발생할 수 있음