프로세스는 실행 중인 프로그램이다. 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다. 운영체제로 부터 주소 공간, 파일, 메모리 등을 할당 받는다.
Code : CPU에서 직접 수행되는 명령어들이 올라가는 메모리 영역
Data : 전역 변수나 static 변수가 할당되는 영역
Heap : 동적 할당 받은 내용
Stack : 지역변수와 함수 호출 시 전달되는 인자 값들 그리고 함수의 리턴 주소
Code, Data 영역은 프로그램 로딩할 때, 크기를 결정하며 수행 중간에 크기 변화가 없다. 하지만 Stack과 Heap 영역은 프로그램 수행 중에 메모리 크기가 변한다.
프로세스는 실행되면서 5가지 상태 변화를 겪는다.
특정 프로세스에 대한 정보를 가진 데이터 블록 혹은 레코드로 변화하는 모든 정보에 대한 기억저장소 역할을 한다.
각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB도 함께 제거 된다.
CPU가 처리하던 작업의 내용들을 PCB에 저장.
다시 CPU를 점유해서 작업을 수행할 때, 해당 정보들을 CPU에 넘겨 하던 작업 마저 수행
Pointer : 포인터 정보들(부모 프로세스, 자식 프로세스, 프로세스가 위치한 메모리 주소, 할당된 자원)
Process state (현재 상태) : 프로세스 상태 5가지 중 현재 상태 정보
Process ID or Number (프로세스 고유 번호) : 프로세스가 생성될 때 부여받는 프로세스의 고유 식별자
Program counter : 프로세스가 다음에 수행해야 할 명령어의 주소가 저장
Registers (CPU 레지스터 정보) : CPU 내 누산기, 인덱스 레지스터, 프로그램 카운터 등의 정보. 그 외 포인터, 주기억장치 관리 정보, 입출력 상태 정보, 계정 정보 등이 있다.
쓰레드란 프로세스 실행 단위이다.
하나의 프로세스는 여러 개의 쓰레드로 구성이 가능하다.
하나의 프로세스를 구성하는 쓰레드들은 프로세스에 할당된 메모리, 자원(코드, 데이터 섹션, 열린 파일, 신호) 등을 공유
한다.
프로세스와 같이 실행, 준비, 대기 등의 실행 상태를 가지며 실행 상태가 변할 때마다 Context Switching (쓰레드 문맥 교환)을 수행
한다.
각 쓰레드 별로 독립적으로 스택과 레지스터가 할당된다.
왜?
하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것을 멀티 쓰레딩이라고 한다.
이 경우 각각의 스레드는 독립적인 작업을 수행해야 하기 때문에 각자의 스택과 PC 레지스터 값을 갖고 있다.
프로세스는 실행 중인 프로그램
으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있다. 하지만 프로세스 생성은 많은 시간과 자원을 소비한다.
쓰레드는 프로세스의 실행 단위
로 프로세스 내의 주소 공간과 자원을 공유한다. 그러나 쓰레들도 독립적인 작업을 수행해야 하기 때문에 각자 스택과 PC 레지스터 값
을 갖고 있다.
쓰레드는 프로세스보다 생성 및 종료 시간, 쓰레드 간 전환 시간이 짧다.
쓰레드는 프로세스의 메모리, 자원 등을 공유하므로 커널 도움 없이 상호간에 통신이 가능하다.