본문 바로가기
CS/Operating System

[ OS 기초 ] 02. 프로세스 관리

by IM조이 2021. 6. 23.

1. 프로세스와 JOB의 차이
2. 프로세스의 정의와 종류
3. 관련 개념(자원, PCB)
4. 프로세스의 상태
5. 인터럽트와 문맥교환(context swithcing)

 

00 도입

프로세스를 아주 단순화하면 '실행의 주체'다. 평소 컴퓨터를 쓰다가 응답이 없을 때 ctrl+alt+delete 클릭해서 열어보는 작업관리자에서도 프로세스와 각 프로세스가 얼마나 cpu를 할당받고, 메모리를 사용하고 있는지 확인할 수 있다. 운영체제의 주 기능 중 하나인 프로세스 관리에 대해 알아보기 위해 먼저 프로세스란 무엇이며, 어떤 방식으로 프로세스가 동작하는지(프로그램이 실행되는지, 작업이 수행되는지) 이해한 뒤 인터럽트의 개념까지 살펴보았다.

 

01 프로세스

프로세스를 이해하려면 먼저 Job(작업)의 개념도 알아야 한다. 

Job(작업)
- 우리가 실행할 프로그램과 데이터를 묶어놓은 것(=프로그램)
- 디스크에 보관되어있고, 시스템에 실행 요청을 보내기 전의 상태

Process(프로세스)
- job 실행을 위해 운영체제의 커널에 등록된 상태
- 운영체제의 주요 기능이 모여있는 커널은 효율적으로 시스템을 사용하도록 관리해주는 역할을 한다. 커널에 등록하는 이유는 시스템 성능 향상 목적

 

02 프로세스의 정의 및 종류

프로세스는 "실행중인 프로그램", "커널에 등록된 작업" 이다.

좀 더 구체적인 설명을 덧붙이면,

  • 커널에 등록되어, 커널의 관리 하에 있는 작업
  • 각종 자원을 요청하고 할당받을 수 있는 개체
  • 프로세스 관리 블록 (PCB) 을 할당받은 개체
  • 능동적인 개체
    • 실행 중 자원을 요청, 할당, 반납할 수 있는 능동성을 갖고 있음

(PCB : 메모리에서 커널이 사용하는 공간에 있는 블록으로, 각 프로세스마다 생성되어 프로세스 정보를 갖고 있음)

프로세스의 종류
다양한 기준에 따라 프로세스를 분류할 수 있다.

- 역할 : 시스템 프로세스 / 사용자 프로세스
- 병행 수행 여부 : 독립 프로세스 / 협력 프로세스

 

03 관련 개념

프로세스를 이해를 위해 자원과 PCB의 개념을 먼저 잡으면 좋다.

자원
- 커널의 관리 하에 프로세스에 할당하거나 반납되는 대상, 수동적인 개체
- 프로세스는 자원을 할당 받아 이를 활용해 작업을 수행하는 능동적인 개체(할당 관리 : 커널)
- 자원의 종류에는 하드웨어 자원(cpu, 메모리, 디스크, 입출력장치 등)과 소프트웨어 자원(파일, 메시지, 신호 등)이 있음

PCB(Process Control Block)
- 프로세스 + 제어 + 블록(단위) : 프로세스를 제어하기 위해 필요한 정보를 모아놓은 블록
- 운영체제가 프로세스를 제어하기 위해 사용하기 때문에, 운영체제 별로 다를수있음
- PCB를 참조하고 갱신하는 속도가 운영체제의 성능을 결정짓는 중요한 요소 중 하나
- 프로세스가 생성되는 순간 커널 영역에는 PCB도 생성됨(위치는 메모리에서 커널이 사용하는 영역 내)
(참고 : 메모리에는 커널이 쓰는 영역과 프로세스들이 쓰는 영역이 있는데, PCB는 커널이 쓰는 영역에 저장된다)

PCB가 관리하는 정보
- 프로세스 고유 식별 번호
- 스케줄링 정보
- 프로세스 현재 상태 : 자원의 할당 정보와 요청 정보
- 메모리 관리 정보
- 입출력 상태 정보
- 문맥 정보 (context) : 프로세스의 레지스터 상태를 저장하는 공간
- (다중 사용자의 경우) 계정 정보

 

