프로세스
프로세스란?
- '보조기억장치'에 저장되어 있는 프로그램이, '메모리'에 적재되어 실행되면 이를 프로세스라 한다
- 사용자가 볼 수 있는 공간에서 실행되는 '포그라운드 프로세스(foreground process)'와, 사용자가 볼 수 없는 뒤편에서 실행되는 '백그라운드 프로세스(background process)'가 있다
- 백그라운드 프로세스 중에서 사용자와 상호작용하지 않고 정해진 일만을 수행하는 프로세스를 데몬(daemon, unix) 혹은 서비스(service, window) 라고 부른다
프로세스의 상태(Process Status)
- 프로세스는 '준비 상태', '실행 상태', '대기 상태', '보류 대기&준비 상태' 를 가질 수 있다
- 이는 프로세스가 실행되고, I/O Interrupt 등에 의해 대기되고, 종료되는 상태들을 의미한다
프로세스 제어 블록(PCB, Process Control Block)
프로세스 실행에서의 문제와 OS의 역할
- 모든 프로세스는 실행되기 위해 CPU가 필요하지만 CPU 자원은 한정되어 있다
- 따라서 OS는 프로세스들이 차례대로 돌아가며 한정된 시간만큼만 CPU를 이용하도록 하고, 프로세스가 CPU를 이용하고 있을 때 자신의 차례가 끝나면 이를 알리는 인터럽트(타이머 인터럽트)를 발생시켜 차례를 끝낸다.
(이때 타이머 인터럽트, 혹은 타임아웃 인터럽트는 '클럭 신호'를 발생시키는 장치에 의해 발생하는 '하드웨어 인터럽트'이다) - OS는 이러한 프로세스들의 실행 순서 관리와 CPU 자원 배분을 수행하기 위해 프로세스 제어 블록(PCB)를 이용한다
프로세스 제어 블록(PCB, Process Control Block)
: PCB는 프로세스와 관련된 정보를 저장하는 자료구조로, 커널 영역에서 생성된다. OS는 PCB를 통해서 수많은 프로세스들 사이에서 특정 프로세스를 식별하고 관리한다. PCB에 저장되는 정보는 다음과 같다
- PID(Process ID)
- 특정 프로세스를 식별하기 위해 부여하는 고유 번호
- 같은 프로그램이라 할지라도, 여러 번 실행되면 각각 다른 PID를 지닌 프로세스가 여러 개 생성된다
- 레지스터 값
- 프로세스는 실행이 중단되었다가 다시 실행될 때, 이전까지 실행됐던 레지스터의 중간값들을 모두 복원하는 과정을 통해 작업을 이어서 실행한다
- 따라서 PCB 내부에서 프로세스가 실행하며 사용했던 프로그램 카운터를 비롯한 중간 값들을 레지스터 값이라 한다
- 프로세스 상태
- 현재 프로세스가 입출력 장치를 사용하기 위해 기다리고 있는 상태인지, CPU를 사용하기 위해 기다리는 상태인지, 이용하고 있는 상태인지 등을 나타낸다
- CPU 스케줄링 정보
- 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
- 메모리 관리 정보
- 프로세스가 메모리상 어디에 저장되어 있는지에 대한 정보
- 베이스 레지스터, 한계 레지스터 값, 페이지 테이블 정보 등이 담긴다
- 사용한 파일과 입출력장치 목록
- 프로세스가 실행 과정에서 특정 입출력장치나 파일을 사용한다면 그 정보가 명시된다
- 즉, 어떤 입출력 장치가 이 프로세스에 할당되었는지, 어떤 파일들을 열었는지에 대한 정보가 기록된다
문맥 교환(Context Switching)
문맥(Context)이란?
- 하나의 프로세스가 실행이 완전히 끝나지 않았을 때 다른 프로세스로 실행 순서가 넘어간다면, 기존 프로세스로 다시 실행 순서가 넘어왔을 때 기존에 처리하던 작업을 이어해야 할 수 있어야 한다
- 이때 기존 프로세스를 이어서 실행하기 위해 필요한 정보를 문맥(Context)라고 한다. Context는 다음과 같은 정보들을 포함한다
- 프로그램 카운터를 비롯한 각종 레지스터 값
- 메모리 정보
- 실행을 위해 열었던 파일이나 사용한 입출력 장치 등
- Context는 대부분의 PCB에 포현되어 있기에, PCB의 정보들을 Context라고 봐도 무방하다
문맥 교환(Context Switching)
- 기존 프로세스의 문맥을 PCB에 백업하고 새로운 프로세스를 실행하는 작업, 그리고 기존 프로세스의 재실행을 위해 문맥을 PCB로부터 복구하여 기존 프로세스를 실행하는 일련의 작업들을 'Context Switching' 이라고 한다
- 이런 Context Switching은 굉장히 빠르게 실행되기 때문에, 사용자는 여러 프로세스들이 동시에 실행되는 것 처럼 느낀다
Reference
- 혼자 공부하는 컴퓨터구조 + 운영체제 (CH.10-1 프로세스 개요)