프로세스
프로세스의 개념
정의
실행 중인 프로그램. 현대의 시분할 시스템에서 작업의 단위
프로세스 상태
New : 프로세스가 생성 중
Running : 명령어들이 실행됨
Waiting : 프로세스가 어떤 사건(입출력 완료 혹은 신호의 수신)이 일어나기를 기다린다.
Ready : 프로세스가 처리기에 할당되기를 기다린다.
Terminated : 프로세스의 실행이 종료됨
프로세스 제어 블록
- 프로세스 상태
- 프로그램 카운터 : 해당 프로세스가 다음에 실행할 명령어의 주소를 가르킴.
- CPU 레지스터들 : CPU 레지스터는 컴퓨터의 구조에 따라 다양한 수와 타입을 가짐. 레지스터에는 누산기(accumlator), 인덱스 레지스터, 스택 레지스터, 범용 레지스터들과 상태 코드 정보가 포함됨. 특히 상태 정보는 프로세스가 계속 올바르게 실행되도록 하기 위해서, 인터럽트 발생 시 저장되어야 함.
- CPU - 스케줄링 정보 : 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수들을 포함
- 메모리 관리 정보 : 운영체제에 의해 사용되는 메모리 시스템에 따라 기준(base) 레지스터와 한계(limit) 레지스터의 값, 운영체제가 사용하는 메모리 시스템에 따라 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함.
- 회계(accounting) 정보 : CPU 사용 시간과 경과된 실시간, 시간 제한, 계정 번호, Jop 또는 Process 번호 등을 포함한다.
- 입출력 상태 정보 : 이 정보는 이 프로세스에게 할당된 입출력 장치들과 열린 파일의 목록 등을 포함한다.
프로세스 스케줄링
시분할의 목적은 각 프로그램이 실행되는 동안 사용자가 상호 작용할 수 있도록 프로세스들 사이에서 CPU를 빈번하게 교체하는 것이고, 이 목적을 달성하기 위해 프로세스 스케줄러는 CPU에서 실행 가능한 여러 프로세스들 중에서 하나의 프로세스를 선택.
스케줄링 큐
Jop Queue : 프로세스가 시스템에 들어오면 등록. 시스템 안의 모든 프로세스로 구성됨.
Ready Queue : 주 메모리에 존재하며, 준비 완료 상태에서 실행을 대기하는 프로세스들은 이 리스트 상에 유지. 일반적으로 연결리스트로 저장됨. 헤더는 리스트의 첫번째와 마지막 PCB(ProcessControlBlock)를 가르키는 포인터를 포함하고, 각 PCB는 준비 완료 큐에 있는 다음 프로세스를 가르키는 포인트 필드를 가진다.
스케줄러
일괄처리 시스템 : 즉시 실행될 수 있는 것보다 더 많은 프로세스들이 종종 제출됨. 이들 프로세스들은 대용량 메모리(전형적으로 디스크)에 저장되어 나중에 실행될 때까지 유지됨.
장기 스케줄러(잡 스케줄러)는 이 풀에서 프로세스들을 선택하여 실행하기 위해 메모리로 적재한다.
단기 스케줄러(또는 CPU스케줄러)는 실행 준비가 완료되어 있는 프로세스들 중에서 선택하여, 이들 중 하나에게 CPU를 할당.
프로세스에 대한 연산
프로세스 생성
생성하는 프로세스를 부모 프로세스, 새로운 프로세스는 자식 프로세스.
자식 프로세스들도 각각 다시 다른 프로세스들을 생성할 수 있으며, 그 결과 프로세스의 트리를 형성.
현대 운영체제들은 유일한 프로세스 식별자(pid)를 사용하여 프로세스를 구분 PID는 보통 정수이다.
프로세스 종료
프로세스가 마지막 문장의 실행을 끝내고, exit 시스템 호출을 사용하여 운영체제에게 자신의 삭제를 요청하면 종료됨.
프로세스는 자신의 부모 프로세스에게(wait 시스템 호출을 통해) 상태 값(통상 정수값)을 반환할 수 있다.
물리 메모리, 가상 메모리 열린 파일, 입출력 버퍼를 포함한 프로세스의 모든 자원이 운영체제로 반납된다.
연쇄식 종료(cascading termination) : 부모 프로세스가 종료되면 그 밑의 모든 자식 프로세스들도 종료된다.
프로세스간 통신
운영체제 내에서 실행되는 병행 프로세스들은 독립적이거나 또는 협력적인 프로세스들일 수 있다. 프로세스가 시스템에서 실행 중인 다른 프로세스들에게 영향을 주거나 받지 않는다면 독립적인 프로세스라고 말한다.
다른 프로세스와 데이터를 공유하지 않는 프로세스는 독립적이다.
프로세스가 시스템에서 실행 중인 다른 프로세스들에게 영향을 주거나 받는다면 이는 협력적인 프로세스이다.
프로세스 협력을 허용하는 환경을 제공하는 이유
- 정보 공유(Information sharing) : 여러 사용자가 동일한 정보에 흥미를 가질 수 있으므로, 그러한 정보를 병행적으로 접근할 수 있는 환경을 제공하기 위해
- 계산 가속화(Computation speedup) : 만일 사용자가 특정 작업(Task)를 빨리 실행하려면 Sub Task로 나누어, 이들 각각이 다른 Sub Task들과 병렬로 실행되게 해야 한다. 이러한 가속화는 여러 개의 처리 코어를 가진 경우에만 달성할 수 있다.
- 모듈성(Modularity) : 시스템 기능을 별도의 프로세스들 또는 쓰레드들로 나누어, 모듈식 형태로 시스템을 구성하기 위해
- 편의성(Convenience) : 개별 사용자들이 한 순간에 작업할 많은 Task를 가질 수 있다. ex) 한명의 사용자가 편집, 음악듣기, 컴파일 등을 병렬로 하기 위해서
협력적 프로세스들은 데이터와 정보를 교환할 수 있는 프로세스간 통신(interprocess Communication, IPC) 기법을 필요로 함.
공유 메모리(Shared Memory) : 협력 프로세스들에 의해 공유되는 메모리의 영역이 구축.
메시지 전달(Message Passing) : 통신이 협력 프로세스들 사이에 교환되는 메시지를 통하여 이루어짐.