04 프로세스 상태

프로세스는 시스템에 등록되는 순간부터 다양한 상태를 거쳐 작업을 수행하게 된다. 이때 상태는, 자원과의 상호작용 상황이라 생각하면 된다. (아래는 간단한 흐름을 정리한 내용)

  • Created State : 작업을 커널에 등록한 상태
    • (메모리 할당이 가능하면) Ready State
      • (CPU 할당을 받으면 = dispatch 되었다) Running State
        • 실행되던 도중 I/O가 필요해지면 작업을 잠시 중단하고 I/O가 들어올 때까지 기다려야 한다(=block)
        • Asleep State : I/O를 기다리는 상태
        • Suspended Blocked : block되었을 때 메모리 공간까지 뺏긴 상황
        • 그러다 기다리던 I/O가 도착하면(wakeup)? 바로 Running State 로 전환되지 않음
          • 다시 Ready State로 이동해서, 남은 작업 수행을 위핸 CPU할당을 기다린다
            • CPU할당을 받은 이후 다시 Running State
            • 작업을 끝냈다 : Terminated
            • Zombie State : 작업을 끝낸 이후에 잠시 머무르는 상태
    • (메모리 할당이 불가능하면) Suspended Ready State

 

04-1 Created State
- 작업 수행을 위해 커널에 등록한 상태로, 프로세스가 생성되어 PCB도 등록된다
- 이제 작업 수행을 위한 메모리 할당이 가능한지의 여부에 따라 Ready 또는 Suspended Ready State로 이동한다

04-2 Ready State
- 메모리를 할당받았을 때 도달하는 상태, 프로세서(cpu)외의 모든 자원을 할당받은 상태
- cpu까지 할당 받으면(dispatch 되면, 스케줄 되면) Running State로 이동해 프로세스 실행 가능 상태가 된다

04-3 Running State
- 프로세스를 수행하는 상태
- Running State 에서 벗어나는 경우는 2 가지 : (1) Ready State로 이동 (2) Asleep State로 이동
(1) Ready State로 이동 = 프로세서를 빼앗기는 것 ( =Preemption )
- 프로세서 스케줄링에 의해 할당받은 시간이 만료되었을 경우
- 우선순위 변화에 의한 경우
(2) Asleep State로 이동 = I/O가 필요해 작업이 중단되는 것( =Blocked )
- 비유하자면, 은행에 가서 일을 처리하다가 필요한 인감 도장을 놓고온 상태 ... 빨리 가져와야 다음 일 진행 가능
- 작업이 blocked 되면, 대기 상태로 이동한다 ( Suspended Blocked State )

04-4 Blocked, Asleep State
필요한 I/O 데이터가 들어오게 된다(=wakeup)고 해서 바로 Running State 로 이동하지 않는다는게 핵심
- blocked 되면, 해당 프로세스가 할당받은 프로세서와 메모리도 빼앗기게 되어 작업을 이어나가려면 재할당 받아야 함
- Ready 상태로 이동해 프로세서 할당을 위해 대기한다

04-5 Suspended State
Suspended = 지연된
- Suspended Ready State : 메모리가 없어 지연
- Suspended Blocked State : blocked 되어 갖고 있던 메모리를 빼앗김

단, blocked 되어 메모리를 빼앗길 경우 추후 다시 작업을 수행할 때 이전에 멈췄던 지점에서 다시 실행하려면 중단된 시점의 메모리 상태를 정보로 갖고 있어야 한다. 마치 해당 시점의 메모리를 사진으로 캡쳐해 저장해두는 것처럼 이를 memory image라고 부른다.
- 이 memory image 는 일종의 하드 디스크인 swap device 라는 곳에 저장해둔다
  swap-out : swap device에 보관하는 것
  swap-in : swap device에서 불러와 이전 메모리 상태로 돌아가는것(=메모리에 다시 올리는 것):  resume

04-6 Terminated, Zombie State
작업을 완료하면 프로세스가 종료해 소멸한다. 단, 이때 Terminated State(=Zombie State) 상태에 들렸다가 소멸되는데 이 과정에서 커널은 PCB 정보를 수집한다. ( 추후 더 효율적으로 자원을 사용하기 위해 정보를 수집 ) 따라서 이 상태에는 PCB 정보만 남아있고 모든 자원은 반납한 상태에 해당한다.

 

