Process의 구조, State와 PCB의 개념
1. 프로세스란
프로세스는 동작중인 프로그램이며, 커널로부터 할당받은 자신만의 자원을 이용하여 CPU가 기계어 명령을 실행함에 따라 끊임없이 변화한다. 사용자 입장에서 프로세스의 구조를 바라보면, 프로세스는 크게 텍스트, 데이터, 스택, 힙이라는 네 영역으로 구분할 수 있다.
2. 프로세스의 구조
Text 영역: CPU에서 직접 수행되는 명령어를 가진다. Code 영역이라고도 하며, 코드 자체를 구성하는 메모리 영역으로 Hex 파일이나 Bin 파일 메모리이다.
Data 영역: 전역 변수가 이곳에 속한다. 그 외에 프로그램이 실행될 때 생성되고 프로그램이 종료되면 시스템에 반환되며 정적변수, 배열, 구조체 등이 저장되는 곳이다. 이 때 초기화 된 데이터에는 data 영역에 저장되고, 초기화되지 않은 데이터는 BSS(Block Stated Symbol)영역에 저장된다.
Heap 영역: 동적으로 할당 받은 내용을 가진다. 동적 데이터 영역이라고 부르기도 한다. 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.
Stack 영역: 지역변수와 인자, 그리고 함수의 리턴 주소를 가진다. 함수를 호출 시에 생성이 되고, 함수가 끝나면 반환이 된다. Stack 사이즈는 각 프로세스마다 할당되지만, 프로세스가 메모리에 로드될 때 Stack 사이즈가 고정되어 있어 런타임시에 Stack 사이즈르 바꿀 수 없다.
3. PCB의 개념과 포함 요소
PCB는 Process Control Block의 줄임말로, 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓은 곳으로 프로세스의 상태 정보를 저장하는 구조체이다. 즉, 쉽게 말해서 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓을 수 있는 저장 장소를 말한다. 이것은 프로세스 상태 관리와 Context Switching을 위해서 필요하며, PCB는 프로세스 생성시 만들어지며 주 기억장치에 유지된다.
PCB에 포함된 정보는 다음과 같다.
Process ID/ Process state / Program counter/ register information / scheduling information / Memory related information/ Accounting information / Status information related to I/O
- PID: 프로세스의 고유 번호를 의미한다.
- State(상태): 준비, 대기, 실행 등의 상태를 의미한다.
- 포인터: 다음 실행될 프로세스의 포인터이다.
- Register save area: 레지스터 관련 정보이다.
- Priority: 스케줄링 및 프로세스의 우선순위이다.
- 또한 할당된 자원 정보도 포함하고 있다.
- Account: CPU 사용시간, 실제 사용된 시간도 포함한다.
- 입출력 상태 정보를 포함한다.
3. Process State
프로세스는 실행되면서 매 순간마다 상태가 변한다. 그림에 나와있는 각각의 프로세스 state는 다음과 같다.
Create:
프로세스가 생성되는 단계이다. 생성은 되었지만, 아직 OS에 의해 승인을 받지 못한 상태이다.
Ready:
프로세스가 생성되어 주기억장치에 적재가 되고, 실행하는데 필요한 자원을 모두 얻은 상태이다.
Running 상태가 되기 위한 모든 준비가 끝난 상태로 대기 큐에서 대기중인 상태를 말한다.
이 상태에는 여러 개의 프로세스가 CPU이 할당 받기를 기다리며 존재할 수 있다.
Running:
프로세스가 CPU를 할당 받아서 실제로 프로세스가 수행되고 있는 상태이다.
단일 처리기에서 단 하나의 프로세스가 이 상태를 갖는 것에 주의해야한다. Running 상태는 2개가 될 수 없다.
Suspended ready:
필요한 자원은 모두 얻었지만 주기억장치에 적재되지 못한 상태이다. \
Suspended blocked:
필요한 자원도 얻지 않아 없고, 주기억장치에도 적재되지 못한 상태를 말한다.
Asleep:
주기억장치에 적재는 되었지만 필요한 자원을 얻지 못한 상태이다.
Terminated:
프로세스가 종료된 상태이다.
'Undergraduate Records' 카테고리의 다른 글
React 프로젝트 생성 및, 컴포넌트 만들기 (0) | 2020.04.16 |
---|---|
프로그래밍언어론, 기본 데이터 타입 (0) | 2020.04.16 |
맛있는 디자인 책으로 일러스트레이터 독학 4주차 후기! (0) | 2020.03.29 |
맛있는 디자인 스터디 포토샵 독학! 2주차 완료 (1) | 2020.03.15 |
[학습 7회차] 2018 카카오페스티벌 본선 문제풀이_승부예측 (0) | 2020.02.17 |