- 프로세스는 일반적으로 프로세서(처리기, CPU)에 의해 처리되는 사용자 프로그램, 시스템 프로그램, 즉 실행중인 프로그램을 의미하며, 작업(Job), 태스크(Task)라고도 한다.
- 프로세스는 다음과 같이 여러 형태로 정의할 수 있다.
- PCB를 가진 프로그램
- 실기억장치에 저장된 프로그램
- 프로세서가 할당되는 실체로서, 디스패치가 가능한 단위
- 프로시저가 활동중인 것
- 비동기적 행위를 일으키는 주체
- 지정된 결과를 얻기 위한 일련의 계통적 동작
- 목적 또는 결과에 따라 발생되는 사건들의 과정
- 운영체제가 관리하는 실행 단위
- PCB는 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓는 곳으로, Task Control Block 또는 Job Control Block이라고도 한다.
- 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다.
- PCB에 저장되어 있는 정보는 다음과 같다.
저장 정보 설명 프로세스의 현재 상태 준비 대기실행 등의 프로세스 상태 포인터 - 부모 프로세스에 대한 포인터: 부모 프로세스의 주소 기억
- 자식 프로세스에 대한 포인터: 자식 프로세스의 주소 기억
- 프로세스가 위치한 메모리에 대한 포인터: 현재 프로세스가 위치한 주소 기억
- 할당된 자원에 대한 포인터: 프로세스에 할당된 각 자원에 대한 주소 기억프로세스 고유식별자 프로세스를 구분할 수 있는 고유의 번호 스케줄링 및 프로세스의 우선순위 스케줄링 정보 및 프로세스가 실행될 우선순위 CPU 레지스터 정보 Accumulator(누산기), 인덱스 레지스터, 범용 레지스터, 프로그램 카운터(PC) 등에 대한 정보 주기억장치 관리 정보 기준 레지스터(Base Register), 페이지 테이블(Page Table)에 대한 정보 입·출력 상태 정보 입출력장치, 개방된 파일 목록 계정 정보 CPU 사용시간, 실제 사용 시간, 한정된 시간
- 프로세스 상태 전이는 프로세스가 시스템 내에 존재하는 동안 프로세스의 상태가 변하는 것을 의미하며, 프로세스의 상태를 다음과 같이 상태 전이도로 표시할 수 있다.
- 프로세스의 상태는 제출, 접수, 준비, 실행, 대기 상태로 나눌 수 있으며, 이 중 주요 세 가지 상태는 준비, 실행, 대기 상태이다.
- 제출(Submit): 작업을 처리하기 위해 사용자가 작업을 시스템에 제출한 상태이다.
- 접수(Hold): 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장된 상태이다.
- 준비(Ready)
- 프로세스가 프로세서를 할당받기 위해 기다리고 있는 상태이다.
- 프로세스는 준비상태 큐에서 실행을 준비하고 있다.
- 접수 상태에서 준비 상태로의 전이는 Job 스케줄러에 의해 수행된다.
실행(Run)- 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행되는 상태이다.
- 프로세스 수행이 완료되기 전에 프로세스에게 주어진 프로세서 할당 시간이 종료(Timer Run Out)되면 프로세스는 준비 상태로 전이된다.
- 실행중인 프로세스에 입·출력(I/O) 처리가 필요하면 실행중인 프로세스는 대기 상태로 전이된다.
- 준비 상태에서 실행 상태로의 전이는 CPU(프로세서) 스케줄러에 의해 수행된다.
- 대기(Wait), 보류, 블록(Block): 프로세스에 입·출력 처리가 필요하면 현재 실행중인 프로세스가 중단되고, 입·출력 처리가 완료될 때까지 대기하고 있는 상태이다.
- 종료(Terminated. Exit): 프로세스의 실행이 끝나고 프로세스 할당이 해제된 상태이다.
- Dispatch: 준비 상태에서 대기하고 있는 프로세스 중 하나가 프로세서를 할당받아 실행 상태로 전이되는 과정이다.
- Wake Up: 입·출력 작업이 완료되어 프로세스가 대기 상태에서 준비 상태로 전이 되는 과정이다.
- Spooling: 입·출력장치의 공유 및 상대적으로 느린 입·출력장치의 처리 속도를 보완하고 다중 프로그래밍 시스템의 성능을 향상시키기 위해 입·출력할 데이터를 직접 입·출력장치에 보내지 않고 나중에 한꺼번에 입·출력하기 위해 디스크에 저장하는 과정이다.
- 교통량 제어기(Traffic Controller): 프로세스의 상태에 대한 조사와 동보를 담당한다.
- 스레드는 프로세스 내에서의 작업 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위이다.
- 하나의 프로세스에 하나의 스레드가 존재하는 경우에는 단일 스레드, 하나 이상의 스레드가 존재하는 경우에는 다중 스레드라고 한다.
- 프로세스의 일부 특성을 갖고 있기 때문에 경량 (Light Weight) 프로세스라고도 한다.
- 스레드 기반 시스템에서 스레드는 독립적인 스케줄링의 최소 단위로서 프로세스의 역할을 담당한다.
- 동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능하다.
- 스레드의 분류
- 사용자 수준의 스레드
- 사용자가 만든 라이브러리를 사용하여 스레드를 운용한다.
- 커널 모드로의 전환이 없어 오버헤드가 줄어든다.
- 속도는 빠르지만 구현이 어렵다.
- 커널 수준의 스레드
- 운영체제의 커널에 의해 스레드를 운용한다.
- 한 프로세스가 운영체제를 호출할 때 전체 프로세스가 대기하지 않으므로 시스템의 성능을 높일 수 있다.
- 여러 스레드가 커널에 동시에 접근할 수 있다.
- 스레드의 독립적인 스케줄링이 가능하다.
- 구현이 쉽지만 속도가 느리다
- 스레드 사용의 장점
- 하나의 프로세스를 여러 개의 스레드로 생성하여 병행성을 증진시킬 수 있다.
- 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율을 향상시킬 수 있다.
- 응용 프로그램의 응답 시간(Response Time)을 단축시킬 수 있다.
- 실행 환경을 공유시켜 기억장소의 낭비가 줄어든다.
- 프로세스들 간의 통신이 향상된다.
- 스레드는 공통적으로 접근 가능한 기억장치를 통해 효율적으로 통신한다.