1. 프로세스 모델
* 프로세스란
- 프로세스란 운영체제 입장에서 하나의 작업단위이다.
- 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 의미한다.
- 프로그램의 실행은 파일 시스템에 존재하던 실행파일이 메모리에 적재된다는 의미를 가지며, CPU를 할당 받아 명령을 수행하고 있는 상태를 의미한다.
- 즉 프로세스는 실행 중인 프로그램을 의미하며, 프로세스의 주소공간을 가상 메모리라고 칭한다.
* PCB
- 프로세스 제어 블록(Process Control Block)은 프로세스를 실행하는 데 필요한 정보를 보관하는 자료구조이다.
- 프로그램이 메모리에 올라와 이 PCB를 얻었을 때 비로소 프로세스가 된다.
- 모든 프로세스는 고유의 PCB를 가지며, 프로세스 생성 시 만들어져서 종료시 폐기된다.
- 프로세스는 그림에서처럼 다양한 정보들을 담고 있다. 그 중 대표적인 몇가지만 알아보자.
- 포인터 : 프로세스 제어 블록을 연결하여 준비상태나 대기 상태의 큐를 구현
- 프로세스 상태 : 프로세스의 현재 상태를 나타냄
- 프로세스 우선순위 : CPU 스케줄러가 준비 상태에 있는 프로세스 중 실행 상태로 옮겨야 할 프로세스를 선택할 때 확인한다.
- 메모리 관련 정보 : 프로세스의 메모리 위치 정보, 메모리 보호를 위한 경계 레지스터 값과 한계 레지스터 값 등
- CPU를 차지하던 프로세스가 나가고 새로운 프로세스가 들어오는 것을 Context Switching이라고 하는데, 이 때 두 PCB의 내용이 변경된다.
- Context Switching은 기본적으로 프로세스 자신에게 주어진 CPU시간을 다 사용(타임아웃)하면 발생하며, PCB에 지금까지의 결과를 저장하고 준비상태가 된다.
* 프로세스 구조
- 프로세스의 주소공간은 크게 코드영역, 데이터영역, 스택영역, 힙영역으로 나누어 진다.
- 각 프로세스 영역은 자신 만의 주소공간을 갖는다. 따라서 그에 상응하는 메모리를 필요로한다.
- 아래 그림에서 스택은 높은 주소를 가지며, 텍스트는 낮은 주소를 갖는다.
2. 프로세스 영역
* 스택 영역
- 프로그램이 자동으로 사용하는 영역으로, 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장하는 공간이다.
- 프로세스가 메모리에 로드될 때 스택 사이즈는 고정되며 함수 호출 시 생성되고, 끝나면 반환된다.
- 스택사이즈가 고정이므로 재귀함수가 너무 깊거나, 함수 지역변수가 메모리를 초과하면 Stack Overflow가 발생할 수 있다.
- 영역이름대로 스택 자료구조를 사용하여 LIFO(후입선출)의 형식이다.
- 명령 실행 시 자동으로 증가 또는 감소하기 때문에 보통 메모리의 마지막 번지를 지정한다.
* 힙 영역
- 프로그래머가 필요할 때마다 사용하는 동적인 영역이다 따라서 이 영역은 런타임에서 결정된다. 동적 메모리 영역이라고도 부른다.
- 이 영역은 메모리 주소 값에 의해서만 참조되고 사용된다.
- 위의 스택과 같은 공간을 공유하며, 힙이 낮은 주소부터 할당되는데 각 영역이 상대공간을 침범하면 Stack Overflow, Heap Overflow가 발생한다.
* 데이터 영역
- 전역변수, 정적변수, 배열과 같은 구조체 등이 저장되는 공간이다.
- 데이터 영역은 초기화되지 않은 데이터가 저장되는 BSS영역과 초기화된 데이터가 저장되는 GVAR영역으로 나뉜다.
* 텍스트 영역
- 코드 영역이라고도 불리며, 말그대로 코드가 저장되는 공간이다.
- 사용자가 작성한 프로그램 코드가 CPU에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되어 있다.
- 컴파일 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-only로 되어있다.
참고
'Computer Science > Operating System' 카테고리의 다른 글
<운영체제> 멀티프로세스와 멀티스레드 (0) | 2021.08.21 |
---|---|
<운영체제> 프로세스 스케줄링 (0) | 2021.08.20 |
<운영체제> 프로세스와 스레드 (0) | 2021.08.19 |