프로세스 기술(description)
-
운영체제 ⇒ 컴퓨터 시스템에서 발생하는 사건들을 제어하면서 프로세스가 사용하는 시스템 자원들을 관리하는 개체

-
멀티프로그래밍 환경에서 가상메모리에 여러 프로세스들이 존재
-
P1
- 최소한 자신의 일부분은 주기억장치에 있으면서도 두 개의 입출력 장치에 대한 제어권을 가지고 수행중
-
P2
- P2 또한 주기억장치에 존재하지만 P1에게 할당된 입출력 장치를 얻기 위해 기다리면서 블록 상태에 있는 상태를 점선으로 표현
-
Pn
- 주기억장치로부터 스왑아웃(swap out) 된 상태가 점선으로 표시되어 있으며, 현재는 보류 상태
-
이렇듯 각각의 프로세스에는 상태가 존재하고, 이러한 상태를 운영체제는 계속해서 모니터링하고 자원들을 관리해야 할 필요성을 가짐
운영체제 제어 구조
- 운영체제는 각 개체(프로세스)에 대한 정보를 관리하기 위해 개체에 대한 정보를 테이블로 구성해서 유지
- 테이블의 구조

- 운영체제가 관리해야 할 서로 다른 4가지 타입의 테이블
- 메모리
- 입출력 장치
- 파일
- 프로세스
- 에 대한 정보들은 계속 유지
메모리 테이블
- 메모리 테이블은 주기억장치(실메모리)와 보조기억장치(가상메모리) 모두의 자취(track) 를 유지하기 위해 사용
- 메모리 테이블의 정보
- 프로세스에게 할당된 주기억장치
- 프로세스에게 할당된 보조기억장치
- 어떤 프로세스가 특정 공유 메모리 영역에 접근이 가능한 속성 등의 주기억장치/가상메모리 블록들에 대한 보호 속성
- 가상 메모리를 관리하기 위해 필요한 정보
입출력 테이블
- 입출력 장치와 컴퓨터 시스템의 채널들을 관리하기 위해 사용
- 특정 프로세스에 할당되어있는 경우/사용가능한 경우가 있으며 입출력 동작이 진행 중일 때 운영체제는 입출력 동작의 진행 상태와 입출력 전송의 출발지/목적지로 사용되는 주기억장치 내의 위치를 알아야함
파일 테이블
- 파일의 존재 여부와 보조기억장치에 저장된 파일의 위치, 현재 상태, 그 밖에 다른 속성들에 대한 정보가 저장됨
- 이러한 정보들은 대부분 파일 관리 시스템에 의해 유지되고 사용된다.
프로세스 테이블
- 프로세스 관리를 위한 테이블
- 각 프로세스들은 Hash로 연결된 연결리스트로 되어 있다.
- 메모리, 입출력, 파일 테이블 모두 프로세스를 위해 관리되는 테이블이기 때문에 프로세스 테이블은 이러한 자원들에 대한 참조가 직간접적으로 이루어져야 함
이러한 테이블들은 그림 상으로는 분리되어 있는 것처럼 보이지만 서로 어떤 식으로든 연결되거나 상호 참조되어야 함
프로세스 제어 구조
- 운영체제가 임의 프로세스를 관리하고 제어하기 위해 알아야 할 사항 ⇒ 프로세스가 어느 곳에 위치하고 있는지를 알고, 프로세스를 관리하는데 있어 필요한 속성들을 알아야 함
프로세스 제어블록과 이미지
- 프로세스는 수행될 하나의 프로그램 혹은 여러 프로그램 집합을 가지고 있어야 하며, 그 프로그램과 관련된 전역 및 지역 변수들, 미리 정의된 상수 등에 대한 데이터 위치들의 집합이 있어야 함
- 이렇게 구성된 프로세스는 프로그램 수행 시 프로시저 호출들의 트랙(track)과 프로시저들 간에 전달되는 매개변수, 호출 주소(복귀 주소) 등을 유지하는데 사용되는 스택이 필요하다.
- 이러한 속성들을 모두 담아 프로세스를 제어하기 위한 하나의 집합으로 만드는데, 이를 프로세스 제어블록이라고 함
- 프로그램과 데이터, 스택, 속성들의 집합을 프로세스 이미지라고 함
프로세스 이미지의 일반적인 요소들
- 사용자 데이터
- 사용자 공간에서 수정 가능한 부분
- 프로그램 데이터와 사용자 스택 영역
- 수정될 수 있는 프로그램
- 사용자 프로그램
- 수행 될 프로그램
- 시스템 스택
- 각 프로세스는 하나 이상의 시스템 스택을 가짐
- 스택은 프로시저와 시스템 호출에 필요한 매개변수와 호출 주소(복귀 주소)를 저장하는데 사용
- 프로세스 제어 블록
- 프로세스 식별
- 주 프로세스 테이블에 대한 인덱스 ⇒ 사상(mapping) 기법을 통한 프로세스 테이블 위치 파악
- 작업에 대해 책임지고 있는 사용자 지시
- 프로세스 상태 정보
- 레지스터 집합(프로그램 상태 워드, PSW, Program Status Word)
- 사용자가 사용 가능한 레지스터
- 제어 레지스터 및 상태 레지스터
- 스택 포인터
- 레지스터 집합(프로그램 상태 워드, PSW, Program Status Word)
- 프로세스 제어 정보
- 스케줄링과 상태 정보
- 자료구조화(Data Structuring)
- 프로세스간 통신(IPC)
- 프로세스 권한(Process Privileges)
- 메모리 관리
- 자원의 소유권과 이용률
- x86 EFLAGS 레지스터

- 프로세스 식별
프로세스 위치
- 프로세스 이미지의 위치는 어떤 메모리 관리 기법이 사용되는가에 따라서 달라짐.
- 간단하게는 프로세스 이미지를 메모리(보조기억장치, 디스크 등에서 관리)의 연속된 인접 블록에 위치시키고 운영체제는 프로세스 이미지의 일부를 주기억장치 내에 유지함으로써 프로세스를 관리
프로세스 제어 블록의 역할
- 프로세스 제어 블록들은 스케줄링, 자원 할당, 인터럽트 처리, 성능 측정과 분석 등에 관련된 모듈들을 포함하여 운영체제의 모든 모듈에 의해 읽혀지고 수정될 수 있음
- 따라서 프로세스 제어블록의 집합은 운영체제 상태를 정의한다고 말할 수 있음
- 이러한 설계의 문제점
- 운영체제 내에 있는 수많은 루틴들은 프로세스 제어블록에 있는 정보들을 접근할 필요가 있기 때문에 각 프로세스의 유일한 ID를 Index로 사용하여 정보들에 접근할 수 있음
- 하지만 이 과정에서 두 가지 문제점
- 인터럽트 핸들러와 같은 단일 루틴에서의 버그가 프로세스 제어블록에 손상을 줄 수 있고 결국 해당 프로세스를 관리하는 시스템 기능이 파괴될 수 있음
- 프로세스 제어블록의 구조와 의미(semantics)부분의 설계가 변경되면 수많은 운영체제 모듈이 영향받음
이러한 문제를 해결하는 법은 운영체제의 모든 루틴들에게 핸들러(handler)루틴을 통하도록 요구함으로써 프로세스 제어 블록을 보호할 수 있다.
핸들러 루틴 프로세스 제어블록을 보호하는 것으로 제어블록에 대한 읽고 쓰기 연산을 제어하는 유일한 조정자 역할을 한다.