[Operating System ③] 프로세스 개념 잡기
[Operating System ③] 프로세스 개념 잡기
HPC Lab 김덕수 교수님의 운영체제 강의를 정리한 내용입니다.
목차
[1] 프로세스란 무엇인가?
[2] 프로세스의 상태
- Created State
- Ready State
- Running State
- Blocked/Asleep State
- Suspended State
- Terminated/Zombie State
- 프로세스 관리를 위한 자료구조
[3] 인터럽트
[1] 프로세스란 무엇인가?
1-A. 프로세스?
간단히 말하자면 ‘실행중인 프로그램’이다
이번 시간에는 자세한 프로세스의 개념에 대해 알아보자
작업관리자 페이지에서 프로세스를 본 적이 있을 것이다.
1-B. 잡과 프로세스의 관계
Process를 이해하기 위해서 먼저 Job의 개념을 알아야 한다
-
Job
이란 프로그램과 해당 프로그램이 처리하는 데이터를 묶은 것으로, 간단히 말하자면Program
이다.-
Job
은 Disk에 보관되어 있으며 System에 요청되기 전의 상태를 말한다.
-
-
Process
란 특정Job
에 대한 실행 요청을 통해서, 해당Job
이 System에 등록된 상태를 말한다.- 즉, 실행하기 위해서 System에 등록된
Job/Program
- 즉, 실행하기 위해서 System에 등록된
-
Process
는 커널에서 관리된다.-
Process
들을 잘 관리해야 System을 효율적으로 관리하여 성능을 향상시킬 수 있기 때문
-
Disk에 저장된 Job을 System에 요청하여, System에 등록된 상태(Process)로 만든다
Disk에 존재할 때는 Job / Memory를 할당받으면 Process
1-C. 프로세스의 정의
프로세스는 다음과 같이 설명할 수 있다
- 커널에 등록된 Job
- 각종 자원을 요청/할당 받을 수 있는 개체
- PCB(프로세스를 관리할 수 있는 데이터 블록)을 할당 받은 개체
- 능동적 개체
1-D. 자원의 개념
Process는 다양한 자원을 사용하여 작업을 처리한다.
자원은 크게 HW와 SW로 나뉘는데,
OS가 이러한 자원들을 관리하며,
커널
의 관리하에 이러한 자원들이 Process
에 할당/반납된다.
1-E. PCB 프로세스 제어 블록
프로세스 제어 블록이란
프로세스를 제어하기 위해 필요한 정보를 모아놓은 공간을 말한다.
프로세스가 생성되면, 커널이 관리하는 영역에 해당 프로세스에 대한 PCB가 생성된다.
PCB는 다음과 같은 정보를 관리한다
- 각 프로세스의 고유 번호를 가지고 조작
- 스케줄링(어떤 프로세스를 먼저 처리할 것인지 등) 정보
- 현재 어떤 자원을 가지고 있고, 어떤 자원을 요청했는지
- 메모리 할당 받았는지
- 입출력 상태는 어떠한지
- 컨텍스트
-
다중사용자 시스템의 경우, 프로세스가 어떤 유저의 것인지 알기 위한 계정정보
- 이 때, PCB는 운영체제별로 다를 수 있다
- 프로세스는 PCB를 통해 관리되기 때문에, PCB를 참조하는 속도가 OS성능의 중요요소
[2] 프로세스의 상태
프로세스의 상태는 자원 간의 상호작용에 의해 결정된다.
프로세스 상태 변화 과정
2-A. Created State
Process가 생성된 상태
Job
을 System에 요청하여 커널에 등록이 되면
커널 내부에 해당 프로그램에 대한 PCB
가 할당되고 Process
가 생성된다.
이 때, 사용할 수 있는 메모리 공간
이 있는 지에 따라서, ready state(가용메모리 존재)
와 suspended state(가용메모리 부재)
로 각각 변화한다.
2-B. Ready State
가용메모리가 존재하여, Process가 메모리를 할당받은 상태를 말한다.
메모리를 이미 할당 받았기 때문에, 프로세스(CPU)만 있다면 실행 가능하다.
즉, CPU 할당을 기다리는 상태
할당을 받게 되면 running state
로 변화하며, 이 과정을 dispatch
혹은 schedule
되었다고 말한다.
2-C. Running State
Ready 상태이던 Process가 CPU를 할당받게 되면 Running 상태가 된다.
Running 상태의 Process는 상황에 따라 2가지 상태로 변화한다.
-
Preemption
: 다시ready
로 돌아가는 경우 할당된 시간이 종료되는 등의 이유로 CPU를 빼앗기게 되면 다시ready
상태로 돌아간다. -
Block/Sleep
: 자원할당의 요청하여 반응을 기다리는 상태 대표적인 예시로 I/O가 끝나기를 기다리는 경우가 있다.
I/O인터럽트가 들어오면, 할당받은 CPU를 반납하여 다른 Process가 사용할 수 있게 비워준다.
2-D. Blocked State
자원 할당 요청으로 Block/Asleep 상태가 되면,
요청에 대한 응답을 받는다고 해서 바로 running
상태로 돌아갈 수 없으며,
wakeup
과정을 통해, 다시 ready
상태로 돌아가 다음 CPU할당을 기다리게 된다.
자신의 차례가 되면 다시 running
상태가 된다.
Process 상태 변화 다이어그램
2-E. Suspended State
Created 상태에서 가용메모리가 부족하여 메모리를 할당받지 못하거나, Block/Asleep 상태에서 메모리공간을 뺏기게 되면 Suspended 상태가 된다
Swap-out과 Swap-in이란
Block/Asleep
상태가 되어 메모리를 빼앗기는 경우,
현재 Process가 어디까지 작업했는지 정보를 메모리 이미지로 저장한다.
해당 메모리 이미지를 SWAP DEVICE
에 저장해놓고(일종의 하드디스크)
CPU를 다시 할당 받으면, 저장해 둔 메모리 이미지를 복구해서 중간부터 다시 일을 시작한다.
-
SWAP OUT
: 메모리 뺏기는 거 -
SWAP IN
: 다시 할당받아서 메모리 복구
2-F. Terminated State
Process가 작업을 모두 끝낸 상태이다.
커널은 해당 Process
가 System에 다시 요청을 할 때를 대비하여, 커널에 해당 Process
의 PCB정보를 수집해 놓는다.
Process
는 모든 자원을 반납하고 PCB정보가 커널에 수집완료 되면 소멸된다.
2-G. 프로세스 관리를 위한 자료구조
ready
상태에서 running
상태로 들어가기 위한 리스크나,
asleep
상태에서 다른 자원들을 요청하는 리스트 모두 Queue
형태로 관리된다.
[3] 인터럽트
인터럽트는 2가지 키워드로 설명할 수 있다.
예상치 못한
, 외부에서 발생한 이벤트
즉, Process
가 외부로 부터 예상치 못한 방해를 받는 상황을 의미한다.
- 종류
-
I/O
: 배그할 때, 유저가 언제 마우스 클릭해서 총을 쏠지 프로세스는 모른다. 마우스가 클릭되면 프로세스에 이것을 알려줘야 함. -
Clock
: 시간 -
Console
: 콘솔창 입력 -
Program check
: 프로그램 문제 생기면 -
Machine check
: 하드웨어 문제 생기면 -
Inter-process
: 다른 프로세스가 찌르는거
-
3-A. 인터럽트 처리 과정
인터럽트는 그림과 같은 순서로 처리된다
-
핸들링
: 왜 인터럽트가 발생했으며, 해당 인터럽트를 처리할 것인지 무시할건지? -
서비스
: 해당 인터럽트를 처리하기 위해 실제로 취하는 행동
Pi라는 Process에서 Pj라는 Process로 context switching 되는 과정
-
Pi
가 수행되는 와중에 인터럽트가 발생 -
Kernel
이 개입해서Pi
를 중단시킴 -
Context saving
발생 :Pi
의 정보를PCBi
에 저장 -
Kernel
이 Pi에 대하여Interrupt handling
: 어디서 발생하였고, 왜 발생하였으며, 어떤Interrupt service
를 할지 결정 -
Interrupt service
:Pi
가 프로세서를 벗어나고,Interrupt service
를 처리하는새로운 Process
를 CPU에 할당 -
Interrupt service
가 완료되면, ready queue에 있는 process 중 하나를 CPU에 할당(Pi라는 보장 없음) - 이 때,
Pj
가 CPU를 할당받는다면, 미리 저장해 놓은PCBj
를 복구하고 기존 작업 이후부터 작업을 수행
3-B. Context Switching
Context란, Process가 바뀔 때 저장/복원되는 해당 Process에 관한 정보들을 말한다.
-
Context는 두 군데에 저장된다.
-
CPU
: CPU가 작업을 처리할 때는 반드시메인 메모리
에 있는 데이터를레지스터
에 올려서 실행하게 되는데, 작업 중 저장된 데이터 값들을register context
라 부른다. -
Main Memory
: 코드나 데이터 등의 정보가 저장된다.
-
-
Context saving
- 실행 중이었던
Process
가 CPU를 빼앗기면, 실행 되는 동안 CPU안에 저장되어 있던register context
를 저장해야 한다. - 해당
register context
는 메모리 공간(PCB)에 저장된다.
- 실행 중이었던
-
Context restoring
- 다시 CPU를 할당받은
Process
는 메모리의 PCB에 저장해 둔register context
를 복구하여 사용한다.
- 다시 CPU를 할당받은
-
Context switching
-
saving
과restoring
과정을 묶은 것을 말한다. - CPU를 차지하는 Process가 변화하면서, 서로 바뀌는 동작을 말한다.
-
switching
작업은Kernel
의 개입을 통해 이루어진다.
-
3-C. Context Switch Overhead
문맥 교환 작업은 가능한 한 적게 이루어져야 한다.
하나의 컴퓨터로 작업하는 Process가 많기 때문에, 실제로 switching
작업이 빈번하게 일어난다.
문맥교환은 OS성능에 영향을 주기 때문에, 이것을 최대한으로 줄이는 방법을 생각해야 한다.
대표적인 방법으로는 thread
를 이용하는 것이 있다.
다음시간에 thread에 대해 알아보자.
댓글남기기