참고 : [Course] Operating System (CPA310) - 운영체제 강의
[ 운영체제 4강. 프로세스 관리 ]
Process Management ( 프로세스 관리 )
1. Job vs Process
(1) Job (작업) / Program
- 실행할 “프로그램 + 데이터”를 묶어놓은 것
- “실행 전”의 상태
(2) Process (프로세스)
- “실행을 위해 커널에 등록”된 작업
- 시스템 성능 향상 위해 커널에 의해 관리됨
2. Process에 대한 정의
“실행 중인 프로그램”
- 커널에 등록되어 (관리되고) 있음
- 각종 자원을 요청하고, 할당 받을 수 있는 개체
- 프로세스 관리 블록 (PCB)을 할당 받은 개체
- 능동적인 개체 ( active entity )
다양한 종류의 프로세스
3. Resource(자원)의 개념
“커널의 관리 하에, 프로세스에 할당/반납되는 수동적 개체(passive entity)”
-
자원은 프로세스에 할당되고
프로세스는 이를 사용하여 작업을 처리함!
-
누가 관리? KERNEL
자원의 분류
- 1) HW 자원 ( 프로세서, 메모리, 디스크, 모니터 등 )
- 2) SW 자원 ( 메세지, 시그널, 파일 등 )
4. Process Control Block(PCB)
-
프로세스를 컨트롤(관리)하기 위한 정보를 모아둔 블록
-
프로세스가 생성될 떄, 함께 생성된다
( = 프로세스가 생성된다 = 커널에 PCB가 생성된다 )
-
PCB는 OS 별로 서로 다르다!
( OS의 성능을 결정 짓는 중요한 요소 )
PCB가 관리하는 정보
- PID (프로세스 고유 식별 번호)
- 스케줄링 정보
- 프로세스 상태
- 메모리 관리 정보
- 입출력 상태 정보
- 문맥 저장 영역
- 계정 정보
5. Process States (프로세스의 상태)
프로세스 : “자원 간의 상호작용”에 의해 결정된다
프로세스 상태 및 특성
Process State Transition Diagram
(1) Created State
-
작업이 커널에 등록된 상태
( PCB 할당되어 있음 / 프로세스가 생성됨 )
-
create된 이후, 2가지 가능성
사용할 수 있는 메모리 공간이 있느냐에 따라 결정!
- 1) ready : 자원(메모리) 할당 O
- 2) suspended ready : 자원(메모리) 할당 X
(2) Ready State
-
프로세서 외에, 다른 모든 자원을 할당 받은 상태
-
아직 실행된 것은 아님! ( 실행 가능 상태)
( 즉, CPU(프로세서) 할당 대기 상태라고 볼 수 있음)
-
“Dispatch ( Schedule )”
- Ready 상태에서 Running 상태가 되는 것!
(3) Running State
-
실제로 실행되는 상태!
( 프로세서 & 필요한 자원 모두 할당 받음 )
-
Running 벗어나는 2가지 가능성
-
1) Preemption : Running -> Ready
- 프로세서 뺏김!
- 원인 : 프로세서 스케줄링 ( time-out, priority change … )
-
2) : Block/Sleep : Running -> Asleep
-
원인 : I/O 등 자원 할당 요청
-
Asleep 상태 끝나고 곧바로 다시 Running으로?
일반적으로 NO! Ready 거쳐서 다시 Running
-
-
(4) Blocked / Asleep State
- 프로세서 외에 다른 자원을 기다리는 상태
(5) Suspended State
- 메모리 할당 못받은/뺏긴 상태
- 그럼, 지금까지의 메모리 이미지는..? SWAP device에 보관
(6) Terminated / Zombie State
- 프로세스 수행이 다 끝난 상태
- 모든 자원 반납 후, 커널 내에 일부 PCB 정보만 남아있음
6. 인터럽트 (Interrupt)
-
인터럽트 = “예상치 못한, 외부에서” 발생한 이벤트
-
다양한 종류의 인터럽트가 있다 ( I/O, Clock, Console, Program Check, … interrupt )
(1) 인터럽트 처리 과정
[ 시간 순서 ]
-
1) 인터럽트가 발생하면, 커널이 개입!
-
2) 잠시 프로세스를 중단시킨다! 이때, Context Saving이라는게 발생한다. ( Context Saving : 지금까지의 과정을 저장하는 과정 )
-
3) Interrupt Handling : 인터럽트의 WHERE/WHY 파악
-
4) Interrupt Service : 이를 처리하기 위해, 어떤 service routine을 호출해야하는지 결정
-
5) Ready 상태에 있던 다른 프로세스를 Processor로 불러옴! ( Context Saving되어 있던 다른 애가 불러와 질 수도! )
(2) Context Switching (문맥 교환)
- Context : 프로세스 관련 정보 집합
- CPU 안에…. CPU register context
- Memory 안에…. code / data / stack / pcb
-
Context Saving : 현재 프로세스의 register context를 저장
-
Context restoring : register context를 복구
- Context switching ( = Process switching ) : 실행중인 프로세스의 context 저장 & 이후에 실행한 프로세스의 context 복구
Context Switch Overhead
Context Switching에 소요되는 비용은 OS마다 다르다!
불필요한 Context Switching은 잘 줄이자!
- ex) thread 이용