CS/운영체제
Process(Process, Multi-Process, Context, Process State, PCB, Context Switching)
devculture309
2024. 12. 18. 11:58
반응형
1. 프로세스의 개념
- Program이 Memory에 적재되어 CPU에 의해 실행(연산)되는 것 ⇒ 프로세스 = 실행중인 프로그램
2. Multi-Process
1) 정의
- 2개 이상의 프로세스가 동시에 실행되는 것
- 이때 프로세스들은 CPU와 메모리를 공유하게 되며 이를 자원 공유라 함
- ‘동시에’라는 말은 동시성(Concurrency)과 병렬성(Parallelism) 두 가지를 의미함
- 동시성(Concurrency)
- CPU core가 1개
- 여러 process가 짧은 시간동안 번갈아 가면서 연산을 하게되는 시분할 시스템(time sharing system)으로 실행되는 것
- 병렬성(Parallelism)
- CPU core가 여러개
- 각각의 CPU core가 각각의 Process를 연산함으로써 Process가 동시에 실행되는 것
- 동시성(Concurrency)
2) 메모리 공유
- 각자의 메모리 영역
- 여러 프로세스들은 각자의 메모리 영역을 차지하여 동시에 메모리에 적재됨
3) CPU의 역할
- 하나의 CPU는 매 순간 하나의 프로세스만 연산할 수 있음
- CPU의 처리 속도가 매우 빠르기 때문에, 수 밀리초(ms) 이내의 짧은 시간 동안 여러 프로세스들이 번갈아 가며 CPU에서 실행할 수 있음 → 사용자 입장에서는 여러 프로그램이 동시에 실행되는 것 처럼 보임
- 이처럼 여러 프로세스들이 CPU의 작업 시간을 조금씩 나누어 사용하는 것을 시분할 시스템이라 함
4) 프로세스와 메모리
- 프로세스는 실행 중인 프로그램이며, 여러 프로세스가 동시에 실행되면서 메모리(RAM)에 적재됨
- 각 프로세스는 고유의 메모리 공간을 가지고 있으며, 운영체제가 각 프로세스의 메모리 공간을 관리하여 프로세스 간의 간섭이 발생하지 않도록 보호함
5) 메모리 보호(Memory Protection)
- 운영체제는 각 프로세스의 메모리 접근을 제어하여, 프로세스가 자신에게 할당된 메모리 공간 외 다른 공간은 접근하지 못하게 함
- 운영체제가 메모리를 보호하는 방법 중 하나는 메모리 관리 장치(Memory Management Unit, MMU)를 사용하는 것임
- MMU는 각 프로세스의 메모리 주소를 관리하고, 해당 프로세스가 접근할 수 잇는 메모리 영역을 설정해줌
6) Multi Process에서 CPU의 연산과 PC Register
- 프로세스 전환
- Process 1 실행: Process1이 진행될 때는 PC Register가 Process1의 code 영역을 가리킴
- Process 2 실행: Process2가 진행될 때는 PC Register가 Process2의 code 영역을 가리킴
⇒ CPU는 PC 레지스터가 가리키는 주소에 따라 해당 프로세스의 명령어를 읽어들이고 연산을 수행
2. 프로세스의 문맥(Context)
1) 프로세스 문맥의 정의
- 프로세스 문맥은 프로세스의 현재 상태를 정의하는 요소들의 집합으로, 다음과 같은 정보를 포함함
- 코드 실행 상태: 프로그램 코드의 어느 부분까지 실행되었는가
- 메모리 상태: 프로세스 메모리에 어떤 데이터가 저장되어 있는가
- 레지스터 상태: CPU 레지스터에 어떤 값이 저장되어 있는가
2) 문맥(Context)의 구성 요소
- CPU와 관련된 하드웨어 문맥
- Program Counter: 현재 실행 중인 프로세스의 코드에서 다음 실행할 명령어(어디까지 실행했고, 다음은 어딘지)를 가리킴
- 레지스터 값: 연산 결과 및 프로세스 실행 상태가 저장된 CPU 레지스터
- 프로세스의 주소 공간
- 코드 영역: 실행할 명령어가 저장된 영역
- 데이터 영역: 전역 변수와 초기화된 데이터가 저장된 영역
- 스택 영역: 함수 호출 및 지역 변수가 저장되는 영역
- 운영체제와 관련된 정보
- PCB (Process Control Block)
- 운영체제가 프로세스 정보를 관리하기 위해 사용하는 자료구조
- 프로세스 ID, 우선순위, 스케줄링 상태 등 포함
- Kernel Stack
- 프로세스가 커널 함수 호출 시 사용하는 스택 공간으로 프로세스 별로 관리함
- PCB (Process Control Block)
3) 문맥의 역할
- CPU에서의 실행 상태 파악: 현재 프로세스가 어디까지 실행되었는지 추적
- 문맥 전환(Context Switching)
- CPU가 다른 프로세스로 전환될 때 기존 프로세스의 문맥을 저장하고, 새 프로세스의 문맥을 복구하여 실행 재개
3. 프로세스의 상태 (State)
1) 프로세스 상태의 정의
- 상태는 프로세스의 현재 실행 상황을 나타탬
- 프로세스는 실행 중 상태가 변화하며, 운영체제가 이를 관리함
2) 주요 프로세스 상태
- Running (실행 중)
- 프로세스가 CPU를 점유하고 명령어를 실행 중인 상태
- Ready (준비 상태)
- 프로세스가 CPU를 사용하기 위해 대기 중인 상태
- 필요한 데이터는 메모리에 올라와 있으며, CPU가 할당되면 즉시 실행 가능한 상태
- 주로 Timer Interrupt로 인해 CPU를 다른 프로세스에 양보하면서 발생
- Blocked (대기 상태, Wait/Sleep)
- 프로세스가 CPU를 받더라도 즉시 실행 불가능한 상태
- 자신이 요청한 이벤트(I/O 완료, 디스크 데이터 로드 등)가 충족될 때까지 기다림
- 특징
- 프로세스가 자진해서 CPU를 반환
- 예시: 파일 읽기, I/O 작업 대기, 데이터가 메모리에 없어서 스왑 영역에서 가져와야 하는 경우
- New (생성 중)
- 프로세스가 생성 중이며, 아직 준비 상태(Ready)로 전환되지 않은 상태
- Terminated (종료):
- 프로세스의 실행이 완료되어 정리 중인 상태
3) 프로세스 상태도 (Suspended 미반영)
- New (생성 중)
- 프로세스가 생성된 초기 상태
- Admitted: 프로세스가 생성된 후, 메모리에 적재되어 Ready 상태로 전환됨
- Ready (준비 상태)
- 프로세스가 메모리에 적재되어 CPU 할당을 기다리는 상태
- Scheduler Dispatch에 의해 CPU가 할당되면 Running 상태로 전환됨
- Running (실행 중)
- 프로세스가 CPU를 점유하여 실행 중인 상태
- Timer Interrupt(할당 시간 만료) 시 Ready 상태로 돌아가며, I/O 또는 이벤트 대기가 필요할 경우 Waiting 상태로 전환됨
- 실행이 완료되면 Exit 상태로 전환됨
- Waiting (대기 상태, Blocked)
- 프로세스가 I/O 작업이나 특정 이벤트를 기다리는 상태
- I/O 또는 이벤트 완료 시 Ready 상태로 돌아가 CPU 할당을 기다림
- Terminated (종료 상태)
- 프로세스의 실행이 완료되어 시스템에서 제거되는 상태
4. PCB (Process Control Block)
1) PCB란?
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보의 집합(Context)
- 각 프로세스의 현재 상태와 필요한 자원 정보를 저장하는 구조체 형태로 관리
2) PCB의 주요 구성 요소
(1) 운영체제 관리 정보
- Process State: 프로세스의 현재 상태 (Ready, Running, Blocked 등)
- Process ID: 각 프로세스를 고유하게 식별하는 ID
- Scheduling Information: 스케줄링 관련 정보, 프로세스의 우선순위(Priority)
(2) CPU 수행 관련 하드웨어 값
- Program Counter: 프로세스가 실행 중인 명령어의 위치를 가리킴
- Registers: CPU 레지스터에 저장된 현재 값들
(3) 메모리 관련 정보
- Code, Data, Stack의 메모리 위치: 프로세스의 코드, 데이터, 스택이 저장된 메모리 주소 정보
(4) 파일 관련 정보
- Open File Descriptions: 프로세스가 열어둔 파일에 대한 정보
5. 문맥 교환 (Context Switching)
1) 문맥 교환(Context Switching) 이란?
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- 다중 프로세스 환경에서 CPU가 효율적으로 여러 프로세스를 처리할 수 있도록 하는 핵심적인 메커니즘
2) 문맥 교환 과정
- 현재 프로세스의 상태 저장
- CPU를 내어주는 프로세스의 현재 상태를 해당 프로세스의 PCB(Process Control Block)에 저장함
- 이 상태에는 Program Counter, 레지스터 값, 메모리 정보 등이 포함됨
- 새로운 프로세스의 상태 로드
- CPU를 새롭게 할당받는 프로세스의 PCB에 저장된 Context를 불러와 CPU의 레지스터와 Program Counter에 로드
- 이를 통해 새 프로세스는 마지막으로 중단된 지점에서 실행을 재개할 수 있습니다.
3) System Call과 Interrupt에 따른 Context Switch 여부
- System Call이나 하드웨어 Interrupt가 발생하면 CPU가 사용자 모드에서 커널 모드로 전환됨
- 이는 단지 프로세스가 운영체제의 기능을 요청하거나 하드웨어로부터의 신호를 처리하기 위해 커널 모드로 넘어가는 것이기 때문에 Context Switch가 아님
(1) Context Switch가 발생하지 않는 경우
- Interrupt나 System Call이 발생하여 사용자 프로세스 A가 커널 모드로 전환됨
- 운영체제의 기능을 수행한 후, 문맥 교환 없이 사용자 모드로 복귀하여 다시 사용자 프로세스 A가 실행을 이어감
- 이 경우에도 CPU 수행 정보 등 일부 Context는 PCB에 저장되지만, 실제 Context Switch가 발생하지는 않음
(2) Context Switch가 발생하는 경우
- 타이머 인터럽트나 I/O 요청 System Call로 인해 사용자 프로세스 A가 커널 모드로 전환된 후, 운영체제가 A 대신 다른 사용자 프로세스 B를 실행하기로 결정함
- 이때는 Context Switch가 발생하여, 사용자 프로세스 A의 상태를 PCB에 저장하고, 프로세스 B의 상태를 로드하여 실행이 전환됨
- 하지만, 문맥 교환 부담이 (1)에 비해 훨씬 큼
- 이는 A의 실행 상태를 저장하고, B의 상태를 불러와야 하기 때문(eg. cache memory flush)
반응형