프로그램이 메모리에 적재되어 인스턴스화 된 것. 즉, 실행중인 프로그램.
CPU 스케줄링의 대상이 되는 task와 같은 의미로 쓰인다.
특징
e.g. 크롬 브라우저의 각각의 탭은 프로세스로 독립된 메모리를 가지고 있다.
💡 프로세스는 운영체제로부터 CPU, 메모리 등의 자원을 할당받아 CPU가 명령을 실행하도록 한다.
프로세스는 메모리와 PCB로 구성되어 있다.
메모리 구조 내부
- 코드 영역(프로그램 자체)
- 데이터 영역(프로그램 실행 시 필요한 데이터)
- 정적 데이터 영역
- 스택 영역
- 힙 영역
스택과 힙은 동적영역으로 런타임 단계에서 메모리를 할당받는다!
데이터, 코드 영역은 정적영역으로 컴파일 단계에서 메모리를 할당한다.
각 프로세스마다 존재하는 블록으로 프로세스를 관리하기 위한 필요 정보들이 들어있다.
=> 여러 프로세스가 번갈아 실행되는 겨우 이 PCB에 있는 정보들을 활용한다.
프로세스 제어 블록(PCB) 내에 들어있는 정보
- 프로세스 번호(PID)
- 프로세스 상태
- 프로그램 카운터(PC)
- 레지스터
- 메모리 관리 정보
- 프로세스 우선순위
- 회계정보 등
스레든
1.New(생성 상태) - 프로세스가 생성된 상태(메모리 할당하여 적재시킨상태)를 의미하며, PCB가 할당된다.
2.Ready
3.Running
4.Waiting
5.Terminated
생성 -> 준비 ---디스패치(CPU 획득)---> 실행 -> 종료
준비 <---할당시간 만료------- 실행
생성 -> 준비 -------------------디스패치------------------> 실행 -> 종료
준비 <---해당이벤트 작업완료-- 대기 <---이벤트 대기--- 실행
정의: 프로세스 내에서의 다중처리를 위해 제안된 개념으로, 하나의 프로그램을 실행시키기 위한 기본적인 단위다.
프로세스 하나의 자원을 공유하면서 일련의 과정 여러개를 동시에 실행시킬 수 잇는 것을 말한다.
전통적인 프로세스에서는 하나의 프로세스 안에 하나의 PC가 코드영역을 가리켰다면,
스레드가 제안된 프로세스에서는 PCB에서 pc가 분리되어, 스레드 내에 pc가 존재하고.
pc가 각각 다른 코드영역을 가리킬 수 있게 되었다.
PC(Program Counter): 다음 수행할 명령어의 주소를 기억하는 레지스터이다.
장점
1. 빠른 컨텍스트 스위치
스케줄링 단위가 프로세스였던 시절, context switch가 일어날 때마다 캐쉬 flush, 그리고 캐쉬 복구등을 해야했다. 하지만, 스케줄링 단위가 Thread로 되면서 같은 프로세스 내의 Thread들을 context switch를 할 때는 TCB만 바꾸면 된다.
가장 큰 차이점은 메모리 공유 여부이다.
스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다.
스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것이다.
따라서 스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.