들어가기 앞서 개념을 요약해보자
1. 컴퓨터 플랫폼은 하드웨어 자원들의 집합으로 구성된다.
2. 컴퓨터 어플리케이션들은 어떤 업무를 수행하기 위해 개발된다.
3. 주어진 하드웨어 플랫폼 상에 직접 응용들을 작성하는 것은 비효율적이다.
운영체제는 어플리케이션 수행을 관리함에 있어 다음을 지원
1. 리소스를 여러 어플리케이션에서 사용할수 있다.
2. 프로세서가 여러 어플리케이션 간에 전환되므로 모든 작업이 진행 중인 것처럼 보인다.
3. 프로세서 및 I/O 장치를 효율적으로 사용할 수 있다.
프로세스의 두 가지 필수 요소
프로그램 코드
동일한 프로그램을 수행하는 서로 다른 프로세서들이 고유 할 수 있다.
해당 코드와 연결된 데이터 집합
프로세서가 프로그램 코드를 실행하기 시작할때, 우리는 이 실행 엔티티를 프로세스라고 부른다.
프로세스 요소
프로그램이 실행되는 동안 이 프로세스는 다음과 같은 여러 요소에 의해 식별될 수 있다.
1. 식별자(identifier): 각 프로세스에 대한 고유 식별자(숫자, 색인 항복)를 저장
2. 상태(state): 생성, 준비, 실행 중단 등의 상태를 표시
3. 우선순위(priority)
4. 프로그램 카운터(program counter) : 프로그램에서 다음에 수행될 명령어의 주소
5. 메모리 포인터(memory pointers): 공유되는 메모리 블록에 대한 포인터
6. 문맥 데이터(context data): 프로세스 수행 중, 처리기 레지스터에 존재하는 데이터
7. 입출력 상태 정보 (I/O status information)
8. 어카운팅 정보(accounting informantion,과금정보)
프로세스 컨드롤 블럭(process control block)
위 요소들은 프로세스 컨드롤 블럭이라는 자료구조에 저장된다.
주요 역할
1. 실행 중인 프로세스를 중단하고 나중에 중단이 발생하지 않은 것처럼 실행을 재개할 수 있다.
2. 운영체제에서 생성 및 관리 된다.
3. 여러 프로세서를 지원할 수 있는 핵심 도구이다(멀티 프로세싱)
개별 프로세스 행위의 특성은 그 프로세서를 위해 수행되는 일련의 명령어 리스트로 표현
1. trace(궤적)
2. Dispatcher(디스패처)
프로세스는 두 상태중 하나이다.
1. Runnig(수행)
2. Not-Runing(비수행)
운영체제는 새로운 프로세스를 생성할때, 그 프로세스에 대한 프로세스 제어 블록을 생성하고 그 프로세서를 시스템 내에 비수행 상태로 초기화 시킨다. 이제 프로세스는 존재하게 되며 운영체제 에게 알려져 자신이 수행될 기회를 기다린다.
큐잉 다이어그램(Queuing Diagram)
Queue는 수행되지 않는 프로세스가 기다리는 장소로 단일 큐 항목은 특정 프로세서의 프로세스 제어 블록(PCB)를 가리키는 포인터이다. 수행 중인 프로세스가 인터럽트되면 디스패처가 다음에 수행할 프로세스를 큐에서 선택해서 수행을 이어간다.
프로세스 생성(Process creation)
일반적으로 네가지 사건이 발생했을때 프로세스가 생성된다.
1. new batch job(새로운 일괄처리 작업)
운영체제가 새로운 작업을 처리할 준비가 되면, 다음에 수행할 일련의 작업제어 명령을 읽어 들인다.
2. Interactive Logon(대화영 로그온)
사용자가 터미널에서 시스템에 로그온 한다.
3. Created by OS to provide a service(서비스를 제공하기 위해 운영체제가 생성)
사용자가 대기 할 필요 없도록, 운영체제는 사용자 프로그램을 대신해 어떤 기능을 수행할 프로세스를 생성할 수있다.
4. Spawned by existing process(기존 프로세스에 의해 생성)
모듈화를 위해서 병렬성을 활용하기 위해, 사용자 프로그램은 많은 프로세스의 생성을 명령할 수 있다.
Process Spawning
운영체제가 어떤 프로세스의 명시적인(explicit)요청에 의해 새로운 프로세스를 생성한다.
하나의 프로세스가 다른 프로세스를 생성할떄 전자를 Parent process 후자를 child process라고 한다. 서로 통신하면서 협력할 필요가 있다.