![](https://velog.velcdn.com/images/kdh10806/post/a1d4798d-8e4d-44c5-9518-b8492cda341d/image.png)
1. Process
1) 정의
- 운영체제로 부터 자원을 할당받은 작업의 단위.
- 컴퓨터에서 연속적으로 실행되고 있는 프로그램.(동적인 상태)
- 메모리에 올라와서 실행되고 있는 프로그램의 인스턴스.
✅ 참고
프로그램 : 파일이 저장 장치에 저장되어 있으나 메모리에는 올라와있지 않은 정적인 상태 (실행하지 않는 상태)
![](https://velog.velcdn.com/images/kdh10806/post/71c4ab80-9b92-4009-9d30-2ae2ee867be9/image.png)
그저 코드 덩어리인 프로그램을 실행하면 프로세스가 된다.
2) Process Memory
![](https://velog.velcdn.com/images/kdh10806/post/3b8ed033-bf83-4917-8297-854e1aa1ffff/image.png)
프로세스의 메모리는 일반적으로 여러 섹션으로 구분되며 다음이 포함된다.
- text 섹션 : 실행 코드, 고정 크기
- data 섹션 : 전역 변수, 고정 크기
- heap 섹션 : 프로그램 실행 중에 동적으로 할당되는 메모리, 동적 크기
- stack 섹션 : 함수를 호출할 때 임시 데이터 저장장소(함수 매개변수, 복귀 주소 및 지역 변수 ...), 동적 크기
함수 호출 시
함수가 호출될 때마다 함수 매개변수, 지역 변수 및 복귀 주소를 포함하는 활성화 레코드(activation record)가 stack에 Push
된다. 함수에서 제어가 되돌아오면 stack에서 활성화 레코드가 Pop
된다. 마찬가지로 메모리가 동적으로 할당됨에 따라 heap이 커지고 메모리가 시스템에 반환되면 축소됩니다.
3) Process State
![](https://velog.velcdn.com/images/kdh10806/post/369f5ec7-3b3b-43e8-ba08-14ab3579b735/image.png)
프로세스는 실행되면서 그 상태가 변한다.
- new(생성) : 프로젝트가 생성 중이다.
- running(실행) : 명령어들이 실행되고 있다.
- waiting(대기) : 프로세스가 어떤 이벤트(입출력 완료 및 신호의 수신 같은)가 일어나길 기다린다.
- ready(준비) : 프로세스가 처리기에 할당되기를 기다린다.
- terminated(종료) : 프로세스의 실행이 종료되었다.
4) PCB(Process Control Block)
![](https://velog.velcdn.com/images/kdh10806/post/7a1119fd-4c21-4152-84c8-10782122a361/image.jpg)
각 프로세스는 운영체제에서 프로세스 제어 블록에 의해 표현된다.
PCB는 특정 프로세스와 연관된 여러 정보를 수록하며 다음을 포함한다.
- process state :
new
, running
, waiting
, ready
, terminated
- process number : PID
- program counter : 이 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.
- registers : CPU 레지스터는 컴퓨터의 구조에 따라 다양한 수와 유형을 가진다. 레지스터에는 누산기(accumulator), 인덱스 레지스터, 스택 레지스터, 범용(general-purpose) 레지스터들과 상태 코드(condition code) 정보가 포함된다. 프로그램 카운터와 함께 이 상태 정보는, 나중에 프로세스가 다시 스케줄 될 때 계속 올바르게 실행되도록 하기 위해서 인터럽트 발생 시 저장되어야 한다.
- cpu scheduling info : 이 정보는 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수를 포함한다.
- memory limits : 이 정보는 운영체제에 의해 사용되는 메모리 시스템에 따라 기준(base) 레지스터와 한계(limit) 레지스터의 값, 운영체제가 사용하는 메모리 시스템에 따라 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함한다.
- accounting info : 이 정보는 CPU 사용 시간과 경과된 실시간, 시간 제한, 계정 번호, 잡 또는 프로세스 번호 등을 포함한다.
- I/O info : 이 정보는 이 프로세스에 할당된 입출력 장치들과 열린 파일의 목록 등을 포함한다.
요약하면 프로세스 제어 블록은 약간의 회계 데이터와 함께 프로세스를 시작시키거나 다시 시작시키는 데 필요한 모든 데이터를 위한 저장소의 역할을 한다.
스레드를 지원하는 시스템에서는 PCB는 각 스레드에 관한 정보를 포함하도록 확장된다.
2. Tread
![](https://velog.velcdn.com/images/kdh10806/post/4554af9a-4f42-4381-9f3e-e66d4608b89b/image.png)
1) 정의
- 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.
- 하나의 프로세스의 자원을 공유하며 일련의 과정을 여러개 동시에 실행시킬 수 있도록 하는 것.
2) 장점
- 쓰레드는 프로세스보다 생성 및 종료시간, 쓰레드간 전환시간이 짧다.
- 쓰레드는 프로세스의 메모리, 자원등을 공유하므로 커널의 도움없이 상호간에 통신이 가능하다.