프로세스(Process)
1) 프로세스의 개념
- 프로그램이 주기억 장치에 적재되어 CPU에 의해 실행 과정에 있을 때 프로세스라고 부른다.
- 목적 또는 결과에 따라 발생되는 사건(프로시저)들의 과정이다.
- CPU가 할당되는 실체이며 PCB*가 정의하는 실체이다.
- *PCB(Process Control Block) : 프로세스들의 정보를 기록한 테이블
2) 프로세스 상태
(1) 프로세스 주요 상태
- 준비(Ready) 상태
- 기억 장치에 존재하는 프로세스를 선택하여 CPU의 할당을 기다리는 시점
- 프로세스의 대기 상태가 종료되어 다시 CPU의 할당을 기다리는 시점
- 실행(Run) 상태 : 대기 상태의 프로세스가 CPU를 할당받아 작업이 진행되는 상태
- 대기(Block) 상태 : 프로세스의 특정 작업을 진행하기 위해 입출력 작업 등을 기다리는 상태
- 종료(Exit) 상태 : 프로세스 실행이 완료되어 종료된 상태
(2) 상태 전이 과정
- Dispatch : 준비 상태의 프로세스가 실행 상태로 변하는 과정
- Time Run Out : 실행 상태의 프로세스가 할당된 시간을 다 사용했지만 아직 작업을 끝내지 못한 경우 다시 준비 상태로 넘어가는 과정
- Block : 실행 상태의 프로세스가 입출력에 의한 작업을 위해 대기 상태로 변하는 과정
- Wake Up : 입출력 등이 완료되어 대기 상태의 프로세스가 준비 상태로 변하는 과정
(3) 프로세스의 자원 이용 절차 : 프로세스는 운영체제의 자원을 요청, 사용, 해제하는 순으로 진행된다.
3) 인터럽트 처리(Interrupt Processing)
(1) 인터럽트 처리
- 프로세스 수행 중에 다른 프로세스를 수행하거나 외부 입력 장치에 의해 현재 수행 중인 프로세스를 중단되는 상태를 말한다.
- 잠시 중단된 프로세스의 상태는 다시 실행을 시작하기 위해 중단되었던 시점의 정보를 저장해야 한다.
- 입출력 연산, 하드웨어 실패, 프로그램 오류 등에 의해서 발생한다.
(2) 인터럽트 처리 절차
- 인터럽트 요청
- 프로그램 실행 중단 : 현재 실행 중이던 Operation까지 수행
- 현재의 프로그램 상태 보존 : PCB(Process Control Block), PC(Program Counter) 등에 저장
- 인터럽트 처리루틴 실행 : 인터럽트를 요청한 장치를 식별
- 인터럽트 서비스 루틴 실행
- 인터럽트 원인을 파악, 레지스터 상태를 보존
- 우선순위가 더 높은 인터럽트가 발생하면 또 다시 인터럽트를 수행
- 상태 복구 : 인터럽트 발생 시 저장해둔 PCB, PC를 통해 복구
- 중단된 프로그램 실행 재개 : 이전에 수행 중이던 프로그램을 재개
(3) 인터럽트의 종류
- 외부 인터럽트
- 전원 이상(Power fail) 인터럽트 : 정전이나 전원공급장치의 이상
- 기계착오(Machine check) 인터럽트 : CPU 등의 기능적 오류
- 입출력(Input Output) 인터럽트 : 입출력 데이터의 오류
- 내부 인터럽트
- 프로그램 검사(Program check) 인터럽트 : 잘못된 명령어나 데이터를 사용
- 소프트웨어 인터럽트
- SVC(SuperVisor Call) 인터럽트 : 명령의 요청에 의해서 발생
4) PCB(Process Control Block)
(1) PCB의 개념
- 운영체제가 프로세스에 대한 정보를 기록한 테이블로 Process 대신 Task나 Job을 사용하기도 한다.
- 각 프로세스가 생성, 제거될 때마다 고유의 PCB가 생성, 제거된다.
(2) PCB에 저장되어 있는 정보 : 프로세스의 고유 번호, 현재 상태, 포인터, 레지스터와 자원 정보, 스케줄링 정보, 입출력 상태 정보, 계정 정보 등이 저장되어 있다.
(3) 문맥 교환(Context Switching)
- CPU가 할당되는 프로세스를 변경하기 위해 현재 실행되는 프로세스의 상태 정보를 저장하고, 이후 실행될 프로세스의 상태 정보를 설정한 다음 CPU를 할당하여 실행하는 작업이다.
- 인터럽트가 발생한 경우, 진행 중인 프로그램의 재개(Resume)에 필요한 레지스터 문맥을 저장한다.
- Time Slice가 작을수록 문맥 교환수와 인터럽트 횟수, 오버헤드가 증가한다.
- Time Slice가 클수록 문맥 교환수와 인터럽트 횟수, 오버헤드가 감소한다.
5) IPC(Inter Process Communication)
(1) IPC의 개념
-
협력하는 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로를 뜻한다.
-
프로세스들의 자원 공유, 속도 향상, 모듈화, 편의성 증대에 활용된다.
-
메시지 교환(Message Passing) 방식과 메모리 공유(Shared Memory) 방식이 있다.
- 메시지 교환 : 메모리 보호를 위해 커널이 대신 데이터 전달, 안전하지만 성능이 떨어짐
- 메모리 공유 : 공유 메모리 생성. 성능이 우수하지만 동기화 문제 발생
6) 스레드(Thread)
(1) 스레드의 개념
- 프로세스 내에서의 작업 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램 단위이다.
- 하나의 프로세스에 하나의 스레드가 존재하는 경우에는 단일 스레드, 하나 이상의 스레드가 존재하는 경우에는 다중 스레드라고 한다.
- 프로세스의 일부 특성을 갖고 있기 때문에 경량(Light Weight) 프로세스라고도 한다.
- 스레드 기반 시스템에서 스레드는 독립적인 스케줄링의 최소 단위로서 프로세스의 역할을 담당한다.
- 동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능하다.
(2) 스레드 사용의 장점
- 하나의 프로세스를 여러 개의 스레드로 생성하여 병행성을 증진시킬 수 있다.
- 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율을 향상시킬 수 있다.
- 응용 프로그램의 응답 시간을 단축시킬 수 있다.
- 실행 환경을 공유시켜 기억장소의 낭비가 줄어든다.
- 프로세스들 간의 통신이 향상된다.
(3) 스레드의 분류
- 사용자 수준의 스레드
- 사용자가 만든 라이브러리를 사용하여 스레드를 운용
- 속도는 빠르지만 구현이 어려움
- 커널 수준의 스레드
- 운영체제의 커널에 의해 스레드를 운용
- 구현이 쉽지만 속도가 느림
(4) 멀티스레드 모델
- 커널 레벨 스레드
- 커널이 직접 생성하고 관리하는 스레드이다.
- 하나의 사용자 스레드가 하나의 커널 스레드와 연결되는 1대1 모델이다.
- 독립적으로 스케줄링이 되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 작업을 계속할 수 있다.
- 커널 레벨에서 모든 작업을 지원하기 때문에 멀티 CPU를 사용할 수 있다.
- 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업을 계속할 수 있다.
- 사용자 레벨 스레드
- 라이브러리에 의해 구현된 일반적인 스레드이다.
- 사용자 프로세스 내에 여러 개의 스레드가 커널의 스레드 하나와 연결되는 다대일 모델이다.
- 라이브러리가 직접 스케줄링을 하고 작업에 필요한 정보를 처리하기 때문에 문맥 교환이 필요 없다.
- 커널 스레드가 입출력 작업을 위해 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기 상태가 된다.
- 한 프로세스의 타임 슬라이스를 여러 스레드가 공유하기 때문에 여러 개의 CPU를 동시에 사용할 수 없다.
- 멀티 레벨 스레드
- 사용자 레벨 스레드와 커널 레벨 스레드를 혼합한 방식이다.
- 커널 스레드가 대기 상태에 들어가면 다른 커널 스레드가 대신 작업을 하여 사용자 레벨 스레드보다 유연하게 작업을 처리할 수 있다.
- 커널 레벨 스레드를 같이 사용하기 때문에 여전히 문맥 교환 시 오버헤드가 있어 사용자 레벨 스레드만큼 빠르지 않다.
- 빠르게 움직여야 하는 스레드는 사용자 레벨 스레드로 작동하고, 안정적으로 움직여야 하는 스레드는 커널 레벨 스레드로 작동한다.