[운영체제] 프로세스 개요, 관리
프로세스 개요
프로세스(Process) 개념
1960년대 멀틱스 시스템(Multics System) 설계자 처음 사용
이후 작업(Task)이란 용어와 함께 사용되며, 다양한 정의를 가짐
가장 일반적인 정의는 “실행 중인 프로그램”
- 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제의 제어를 받는 상태
- 해당 프로세스가 사용하고 있는 메모리 영역(자신의 주소 공간)이 존재함을 의미
- 프로세서 할당(점유) 시간과 메모리, 파일, 입출력장치 등의 자원이 필요하며, 자원은 프로세스 생성 및 실행 시 할당됨
- 현재의 활동 상태를 나타내는 프로그램 카운터와 프로세서의 현재 활동 (레지스터 내용) 포함
프로그램과 달리 프로세서는 메모리에 주소 공간을 갖는 능동적인 개체
실행 스택(Stack)
- 호출된 프로시저(함수)의 복귀 주소와 지역 변수 등의 일시적인 데이터를 저장하는 영역
실행 힙(Heap)
- 텍스트(코드) 영역과는 별도로 유지되는 자유 영역
데이터(정적 변수)
- 프로세스 실행 중 동적으로 할당 받는 영역, 전역 또는 정적 변수 저장
텍스트(코드)
- 프로세서가 실행하는 코드 저장
재진입 프로그램(재진입 코드)
- 메모리 내에 동일한 사본을 여러 사용자가 공유할 수 있도록 작성된 프로그램 또는 루틴
- 실행 중 사용할 데이터를 보관하는 실행 스택과 공통적인 데이터를 보관하는 데이터 영역을 가짐
- 프로세서가 동일한 프로그램을 사용하여도 텍스트(코드) 영역은 같으나 별도의 스택에 서로 다른 데이터를 가지므로 별개의 프로세스로 인식됨.
- 데이터베이스, 문서 편집기 등
프로세스는 사용자 관점에서 세그먼트(코드, 데이터, 스택 등)의 가상 주소 공간을 갖는 상태를 의미, 시스템 관점에서 실행중인 프로그램을 의미
- 처리 상태에 있는 데이터 구조로 표현 가능
- 스케줄러(디스패칭)에 의해 프로세서 할당
- 파일에 관련된 자원에 대한 참조(장치 관리, 메모리 관리)
- 프로세스 지원과 협력에 관한 정보(교착상태, 보호, 동기화) 교환
- 프로세스 관련 연산은 생성, 종료, 보류, 자원 할당, 해제 등
프로세스 관리
프로세스 종류
실행 유형에 따라 크게 3가지로 구분
운영체제 프로세스
- 커널 프로세스 또는 시스템 프로세스라 부름
- 프로세스 실행 순서 제어, 사용하고 있는 프로세스가 다른 사용자나 운영체제 영역을 침범하지 못하게 감시하는 기능 담당
- 사용자 프로세스 생성, 입출력 프로세스 등 시스템 운영에 필요한 작업 수행
사용자 프로세스
- 사용자 코드 수행
병행 프로세스
- 프로세스 여러 개가 동시에 실행되며, 독립 프로세스와 협동 프로세스로 구분
- 독립 프로세스
- 프로세스 여러 개가 병행하여 수행 시 주어진 초기값에 따라 항상 같은 결과를 보여줌
- 서로 독립적으로 실행되어 다른 프로세스에 영향을 받지 않고, 데이터를 공유하지 않음
- 협동 프로세스
- 다른 프로세스에 영향을 주거나 다른 프로세스에 의해 영향을 받음
- 컴퓨터 시스템의 제한된 자원을 공유하는 프로세스들이 통제되어 상호 작용해야 하는 경우 발생
- 서로 협동해야 하는 경우, 통신을 위한 수단과 동기화 기능이 필요
프로세스 상태
실행과 비실행 프로세스로 구분
- 프로세스는 실행되며 상태가 변하므로 운영체제는 프로세스 제어에 필요한 프로세스 상태를 점검해야 함
- 운영체제가 프로세스를 새로 생성하면 비실행 상태로 초기화되어 실행을 기다림
- 실행 중인 프로세스 종료 또는 인터럽트 발생 시 비실행 프로세스 중 선택된 프로세스가 실행 상태로 변하고(디스패치) 인터럽트 된 프로세스는 비실행 상태로 변경
실행 상태 프로세스
- 실행 : 명렁어가 실행되는 상태, 즉 프로세스가 프로세서를 점유한 상태
- 대기 또는 보류 : 프로세서가 이벤트(입출력 종료와 같은 외부 신호)가 일어나길 기다리는 상태
- 준비 : 프로세스가 프로세서를 할당 받기 위해 기다리는 상태
대부분의 프로세스는 준비나 대기(보류) 상태이며, 어느 한 순간에 한 프로세스만 실행상태가 됨
프로세스 상태 변화
- 시스템의 모든 프로세스는 종료되어 시스템을 떠날 때까지 준비,실행, 대기(보류) 상태로 변화되 며 실행되는 과정을 반복
- 운영체제는 프로세서 스케줄러를 이용해 프로세스 상태 변화를 관리
작업 스케줄러
- 스풀러가 디스크에 저장한 작업들 중 실행할 작업을 선정, 준비 리스트에 삽입
- 이를 통해 다중 프로그래밍의 정도를 결정하는 핵심적인 역할 수행
- 선정한 작업에 대한 프로세스의 생성에서 종료까지의 과정 수행을 위해 아래 그림과 같은 상태 변화를 일으킴
프로세스 상태 변화
- 실행 프로세스가 자발적으로 프로세스 반환 전 할당된 시간이 경과하면 준비상태로 변경
- 실행 프로세스가 실행하다 입출력 명령이 발생 시 대기(보류) 상태로 변경
- 대기 프로세스는 보류 이유가 제거되면 준비 상태로 변경
- 준비 프로세스는 디스패처(Dispatcher)가 프로세서를 할당하면 다시 실행상태로 변경
준비 -> 실행
- 디스패치(Dispatch) : 준비 리스트 맨 앞에 있던 프로세스가 프로세서를 선택(배당되어 실행)하는 것
- 시간 할당
- 실행 프로세스가 프로세서를 일정 시간만 사용할 수 있도록 시간을 제한
- 특정 프로세스가 프로세서를 계속 독점하는 것을 방지함
dispatch(프로세스명) : 준비 -> 실행
실행 -> 준비
- 프로세스가 프로세서를 점유한 상태를 “프로세스가 실행 상태에 있다” 라고 함
- 운영체제는 프로세스의 독점을 방지하기 위해 인터럽트 클록(Interrupt Clock)을 둠
- 특정 프로세스가 일정 시간이 지나도(타임아웃) 프로세서를 반환하지 않으면 클록(Clock)이 인터럽트를 발생, 운영체제가 프로세서 제어권을 가짐
- 운영체제가 제어권을 가지면 실행 중인 프로세스는 준비 상태로 변화, 준비 리스트의 첫 프로세스가 실행 상태로 변경
timeout(프로세스명) : 실행 -> 준비
실행 -> 대기(보류)
- 실행 프로세스가 지정 시간 전에 입출력 연산 등이 필요하거나 새로운 자원 요청 등의 문제 발생 시 스스로 프로세서를 양도하고 대기 상태로 변경
block(프로세스명) : 실행 -> 대기(보류)
대기(보류) -> 준비
- 깨움(Wake up) : 프로세스의 마지막 상태 변화로 입출력 작업이 끝났을 때 발생
wakeup(프로세스명) : 대기(보류) -> 준비
프로세스 상태 변화 중 프로세스 스스로 하는 것은 보류뿐, 나머지는 외부 조건에 의해 발생
프로세스 제어 불륵(PCB, Process Control Block)
프로세스는 운영체제 내에서 프로세스 제어 블록이라 표현하며, 작업 제어 블록이라고도 함
- 프로세스를 관리하기 위해 유지되는 데이터 블록 또는 레코드의 데이터 구조
- 프로세스 식별자, 프로세스 상태, 프로그램 카운터 등의 정보로 구성
- 프로세스 생성 시 만들어지고 메인 메모리에 유지, 운영체제에서 한 프로세스의 존재를 정의
- 프로세스 제어 블록의 정보는 운영체제의 모든 모듈이 읽고 수정 가능
프로세스 제어 블록 그림
- 프로세스 식별자 : 각 프로세스에 대한 고유 식별자 지정
- 프로세스 상태 : 생성, 준비, 실행, 대기, 중단 등의 상태 표시
- 프로그램 카운터 : 프로그램 실행을 위한 다음 명령의 주소 표시
- 레지스터 저장 영역 : 누산기, 인덱스 레지스터, 범용 레지스터, 조건 코드 등에 관한 정보로 컴퓨터 구조에 따라 수나 형태가 달라짐
- 프로세서 스케줄링 정보 : 프로세스의 우선순위, 스케줄링 큐에 대한 포인터, 그 외 다른 스케줄 매개변수를 가짐
- 계정 정보 : 프로세서 사용시간, 실제 사용시간, 사용상한시간, 계정 번호, 작업 또는 프로세스 번호 등
- 입출력 상태 정보 : 특별한 입출력 요구 프로세스에 할당된 입출력장치, 개방된(Opened) 파일의 목록 등
- 메모리 관리 정보 : 메모리 영역을 정의하는 하한 및 상한 레지스터(경계 레지수터) 또는 페이지 테이블 정보
프로세스 교환
프로세스의 교환은 인터럽트와 트랩, 시스템 호출로 나타냄
- 실행 중인 프로세스가 인터럽트되어 운영체제가 다른 프로세스를 실행 상태로 변경, 제어를 넘겨줄 때, 프로세서의 레지스터 내용은 저장해야 함
- 프로세스는 현재 사용되는 자원에 대한 정보를 가지며, 실행되는 과정에서 여러 프로세스가 파생될 수 있는 능동적인 개체
- 프로그램은 프로세스 여러 개로 생성될 수 있는 디스크에 저장된 파일 내용으로 정적 단위
- 즉, 자원을 할당 받은 상태의 프로그램