프로세스와 스레드
Process(프로세스)
프로세스란?
- 컴퓨터에서 연속적으로 실행되는 컴퓨터 프로그램
- 프로그램을 구동하여 메모리상에서 실행되는 작업단위
- OS로 부터 독립된 메모리 영역을 할당받는다.
프로세스의 구조
프로세스는 아래와 같은 구조를 가진다.
- Code : 코드 자체를 구성하는 메모리 영역
- Data : 전역변수, 정적변수, 배열등을 저장
- Heap : 동적 할당시 사용(new(), malloc() 등)
- Stack : 지역변수, 매개변수, 리턴값 등을 임시적으로 저장하는 영역
왜 이렇게 나눈걸까?
1 2
| 공유 할 수 있는 데이터는 공유하여 메모리의 사용량을 줄이기 위해서 Stack과 Data를 나눈 이유는 스택의 특성과 전역변수를 활용하기 위해서
|
Process Control Block(PCB, 프로세스 제어 블록)
특정 프로세스에 대한 정보(Process MetaData)를 저장하고 있는 자료구조(Linked List)
아래와 같은 데이터가 저장되어 있다.
- Process MetaData
- Process ID : 프로세스의 식별번호
- Process State : 프로세스의 상태(new, ready, running, waiting, terminated)
- Program Counter : 이 프로세스 다음에 실행할 명령어의 주소
- CPU Registers
- CPU 스케줄링 정보: 우선 순위, 최종 실행시각, CPU 점유시간 등
- 메모리 관리 정보: 해당 프로세스의 주소 공간 등
- 프로세스 계정 정보: 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
- 입출력 상태 정보: 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등
PBC는 CPU에서 프로세스의 상태에 따라 교체작업(Context Switching)이 이루어질때 PBC에서 저장되어있는 내용들을 불러와 이전 종료시점부터 다시 작업을 재실행한다.
Thread(스레드)
Thread란?
- 프로세스 내부에 존재하는 실행 단위
- 하나의 프로세스가 생성될때 내부에 적어도 하나의 스레드가 같이 생성된다.
- 스레드는 Stack만 따로 할당받고, 나머지 Code, Data, Heap은 공유
프로세스와 스레드의 차이
- 프로세스는 고유한 공간과 자원을 할당받아서 사용하지만(프로세스간 공유하지 않음) 스레드는 고유한 메모리(Stack)를 프로세스로 부터 할당받긴 하지만, 서로 공유하는 메모리(Code, Data, Heap)가 존재함
Stack를 스레드마다 독립적으로 할당 받는 이유
- 독립적인 실행 단위로써 스레드를 사용하기 위해서는 독립적인 메모리 공간이 필요하고, 이를 만족시키는 최소조건이 Stack을 제공하는것 이기 때문이다.