프로세스의 이해
프로세스란
실행되는 프로그램
이 때, 메모리에 적재되며, CPU를 할당받는다.
프로그램이란?
명령어의 집합을 파일로 묶어놓은 것
프로세스에 할당되는 메모리 공간
4가지의 영역으로 이루어짐
- Code
- Data
- BSS
- Data
- Heap
- Stack
Code 영역
프로그램의 코드가 기계어로 저장되는 공간
Data 영역
전역변수와 정적변수가 저장되는 공간
초기화 되지 않은 변수가 저장되는 곳 BSS, 그렇지 않은 곳으로 다시 구분됨
Heap 영역
런타임시에 생성되는 변수가 저장되는 공간
Stack 영역
함수 호출 시 생성되는 지역 변수 및 매개 변수가 저장되는 공간
CPU와 Code영역의 연관성
프로그램을 실행하기 위해서는 CPU가 코드를 읽고, 연산을 수행해야한다.
CPU의 PC는, CPU 내부에 존재하는 레지스터의 여러 종류 중 다음에 실행될 코드를 저장하는 레지스터다.
그래서 이러한 PC에는 다음에 실행할 코드의 주소값이 저장되어 있다.
CPU는 이러한 명령어를 읽고 연산을 해서 process가 실행되는 것이다.
PCB
(Process Control Block : 프로세스 제어 블록)
프로세스마다 반드시 만들어지는 것이 바로 PCB(프로세스 제어 블록)이다.
효율적인 프로세스 관리를 위해 필요한 프로세스 정보를 저장한다.
이것은 사람으로 치자면 ID카드와 같다.
PCB에는 고유의 PID(프로세스 번호)와 함께 현재 프로세스의 상태 정보가 담겨있다.
이 정보는 커널이 관리한다.
Multi Process(멀티 프로세스)
우리는 한 번에 여러가지의 프로그램을 사용한다. 즉, 2개 이상의 프로세스가 동시에 실행되는 것이다.\
두 가지의 상황이 있다.
- CPU가 하나일 때,
하나의 CPU는 한 번에 하나의 프로세스만 담당할 수 있다. 그렇다면 2개 이상의 프로세스가 어떻게 동시에 실행되는 것처럼 보이게 하는 것일까?
=> 하나의 CPU가 짧은 시간동안 여러 개의 프로세스를 번갈아가면서 실행하는 것이다. => 이것을 시분할 시스템이라하며,동시성
의 관점으로 바라볼 수 있다. - CPU가 2개 이상일 때,
두 개의 CPU가 각각의 프로세스를 담당하여, 프로세스를 동시에 실행시킨다. =>병렬성
의 관점으로 바라볼 수 있다.
Context Switching(컨텍스트 스위칭, 문맥 교환)
PCB를 교환하는 과정
우리는 위에서 CPU가 하나일 때, 한 번에 하나의 프로세스만 담당하여 여러 개의 프로세스를 번갈아가면서 실행한다고 하였다.
그러면, 어떻게 A라는 프로세스를 실행하다가 B라는 프로세스를 실행하고, 다시 A가 했던 지점으로 기억하고 돌아가서 수행하는걸까?
PCB에 프로세스의 상태를 저장하고 읽는 과정을 통해 가능하다.
프로세스 A(pA), 프로세스 B(pB), CPU의 대화로 과정을 구성해보았다.
"나는 지금 실행중~ 힛" - pA
"인터럽트 걸렸어! PCB에 저장해야겠다! 나 커널모드로 전환한다" - OS
컨텍스트 스위칭(과정)
- 커널모드 전환
- pA의 id, pA에서 다음에 실행할 명령어의 주소, 레지스터 값, 상태 등을 PCB에 저장 (CPU내부에 존재하는 PC, 레지스터 값 저장 )
- pB의 id, pB에서 다음에 실행할 명령어의 주소, 레지스터 값, 상태 등을 담은 PCB를 로드
CPU의 PC에 따라 pB 실행
"야호~" - pB
비용
- 유휴시간
컨텍스트 스위칭을 하면서 실행하지 못하고 대기하는 시간 - 캐시미스
컨텍스트 스위칭을 하면서 이전 프로세스가 가지고 있던 메모리 주소가 그대로 있다면, 잘못된 주소 변환이 생길 수 있으므로 캐시클리어 과정을 거침
이 때문에 캐시미스가 발생함
프로세스 상태
PCB는 프로세스가 메모리에 적재되기 전에 생성되고 초기화되며, 프로세스의 전체 생명주기 동안 중요한 정보를 유지하고 관리하는 데 사용된다.
프로세스 생성
프로세스 생성 전, 운영체제는 초기 정보가 담기도록 PCB를 생성함
프로세스의 코드와 데이터가 필요로 하는 메모리가 할당되며, 이때 메모리 관리 정보가 PCB에 업데이트 됨
프로세스 준비
메모리에 적재되어, CPU의 할당을 기다리는 상태
CPU의 할당을 받으면, 바로 시작할 수 있는 상태
프로세스 실행
CPU를 할당받아 명령을 수행중인 상태
준비 상태에서 실행 상태로 전환되는 것을 dispatch
라 함
대기 상태에서 실행 상태로 전환되는 것을 wake up
이라 함
프로세스 대기
CPU를 할당받아도 명령을 수행할 수 없는 상태
대표적으로, I/O 작업을 기다리는 상태