이처럼 프로세스는 여러 상태를 거치게 되는데, 각 상태마다 프로세스를 잘 관리하기 위한 자료구조가 필요하다. 예를 들어, 대기 상태에 놓인 프로세스 관리를 위해서는 ready queue, I/O queue, Device queue 등이 있다.

 

05 인터럽트와 문맥교환

인터럽트를 단적으로 표현하면 (1) unexpected : 예상치 못한, (2) external events : 외부의 자극 이다. 마치 가만히 있는 나를 친구가 옆에서 쿡 찌르는 상황을 인터럽트라고 볼 수 있다.

05-1 인터럽트의 종류

  • I/O 인터럽트
  • Clock 인터럽트
  • Console 인터럽트
  • Program 인터럽트
  • Machine 인터럽트
  • Inter-process 인터럽트
  • System call 인터럽트

 

05-2 인터럽트 처리과정
인터럽트가 생기면 커널이 개입한다 > 잠시 프로세스를 중단하고 인터럽트를 처리한다 (Interrupt Handling)
- 프로세스 중단할 때, 지금까지의 작업 흐름을 context saving으로 PCB에 저장해둔다

(1) 1 단계 - Interrupt Handling : 어디서, 왜 발생했는지 파악하고 이를 처리할지 무시할지 결정
(2) 2 단계 - Interrupt Service : 인터럽트를 처리하는 단계(처리도 하나의 프로그램이기때문에 또 프로세서가 할당됨)

서비스가 끝나고 나면, 비어있는 프로세서에 레디 상태에 있던 프로세스가 올라온다. (중단된 프로세스가 항상 올라오는 건 아니라는 점 명심) 만약 중단되었던 프로세스가 다시 올라오면, context restoring 을 통해 자신이 하던일을 이어서 수행해나간다.

 

05-3 문맥교환(context Switching)
context : 문맥, 흐름 -> 여기서는 프로세스 관련 정보들의 집합이라 생각
- cpu register context in cpu : (모든 데이터는 레지스터에 등록되어있어야 하기 때문에) cpu 레지스터 문맥
- code and data, stack, pcb in memory : 메모리에 저장된 문맥

다시 정리하면, interrupt 로 인한 프로세스 중단 상태에서는 cpu를 빼앗기게 되기 때문에, cpu안에 있던 내용도 저장해둬야 나중에 복구할 수 있다. 보통 cpu register context 를 메모리의 PCB에 저장한다. (= context saving) 이후 다시 프로세스를 수행하게 되면, context restoring 을 통해 레지스터의 문맥을 프로세스로 복구한다.
context switching은 process switching, 즉 프로세스가 바뀌는 것을 의미한다. 이는 지금까지 실행중이었던 프로세스의 문맥을 저장하고, 다음에 실행할 프로세스의 문맥을 복구하는 작업을 의미한다. ( 커널이 개입해서 )

 

05-4 context switching overhead
운영 체제마다 스위칭에 들어가는 비용이 다른데, 우리가 사용하는 컴퓨터는 보통 여러 프로세스를 실행한다. 그래서 스위칭이 자주 발생하게 되므로 스위칭에 들어가는 비용이 클수록 성능에 미치는 영향도 크다. 따라서 불필요한 문맥교환을 줄이는 게 좋은데 이 방법 중 대표적인 것이 스레드 활용이다.

 

 

**  KOREATECH 무료 OS강의(클릭) 학습 후 나름대로 이해한 뒤 정리한 내용입니다. **

 

[Course] Operating System (CPA310) - 운영체제 강의

o Operating System (운영체제), CPA310, KOREATECH o Instructor: Duksu Kim (김덕수) o Course homepage: https://sites.google.com/view/hpclab/courses/operating-system 운...

www.youtube.com

 

'CS > Operating System' 카테고리의 다른 글

[ OS 기초 ] 04. 프로세스 스케줄링  (0) 2021.06.24
[ OS 기초 ] 03. 스레드 관리  (0) 2021.06.23
[ OS 기초 ] 01. OS개요(2)  (0) 2021.06.21
[ OS 기초 ] 01. OS개요  (0) 2021.06.20
[ OS 기초 ] 00. CS 개요  (0) 2021.06.17

댓글