TCBE 2019. 4. 29. 17:43

3.1  프로세스란?


프로세스라는 용어를 정의하기 전에 1장과 2장에서 설명된 개념들을 다음과 같이 요약할 필요가 있다.


1. 컴퓨터 플랫폼은 처리기, 주기억장치, 입출력 모듈, 타이머, 디스크 드라이브 등과 같은 하드웨어 자원들의 집합으로 구성된다.


2. 컴퓨터 응용들은 어떤 업무를 수행하기 위하여 개발된다. 전형적으로 응용들은 외부 세계로부터 입력을 받아들여 처리한 다음 출력한다.


3. 주어진 하드웨어 플랫폼 상에 직접 응용들을 작성하는 것은 비효율적이다. 그 주된 이유는 다음과 같다.


a. 수많은 응용들이 동일 플랫폼 상에서 개발될 수 있다. 따라서 컴퓨터 다원들을 접근하기 위한 공통 루틴을 개발할 필요가 있다.


b. 처리기 자헤만으로는 제한된 멀티프로그래밍 지원을 제공한다. 동시에 여러 응용들이 처리기와 다른 자원들을 공유하도록 관리해 줄 수 있는 소프트웨어가 필요하다.


c. 여러 응용들이 동시에 활성화되어 있을때, 다른 응용들로부터 각 응용의 데이터, 입출력 사용, 다른 자원 사용 등을 보호할 필요가 있다.


4. 운영체제는 응용들에게 편리한 기능, 풀부하고 안전하고 일관성이 씨는 인터페이스를 제공하기 위해 개발되었따. 운영체제는 응용과 컴퓨터 하드웨어 사이에 존재하는 소프트웨어 계층으로 응용과 유틸리티를 지원한다.


5. 운영체제는 응용들에 의해 요청되고 접근될 수 있는 자원들에 대한 단일화도니 추상적 표현을 제공한다고 볼 수 있다. 여기서 자원이란 주기억장치, 네트워크 인터페이스, 파일 시스템등을 말한다. 운영체제가 응용들이 사용하도록 자원 추상체를 생성하게 되면, 그 사용도 관리해야 한다. 예를 들어, 운영체제는 자원의 공유나 보호를 지원할 수 있다.


    지금까지 응용, 시스템 소프트웨어, 자원들의 개념에 대해 살펴본 바, 이제 운영체제가 응용 수행을 어떻게 관리하는지 논의할 시점이다. 운영체제는 응용 수행을 관리함에 있어 다음을 지원한다.


-여러 응용들이 자원들을 이용할 수 있게 한다.


-여러 응용들 사이에 물리적인 처리기를 교체 할당하여 모든 응용들이 병행 진행되는 것처럼 보이게 한다.


-처리기와 입출력 장치들이 효율적으로 사용될 수 있게 한다.


-모든 현대 운영체제에서는, 한 응용의 수행이 하나 이상의 프로세스들의 존재에 대응하는 모델에 의존한다.



프로세스 및 프로세스 제어블록


2장에서 언급했던 프로세스에 대한 여러 정의를 정리하면 다음과 같다.


-수행중인 프로그램


-컴퓨터 상에 수행 중인 프로그램의 인스턴스


-처리기에 할당되어 수행될 수 있는 개체(entity)


-명령들의 순차 수행, 현재 상태, 연계된 시스템 자원들의 집합 등에 의해 특징지어지는 활성화 단위(a unit of activity)


프로세스는 수많은 요소들로 구성된 개체로도 생각될 수 있따. 프로세스의 두 필수적인 요소는 프로그램 코드(동일 프로그램을 수행하는 서로 다른 프로세스들이 공유할 수 있는 부분) 및 그 코드와 연계된 데이터의 집합이다. 처리기가 프로그램 코드를 수행한다고 가정하면, 그 수행중인 개체가 프로세스이다. 프로그램이 수행 중 특정 시점에 , 프로세스는 다음을 포함한 여러가지 요소들에 의해 유일하게 식별될 수 있다.


-식별자 : 각 프로세스를 다른 모든 프로세스로부터 구별하게 해주는 유일한 식별자


-상태 : 프로세스가 현재 수행 중이면, 그 프로세스는 수행 상태에 있다.


- 우선순위 : 다른 프로세스들에 대해 상대적인 우선순위 수준


- 프로그램 카운터 : 프로그램에서 다음에 수행될 명령어의 주소


- 메모리 포인터 : 프로세스와 연계된 프로그램 코드 및 데이터, 다른 프로세스들과 함께 공유되는 메모리 블록들에 대한 포인터를 포함한다.


- 문맥 데이터(context data) : 프로세스가 수행 중일 때, 처리기의 레지스터에 존재하는 데이터


- 입출력 상태 정보 : 미해결 입출력 요철, 프로세스에 할당된 입출력 장치(예를 들어, 테이브 드리아브),, 프로세스에 의해 사용중인 파일들의 리스트 등을 포함한다.


- 어카운팅 정보(accounting informantion, 과금정보) : 사용된 처리기 시간 및 클록 시간, 시간 제한, 계정 번호(account number) 등을 포함할 수 있다.



    위의 목록들의 정보는 전형적으로 프로세스 제어블록 이라는 자료구조에 저장되며, 프로세스 제어블록은 운영체제에 의해 생성되어 관리된다. 프로세스 제어블록의 주요 역할은, 수행 프로세스를 인터럽트한 후 나중에 그 인터럽트가 발생되지 않은 것처럼 프로세스 수행을 재개할 수 있도록 출분한 정보를 유지하는 것이다. 프로세스 제어블록은 운영체제로 하여금 다수의 프로세스를 지원하고 멀티 프로세싱을 제공할 수 있게 해 주는 주요 도구이다. 어던 프로세스가 은터럽트 될 때, 프로그램 카운터 및 처리기 레지스터들(문맥 데이터)의 현재 값이 해당 프로세스 제어블륵의 적절한 필드에 저장되고, 그 프로세스의 상태가 블록 또는 준비 등과 같은 값으로 변경도니다. 이제, 운영체제는 어던 다른 프로세스를 수행 상태로 만들게 되는데, 그 프로세스의 프로그램 카운터와 문맥 데이터를 처리기 레지스터로 적재하여 그 수행을 시작하게 된다. 따라서 프로세스는 프로그램 코드 및 관련된 데이터,그리고 프로세스 제어블록으로 구성 된다고 볼 수 있다. 단일 처리기 컴퓨터에서, 임의 시점에 단 하난의 프로세스만ㅇ니 수행 상태에서 수행된다.



프로세스 상태


직전에 설명하였듯이, 프로그램을 수행하기 위해 그 프로그램에 대한 프로세스 또는 태스크가 생성된다. 처리기 관점에서 볼 때, 처리기는 프로그램 카운터 레지스터(PC register) 값에 의해 결정된 순서에 따라 명령어들을 수행한다. 프로그램 계수기는 시간이 흐름에 따라 다른 프로세스들을 표현하는 다른 프로그램 내의 코드를 가리킬 수 있다. 개별 프로그램의 관점에서 프로그램의 수행은 자신에 속한 일련의 명령어들을 수행한다.

    개별 프로세스 행위의 특성은 그 프로세스를 위해 수행되는 일련의 명령어 리스트로 표현될 수 있다. 이러한 리스트를 프로세스의 궤적이라 할 수 있다. 처리기 행위의 특징은 다양한 프로세스들의 궤적이 어떻게 인터리빙 되는지를 보임으로써 표현될 수 있다.

    아주 간단한 예제를 생각해 보자. 그림 3.2 는 세개의 프로세스가 메모리 내에서 어떻게 배치되어 있는지를 보여 준다. 설명을 간단히 하기 위해 가상 메모리는 사용되지 않는다고 가정하자. 따라서 세 프로세스는 모두 주 기억장치에 완전히 적재도니 프로그램으로 표현될 수 있다. 이와 함께, 처리기를 한 프로세스로부터 다른 프로세스로 교체하여 주는 작은 디스패처 프로그램이 있따. 그림 3.3은 세 슾로세스 수행 초기에 생성된 궤적을 보여주고 있다.


프로세스 A와 A의 경우에는 수행된 처음 12개의 명령어들이 수록되어 있다.  프로세스 B의 경우 네 개의 명령어를 수행하는데, 네 번째 명령어가 입출력 연산을 요청하므로, B는 입출력 완료를 대기해야 한다고 가정하자.

    이제 이러한 궤적을 처리기 관점에서 살펴보자. 그림 3.4는 처음 52개 명령어 사이클(이해를 돕기 위해 명령어 사이클에 번호를 붙였다) 의 수행 결롸로 생성된