Download presentation
Presentation is loading. Please wait.
1
운영체제 (Operating Systems)
프로세스 개념 (Process Concept) 문양세 강원대학교 IT대학 컴퓨터과학전공
2
강의 목표 프로세스 개념을 이해한다. 스케줄링, 생성 및 종료, 통신 등 프로세스의 다양한 특성을 이해한다.
프로세스(Processes) 프로세스 개념을 이해한다. 프로세스는 실행 중인 프로그램으로 모든 컴퓨팅 연산의 기본을 형성한다. 스케줄링, 생성 및 종료, 통신 등 프로세스의 다양한 특성을 이해한다. 클라이언트-서버 시스템의 통신을 학습한다.
3
강의 목차 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례
프로세스(Processes) 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례 클라이언트-서버 환경에서 통신 요약
4
프로세스 개념 운영체제는 다양한 프로그램을 수행한다. 프로세스: 실행중인 프로그램 – 프로세스의 실행은 순차적으로 진행된다.
프로세스(Processes) 운영체제는 다양한 프로그램을 수행한다. 일괄처리 시스템 – 잡(jobs) 시분할 시스템 – 사용자 프로그램 혹은 태스크(tasks) 교재는 잡과 프로세스라는 용어를 동일한 개념으로 사용한다. 프로세스: 실행중인 프로그램 – 프로세스의 실행은 순차적으로 진행된다. 프로세스는 다음을 포함한다. 프로그램 카운터(program counter) 스택(stack) 자료 영역(data section)
5
메모리 내의 프로세스(Process in Memory)
프로세스(Processes) 프로세스의 현재 행동(activity)은 아래 정 보에 의해 표현된다. 프로그램 카운터 값 프로세스 레지스터의 내용 스택(stack) 자료를 일시적으로 저장한다. 함수 매개변수, 반환 주소, 지역 변수 등 자료 영역(data section) 전역변수들을 포함한다. 힙(heap) 프로세스 수행 시간 동안 동적으로 할당되 는 메모리 영역이다. 텍스트 영역(text section) 프로그램 실행 코드가 저장된다.
6
프로세스 상태(Process States)
프로세스(Processes) 프로세스는 실행되면서 상태(state)가 변경된다. 신설/신규(new): 프로세스가 생성 중이다 실행(running): 명령어들이 실행되고 있는 중이다 대기(waiting): 프로세스가 이벤트 발생을 기다리고 있다 준비완료(ready): 프로세스가 프로세서(CPU)에 할당되기를 기다리고 있다 종료(terminated): 프로세스가 실행을 종료하였다 프로세스 상태는 프로세스의 현재 활동에 의해 정의된다.
7
프로세스 상태도(Process State Diagram)
프로세스(Processes) 어느 한 시점에 프로세서(CPU)에서 실행 중인 프로세스는 1개 뿐이라는 점이 중요하다. 많은 프로세스들은 준비완료(ready) 또는 대기(waiting) 상태에 있다.
8
프로세스 제어 블록(Process Control Block: PCB)
프로세스(Processes) 각 프로세스는 운영체제 내에서 프로세스 제어 블록(PCB)으로 표현된다. 각 프로세스와 연관된 정보 – PCB에 포함되는 정보 프로세스 상태(process state) 프로그램 카운터(Program counter) CPU 레지스터 CPU 스케줄링 정보 메모리 관리 정보 계정(accounting) 정보 입출력 상태 정보
9
PCB 정보 프로세스 상태(process state): 신규, 준비완료, 실행, 대기, 종료
프로세스(Processes) 프로세스 상태(process state): 신규, 준비완료, 실행, 대기, 종료 프로그램 카운터(program counter): 프로세스에서 다음에 수행될 명령어의 주소 CPU 레지스터(registers): 누산기(accumulators), 인덱스 레지스터, 스택 포인 터, 범용 레지스터 등 CPU 스케줄링 정보: 프로세스 우선순위, 스케줄링 큐 포인터 등 메모리 관리 정보: 베이스 레지스터, 한계 레지스터, 페이지 테이블 또는 세그먼트 테이블 값 등 계정(accounting) 정보: CPU 총량, 실제 사용된 시간, 시간 한계, 계정 번호, 작업/프로세스 번호 입출력 상태 정보: 활성화된 입출력 장치 리스트, 개방 파일 리스트 등
10
프로세스 간의 CPU 전환(CPU Switch)
프로세스(Processes)
11
강의 목차 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례
프로세스(Processes) 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례 클라이언트-서버 환경에서 통신 요약
12
프로세스 스케줄링(Process Scheduling)
프로세스(Processes) 멀티 프로그래밍의 목적은 CPU 사용률을 최대화하기 위함이며, 이를 위해 어떤 프로세스든 항상 실행 중이게 하기 위함이다. 시분할(time sharing)의 목적은 여러 프로세스 사이에서 자주 CPU를 전 환함으로써, 여러 사용자가 프로그램이 수행되는 동안 각 프로그램과 상 호작용할 수 있도록 하기 위함이다. 이 목적을 만족시키기 위해, 프로세스 스케줄러는 CPU에서 프로그램 실 행을 위해 실행 가능한 프로세스를 선택하는 기능을 한다. 단일 프로세서 시스템은 하나 이상의 수행 중인 프로세스를 가질 수 없 다. 그 이외의 프로세스들은 CPU가 자유로워져 재스케줄될 때까지 기다 려야 한다.
13
프로세스 스케줄링 큐(Process Scheduling Queue)
프로세스(Processes) 프로세스들을 스케줄링을 위해 여러 큐들을 이동한다. 작업 큐(job queue): 시스템 내에 있는 모든 프로세스의 집합 준비완료 큐(ready queue): 메인 메모리에 상주하며 실행될 준비를 하고 기다리는 프로세스 집합 장치 큐(device queue): 입출력 장치를 기다리고 있는 프로세스 집합 각 장치는 자기 자신만의 장치 큐를 가진다.
14
준비완료 큐와 다양한 입출력 장치 큐 큐는 일반적으로 연결 리스트(linked lists) 구 현된다 .
프로세스(Processes) 큐는 일반적으로 연결 리스트(linked lists) 구 현된다 . 큐 헤더(header)는 리 스트 내의 처음과 마지 막 PCB를 가리키는 포 인터를 포함한다. 각 PCB는 다음 PCB를 가리키는 포인터를 포 함한다.
15
프로세스 스케줄링의 표현 두 가지 유형의 큐: 1개의 준비완료 큐, 1개의 장치 큐
프로세스(Processes) 두 가지 유형의 큐: 1개의 준비완료 큐, 1개의 장치 큐 두 가지 유형의 자원: CPU, 입출력(I/O) 화살표는 시스템 내의 프로세스 흐름을 나타낸다.
16
프로세스 스케줄링 프로세스(Processes) 새로운 프로세스는 초기에 준비완료 큐에 놓인 후, 실행을 위해 선택(dispatch)될 때까지 준비완료 큐에서 기다리게 된다. 일단 프로세스에게 CPU가 할당되면, 아래 사건(event) 중 하나가 발생할 때까지 해당 프로세스가 CPU에서 실행된다. 프로세스가 입출력 요청을 호출한다. 프로세스가 새로운 자식 프로세스를 생성한다. 프로세스가 인터럽트(timer event) 발생을 기다린다. 할당된 시간 간격이 초과되었다.
17
스케줄러(Scheduler) (1/4) 프로세스(Processes) 스케줄러란 다양한 큐에 있는 프로세스들 집합에서 실행을 위해 한 개의 프로세스를 선택하는 역할을 수행하는 운영체제의 컴포넌트이다. 일괄처리(batch)와 다중 프로그래밍(multi-programming) 시스템에서 바로 실행될 수 있는 것보다 더 많은 수의 프로세스들이 들어오면, 이 프로세스들은 디스크에 대기(spool)되고, 후에 실행을 위해 메모리에 적재된다. 장기 스케줄러(long-term scheduler) 또는 잡 스케줄러(job scheduler): 디스크에 대기 중인 프로세스들 중에서 준비완료 큐로 옮겨질 프로세스들을 선택한다. 단기 스케줄러(short-term scheduler) 또는 CPU 스케줄러(CPU scheduler): 준비완료 큐에 있는 프로세스들 중에서 다음에 CPU에서 실행될 프로세스를 선택한다.
18
스케줄러(Scheduler) (2/4) 단기(short-term) 스케줄러는 매우 자주 호출된다.
프로세스(Processes) 단기(short-term) 스케줄러는 매우 자주 호출된다. Milisecond 단위 빨라야 한다. 장기(long-term) 스케줄러는 이따금 호출된다. Second, minute 단위 조금 느려도 괜찮다. 장기 스케줄러가 다중 프로그램의 정도(degree of multi-programming) 를 제어한다. 즉, “메모리에 상주하는 프로세스의 개수”를 제어한다. 다중 프로그래밍의 정도는 안정적이어야 한다. 프로세스의 생성 비율 프로세스의 종료 비율 장기 스케줄러는 한 프로세스가 시스템을 떠날 때만 호출될 필요가 있다. 프로세스가 떠나면(종료되면) 다른 프로세스를 가져와야 하기 때문이다.
19
스케줄러(Scheduler) (3/4) 장기 스케줄러는 신중한 선택을 해야 한다!
프로세스(Processes) 장기 스케줄러는 신중한 선택을 해야 한다! (뒤에 나오는) 문맥 전환(context switch) 오버헤드가 단기 스케줄러에 비해 크다. 프로세스 성격(CPU bound? I/O bound?)에 따라 적절한 조합이 필요하다. 프로세스들은 다음 두 가지 특징 중 하나로 표현된다. 입출력 중심(I/O bound) 프로세스: CPU 계산보다는 입출력 계산에 보다 더 많은 시간을 소비한다. 많은 짧은 CPU 버스트(burst)가 발생한다. (예: find) CPU 중심(CPU bound) 프로세스: 계산을 하는데 더 많은 시간을 소비한다. 소수의 긴 CPU 버스트가 발생한다. (예: sort) 장기 스케줄러는 입출력 중심과 CPU 중심 프로세스가 잘 조합되도록 프 로세스를 선택하는 것이 중요하다. 대다수 프로세스가 입출력 중심이면, 준비완료 큐는 대부분 비게 된다. 대다수 프로세스가 CPU 중심이면, CPU는 바쁘고, 입출력 장치 큐는 대부분 비게 된다.
20
스케줄러(Scheduler) (4/4) Unix, Windows XP와 같은 시분할 시스템에서는
프로세스(Processes) Unix, Windows XP와 같은 시분할 시스템에서는 장기 스케줄러를 사용하지 않는다. 모든 새로운 프로세스는 단순히 단기 스케줄에 의해 (가상) 메모리에 적재된다. 일부 시분할 시스템에서 중기(medium-term) 스케줄러를 사용한다. 때때로 메모리로부터 프로세스들을 제거하여 (디스크로 옮겨 대기 시킴으로서) 다중 프 로그래밍 정도를 줄이는 것이 유용하다. 추후 제거된 프로세스는 다시 메모리로 올라와 수행을 계속할 수 있다. 이를 스와핑(swapping)이라 부른다.
21
중기 스케줄링(Medium-Term Scheduing) 추가
프로세스(Processes)
22
문맥 전환(Context Switch) 한 프로세스에서 다른 프로세스로 CPU를 전환하는 작업이다.
프로세스(Processes) 한 프로세스에서 다른 프로세스로 CPU를 전환하는 작업이다. CPU가 수행 중인 프로세스를 전환하는 절차로, PCB를 저장/적재하는 절차가 수행된다. CPU가 다른 프로세스로 전환될 때, 시스템은 이전 프로세스 상태를 저장 하고, 지정된 다른 프로세스의 상태를 적재한다. 문맥 전환을 수행하는데 필요한 시간은 오버헤드(overhead)이다. 문맥 전환 시간은 메모리 속도, 레지스터 개수 등에 의존한다. 전형적인 속도는 약 몇 밀리세컨드(miliseconds)이다.
23
강의 목차 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례
프로세스(Processes) 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례 클라이언트-서버 환경에서 통신 요약
24
프로세스 생성(Process Creation) (1/3)
프로세스(Processes) 부모(parent) 프로세스는 자식(child) 프로세스를 생성한다. 차례대로 다른 프로세스들을 생성하며, 프로세스 트리를 형성한다. Solaris 시스템에서 생성된 전형적인 프로세스 트리 예제
25
프로세스 생성(Process Creation) (2/3)
프로세스(Processes) 자원 공유 관점에서 세 가지 가능성 부모와 자식은 모든 자원을 공유한다. 자식은 부모 자원의 일부분을 공유한다. 부모와 자식은 어떤 자원도 공유하지 않는다. 자식은 운영체제로부터 직접 자원을 받는다. 실행 관점에서 두 가지 가능성 부모가 계속해서 자식과 병렬로 실행된다. 부모는 모든 자식 또는 일부 자식이 종료될 때까지 기다린다.
26
프로세스 생성(Process Creation) (3/3)
프로세스(Processes) 주소 공간 관점에서 두 가지 가능성 자식 프로세스는 부모의 복사본이다. 자식은 부모와 같은 프로그램과 데이터를 갖는다. 자식 프로세스는 자신에게 적재될 새로운 프로그램을 가진다. 리눅스 예제 fork(): 부모와 동일한 자식 프로세스를 생성하고, 부모와 자원을 공유한다. exec(): 일반적으로 fork() 후에 사용되어 프로세스의 메모리 공간을 새로운 프로그램으 로 대체한다. (즉, 새로운 프로그램을 실행한다.)
27
생성과 실행 (fork() & exec())
프로세스(Processes) 시스템 호출 fork()에 의해 새로운 프로세스가 생성된다. 새로운 프로세스는 원본 프로세스 주소 공간의 복사본으로 구성된다. 부모와 자식 프로세스는 fork() 후의 명령어에서부터 다르게 실행을 계속 한다. 두 프로세스는 fork()의 리턴 값이 서로 다르다. 리턴 값이 0이면 자식 프로세스를 의미하고, 리턴 값이 0이 아니면 부모 프로세스를 의미한다. (리턴 값이 자식의 PID이다) 시스템 호출 exec()는 새로운 프로그램 파일을 메모리에 적재하고, 그 프 로그램의 실행을 시작한다. exec() 호출을 하면, 이전에 실행되고 있던 원래 프로그램의 메모리 영역은 파괴된다.
28
프로세스를 생성하는 C 프로그램 (1/2) int main() { pid_t pid; /* 또 다른 프로세스 fork */
프로세스(Processes) int main() { pid_t pid; /* 또 다른 프로세스 fork */ pid = fork(); if (pid < 0) { /* 오류가 발생하면 */ fprintf(stderr, "Fork Failed"); exit(-1); } else if (pid == 0) { /* 자식 프로세스 */ execlp("/bin/ls", "ls", NULL); else { /* 부모 프로세스 */ /* 부모는 자식이 끝날 때까지 기다린다 */ wait (NULL); printf ("Child Complete"); exit(0);
29
프로세스를 생성하는 C 프로그램 (2/2) 프로세스(Processes)
30
프로세스 종료(Process Termination)
프로세스(Processes) 프로세스는 마지막 명령어를 실행하고 운영체제에게 프로세스 삭제를 요청한다. (exit) 자식 프로세스로부터 부모 프로세스에게 상태 값이 반환된다. (wait를 통해) 프로세스 자원은 운영체제에 의해 해제된다. (자원: 메모리, 개방 파일, 입출력 버퍼) 부모는 다양한 이유로 자식 프로세스의 실행을 중단(abort)시킬 수 있다. 자식 프로세스가 할당된 자원을 초과해서 사용했을 때 자식 프로세스에게 할당된 임무가 더 이상 필요하지 않을 때 만약 부모가 종료된다면, 어떤 운영체제는 부모가 종료되면 자식 프로세스가 수행되는 것을 허락하지 않는다. 모든 자식 프로세스들이 종료된다. – 연속적 종료(cascading termination) 또 다른 운영체제는 초기 프로세스를 부모 프로세스로 하여 수행을 계속한다.
31
강의 목차 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례
프로세스(Processes) 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례 클라이언트-서버 환경에서 통신 요약
32
독립적인 프로세스 vs 협력하는 프로세스 프로세스(Processes) 독립적인 프로세스는 다른 프로세스의 실행에 영향을 끼치지 않고 또한 영향을 받지도 않는다. 협력하는 프로세스는 다른 프로세스의 실행에 영향을 끼치거나 영향을 받을 수 있다. 프로세스 협력의 장점 정보 공유(information sharing): 여러 사용자(프로세스)가 정보를 공유할 수 있다. 계산 속도 향상(computation speed-up): 병렬성은 계산 속도를 향상시킬 수 있다. 모듈화(modularity): 시스템 기능에 따라 프로세스를 단위로 모듈을 나눈다. 편리성(convenience): 한 사용자가 많은 작업을 동시에 수행한다. 예를 들어, 한 사용자 가 편집, 인쇄, 컴파일을 동시에 수행할 수 있다. 프로세스간 협력을 위해서는 프로세스간 통신(inter-process communication)이 필요하다.
33
프로세스간 통신(IPC) 프로세스가 통신하고 이들간의 행동을 동기화하는 메커니즘을 일컫는다. 두 가지 기본적인 모델
프로세스(Processes) 프로세스가 통신하고 이들간의 행동을 동기화하는 메커니즘을 일컫는다. 두 가지 기본적인 모델 공유 메모리(shared memory) 메시지 전달(message passing) 공유 메모리 모델: 프로세스들 사이에 공유 메모리 영역이 설정된다. IPC는 공유 영역에 데이터를 저장하거나 읽는 형식으로 수행된다. 메시지 전달 모델: IPC는 프로세스간의 메시지 교환을 통하여 수행된다. IPC는 데이터의 전송 또는 수신을 통해서 수행된다. 대부분 운영체제는 두 가지 모델을 함께 구현, 제공한다.
34
통신 모델(Communication Models)
프로세스(Processes) (a) message-passing mechanism (b) shared-memory mechanism
35
통신 모델에 따른 장단점 메시지 전달(message passing) 공유 메모리(shared memory)
프로세스(Processes) 메시지 전달(message passing) 운영체제가 데이터 전달을 책임지고, 충돌이 발생하지 않기 때문에, 소량의 데이터 교환 에 적합하다. 공유 메모리 모델에 비해 구현이 용이하다. 공유 메모리(shared memory) 통신 자체의 측면에서 속도가 빠르고 사용이 용이하다. 메모리 속도의 빠른 수준으로 구현이 가능하며, 메시지 전달에 비해 신속하다. 메시지 전달 모델은 전형적으로 시스템 호출을 통해 구현되며, 이로 인한 커널 개입으로 통신 속도가 느리나 사용이 간편하다. 공유 메모리 모델은 메모리 영역 공유 설정 시에만 시스템 호출이 사용 되므로 통신 속도는 빠르나 동기화 등의 추가적인 작업이 필요하다.
36
공유 메모리 시스템 공유 메모리의 생성(creation of shared memory)
프로세스(Processes) 공유 메모리의 생성(creation of shared memory) 프로세스는 자신의 주소 공간에 공유메모리 세그먼트를 생성한다 다른 프로세스들은 공유메모리 세그먼트를 자신의 주소공간에 부착(attach)한다 공유 메모리의 종료(termination of shared memory) 메모리 해제에 대해 모든 프로세스들의 동의가 요구된다. 정보의 교환(exchange of information) 공유영역에 데이터를 읽거나 기록함으로써 이루어진다. 데이터의 형식과 위치는 운영체제가 아닌, 관련 프로세스(즉, 응용 프로 그램)가 결정한다 프로세스들은 동기화된 접근(synchronized access)에 대해 책임진다
37
생산자-소비자 문제(Producer-Consumer Problem) (1/2)
프로세스(Processes) 협력 프로세스의 패러다임(paradigm of cooperating processes) 생산자 프로세스는 소비자 프로세스가 소비하는 정보를 생산한다. 예제 컴파일러는 어셈블러가 사용하는 어셈블리 코드를 생산한다. 어셈블러는 목적 모듈(object module)을 생산하고, 이는 로더에 의해 사용된다. 생산자-소비자 문제는 공유 메모리를 사용하여 해결 가능하다. 생산자/소비자 프로세스들은 동시에(concurrently) 수행된다. 프로세스들은 공유메모리(버퍼)를 통해 서로 통신한다. 생산자는 항목(item)을 생산하고 이를 버퍼에 저장한다. 소비자는 버퍼에 있는 항목(item)을 소비한다. 가용한 항목이 있을 때만 소비자 프로세스가 소비할 수 있도록, 생산자/소비자 프로세스 는 동기화되어야 한다.
38
생산자-소비자 문제(Producer-Consumer Problem) (2/2)
프로세스(Processes) 두 가지 유형의 버퍼가 사용된다. 무한 버퍼(unbounded buffer): 버퍼의 크기에 제한이 없다. 유한 버퍼(bounded buffer): 정해진 크기의 버퍼를 가정한다. 무한 버퍼에서 생산자는 언제든지 새로운 아이템을 생산할 수 있다. 반면에, 소비자는 (버퍼에 아이템이 없는 경우) 새로운 아이템을 기다려야 한다. 유한 버퍼에서 소비자는 버퍼가 비었다면 새로운 아이템을 기다려야 한다. 생산자는 버퍼가 꽉 찼다면 아이템이 소비되기를 기다려야 한다.
39
유한 버퍼 – 공유 메모리 해결법 생산자와 소비자 사이의 공유 데이터
프로세스(Processes) 생산자와 소비자 사이의 공유 데이터 공유 버퍼는 두 개의 논리적 포인터인 in과 out을 갖는 원형 배열 (circular array)로 구현된다. (BUFFER_SIZE-1)개 보다 많은 원소를 저장할 수 없다. (full/empty의 구분을 위해) 공백(empty) when in == out 가득 참(full) when (in+1)%BUFFER_SIZE == out #define BUFFER_SIZE 10 typedef struct { int content; } item; item buffer[BUFFER_SIZE]; int in = 0; // initial state int out = 0; // empty
40
유한 버퍼 – 생산자(Producer) item nextProduced; while (true) {
프로세스(Processes) item nextProduced; while (true) { // 한 개의 아이템을 nextProduced에 생산한다. while ( ((in + 1) % BUFFER_SIZE) == out ); // 버퍼가 찼으므로 아무 일 하지 않고 기다린다. // 새로운 아이템을 버퍼에 삽입한다. buffer[in] = nextProduced; in = (in + 1) % BUFFER_SIZE; }
41
유한 버퍼 – 소비자(Consumer) item nextConsumed; while (true) {
프로세스(Processes) item nextConsumed; while (true) { while (in == out); // 버퍼가 비었으므로 아무 일도 하지 않고 기다린다. // 버퍼에서 하나의 아이템을 제거한다. nextConsumed = buffer[out]; out = (out + 1) % BUFFER SIZE; return nextConsumed; }
42
메시지 전달 시스템(Message Passing System) (1/2)
프로세스(Processes) 운영체제는 협력 프로세스들이 메시지 전달을 통해 서로 통신하는 메커 니즘을 제공한다. 프로세스들은 공유 변수에 의지하지 않고도 서로 통신할 수 있다. 프로세스들은 네트워크로 연결된 서로 다른 컴퓨터에 상주할 수도 있다. 두 가지 연산 send(message): 프로세스가 메시지를 송신한다(보낸다). receive(message): 프로세스가 메시지를 수신한다(받는다). 메시지 크기는 고정일 수도 있고 가변일 수도 있다. 이들 두 연산은 대개 시스템 호출(system call)로 구현된다.
43
메시지 전달 시스템(Message Passing System) (2/2)
프로세스(Processes) 프로세스 P와 Q가 서로 통신하고 싶다면, 다음 과정이 필요하다. 프로세스들 사이에 통신 링크(communication link)를 설정한다. send/receive 연산을 통해 메시지를 주고 받는다. 통신 링크의 구현 물리적(physical) 구현: 하드웨어 버스, 네트워크 연결 등 논리적(logical) 구현: 직접/간접, 동기화/비동기화, 버퍼링 기법 등 구현의 세 가지 논리적 쟁점 직접(direct) 또는 간접(indirect) 통신 동기화(synchronous) 또는 비동기화(asynchronous) 통신 자동적인(autonomic) 또는 명시적인(explicit) 버퍼링
44
메시지 통신의 구현 이슈들 링크는 어떻게 연결되는가? 하나의 링크가 두 개 이상의 프로세스와 연관될 수 있는가?
프로세스(Processes) 링크는 어떻게 연결되는가? 하나의 링크가 두 개 이상의 프로세스와 연관될 수 있는가? 통신하는 각 프로세스 쌍에 얼마나 많은 링크가 존재할 수 있는가? 링크의 용량(capacity)는 어느 정도 인가? 링크가 수용할 수 있는 메시지 크기는 고정인가? 아니면 가변인가? 링크는 단방향(unidirectional)인가? 양방향(bi-directional)인가?
45
직접 통신(Direct Communication) (1/2)
프로세스(Processes) 한 쌍의 프로세스 설정된 링크를 통해 직접 메시지를 송수신한다. 프로세스들은 명확히 명명(naming)될 수 있어야 한다. send(P, message): 프로세스 P에게 메시지를 보낸다. receive(Q, message): 프로세스 Q로부터 메시지를 받는다. 통신 링크의 특성 링크들은 자동으로 설정된다, 프로세스들은 오직 서로의 식별자(identity)만 알면 된다. 하나의 링크는 정확히 통신하는 한 쌍의 프로세스와만 관련된다. 통신하는 한 쌍의 프로세스 사이에는 정확히 한 개의 링크만 존재한다. 그 링크는 단방향일 수도 있다. 그러나 일반적으로 양방향이다.
46
직접 통신(Direct Communication) (2/2)
프로세스(Processes) 두 가지 주소 모드 대칭(symmetry) 주소: 통신을 위해 송신자와 수신자 모두 서로의 이름을 사용한다. 비대칭(asymmetry) 주소: 송신자만 수신자를 호칭하고, 수신자는 송신자의 이름을 지정 하지 않는다. send(P, message): 프로세스 P에게 메시지를 보낸다. receive(id, message): 임의의 프로세스로부터 메시지를 받는다. 이때, id는 메시지 를 보낸 송신 프로세스의 이름이다. 직접 통신(symmetry & asymmetry)의 단점 프로세스를 정확히 지정해야 함으로써 모듈화를 제한한다. 프로세스의 이름을 바꾸면 모든 다른 프로세스의 지정 부분도 변경될 수 있다.
47
간접 통신(Indirect Communication) (1/3)
프로세스(Processes) 운영체제가 관리하는 메일 박스(메시지 저장소)를 통하여 통신한다. 메일 박스는 메시지가 삽입되고, 메시지가 제거될 수 있는 객체이다. 각 메일 박스는 유일한 식별자(ID)를 갖는다. 메일 박스를 공유한 프로세스들만이 통신할 수 있다. 간접 통신 링크의 특징 한 쌍의 프로세스 사이의 연결은 두 프로세스가 공통 메일 박스(common mail box)를 공유한 경우에만 설정된다. 둘 사이의 지정된 연결 일반적으로 링크는 두 개 이상의 프로세스와 연관될 수 있다. 여러 프로세스 사이의 일반적 연결 프로세스들 사이에 다수의 서로 다른 링크가 존재할 수 있고, 각 링크마다 하나의 메일 박스가 설정된다. 링크는 단방향이나 양방향일 수 있다
48
간접 통신(Indirect Communication) (2/3)
프로세스(Processes) 간접 통신 연산 새로운 메일 박스를 생성(create)한다. 메일 박스를 통해서 메시지를 주고(send) 받는다(receive). 메일 박스를 삭제(destroy)한다. 메일 박스를 통한 메시지 송수신 send(A, message): 메일 박스 A에 메시지를 보낸다. receive(A, message): 메일 박스 A로부터 메시지를 받는다.
49
간접 통신(Indirect Communication) (3/3)
프로세스(Processes) 메일 박스를 공유하는 예제 프로세스 P1, P2, P3가 메일 박스 A를 공유한다. P1이 A에 메시지를 보내고, P2와 P3가 A로부터 메시지를 받는다. P2와 P3 중에서 누가 메시지를 받을까? 세 가지 가능한 해결책 하나의 링크에 최대 두 개의 프로세스만 연결되게 한다. (즉, 하나는 송신, 다른 하나는 수신) 한번에 하나의 프로세스만 receive() 연산을 수행하게 한다. 시스템이 임의적으로 수신자를 선택하게 한다. 대신, 송신자는 수신자가 누구였는지를 통보 받는다. 이외 에도, 메시지에 타입을 두고, 이 타입에 따라 수신자를 선택하게 할 수도 있다.
50
동기화(Synchronization)
프로세스(Processes) 메시지 전송은 봉쇄형(blocking)이나 비봉쇄형(non-blocking) 중 하나일 수 있다. 봉쇄형은 동기화(synchronous)로 간주된다. 봉쇄형 송신: 메시지가 배달(수신자가 받거나 메일 박스에 전달)될 때까지 송신자 가 기다린다. 봉쇄형 수신: 메시지를 받을 때까지 수신자가 기다린다. 비봉쇄형은 비동기화(asynchronous)로 간주된다. 비봉쇄형 송신: 메시지를 배달 여부에 관계없이 송신자는 다른 작업을 재개한다. 비봉쇄형 수신: 메시지 수신 여부에 관계없이 수신자는 다른 작업을 재개한다. 송신자와 수신자가 모두 봉쇄형인 경우, 두 프로세스가 랑데부(rendezvous)해야 메시지 송수신이 이루어진다.
51
버퍼링(Buffering) 프로세스(Processes) 통신 링크에 붙어 있는 큐(queue)를 버퍼라 하며, 메시지들은 통신 과정 중간에 임시적으로 큐에 놓이게 된다. 메시지 큐는 세 가지 방법으로 구현될 수 있다. 무용량(zero-capacity): 큐의 최대 길이가 0이다. 송신자는 수신자가 메시지를 받을 때까지 기다려야 한다. (랑데부) 유한 용량(bounded capacity): 큐는 유한한 길이 n을 가진다. 큐에 n개의 메시지가 쌓여 있다면 송신자는 기다리게 된다. 무한 용량(unbounded capacity): 큐의 길이가 무한하다. 송신자는 결코 기다릴 필요가 없다.
52
강의 목차 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례
프로세스(Processes) 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례 클라이언트-서버 환경에서 통신 요약
53
POSIX Shared Memory 한 프로세스는 우선 공유 메모리 세그먼트를 생성한다.
프로세스(Processes) 한 프로세스는 우선 공유 메모리 세그먼트를 생성한다. segment id = shmget(IPC PRIVATE, size, S IRUSR | S IWUSR); 프로세스들은 공유 메모리 사용하기 전에 이를 부착(attach)한다. shared memory = (char *) shmat(id, NULL, 0); 프로세스들은 공유 메모리에 읽거나 쓸 수 있다. sprintf(shared memory, "Writing to shared memory"); 더 이상 공유가 필요 없는 프로세스는 공유 메모리를 떼어낸다(detach). shmdt(shared memory);
54
Mach 메시지 통신 Mach 통신은 메시지 기반으로 구현되었다. 심지어 시스템 호출 자체도 메시지이다.
프로세스(Processes) Mach 통신은 메시지 기반으로 구현되었다. 때때로 커널(kernel)에서 구현되며, 때로는 시스템 프로그램(system program)으로 구현된다. 심지어 시스템 호출 자체도 메시지이다. 모든 태스크는 생성시에 Kernel과 Notify의 두 메일 박스를 얻는다. 메시지 전달을 위해 세 가지 시스템 호출이 사용된다. msg_send(), msg_receive(), msg_rpc() 통신을 위해 필요한 메일 박스는 다음 시스템 호출로 생성한다. port_allocate()
55
Windows XP 메시지 통신 Local procedure call(LPC) 기능을 이용한 메시지 전달 기법을 제공한다.
프로세스(Processes) Local procedure call(LPC) 기능을 이용한 메시지 전달 기법을 제공한다. 한 시스템 내의 프로세스들 사이에서만 동작한다. 통신 채널 설정/관리를 위해, 메일 박스와 유사한 포트를 사용한다. 통신 절차
56
강의 목차 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례
프로세스(Processes) 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례 클라이언트-서버 환경에서 통신 요약
57
클라이언트-서버 통신 소켓(sockets) 원격 프로시저 호출(remote procedure call: RPC)
프로세스(Processes) 소켓(sockets) 원격 프로시저 호출(remote procedure call: RPC) 원격 메소드 호출(remote method invocation: Java) 파이프(pipes)
58
소켓(Sockets) 소켓은 통신의 끝점(endpoints)으로 정의된다.
프로세스(Processes) 소켓은 통신의 끝점(endpoints)으로 정의된다. 소켓은 IP 주소, 프로토콜, 포트의 연결(concatenation)이다. 예를 들어, :TCP:1625는 호스트의 IP 주소가 이고, 포트는 1625 이며, 사용하는 프로토콜은 TCP 임을 의미한다. 통신은 소켓 쌍(a pair of sockets) 사이에서 이루어진다.
59
소켓 통신(Socket Communication)
프로세스(Processes)
60
원격 프로시저 호출(RPC) RPC는 네트워크로 연결된 시스템 사이에 프로시저 호출을 추상화한다.
프로세스(Processes) RPC는 네트워크로 연결된 시스템 사이에 프로시저 호출을 추상화한다. 스텁(stub): RPC 구현을 위한 클라이언트와 서버의 프로그램 모듈 클라이언트 측 스텁: 서버의 위치를 찾고, 서버에 보낼 매개변수들을 정돈(marshall)하여 메시지를 구성한다. 서버 측 스텁: 클라이언트에서 받은 메시지를 해석(demarshall)하여 매개변수를 알아내고, 서버의 프로시저를 실행한 후, 그 결과를 클라이언트에게 반환한다. 실제로 RPC는 내부적으로는 메시지 송수신으로 구현된다.
61
RPC 실행 절차 프로세스(Processes)
62
원격 메소드 호출(Remote Method Invocation)
프로세스(Processes) 원격 메소드 호출(RMI)은 RPC와 유사한 Java에서 사용되는 방법론이다. RMI는 자바 프로그램이 원격 객체의 메소드 호출을 가능하게 한다.
63
파이프(Pipes) Unix/Linux에서 두 프로세스가 통신할 수 있는 간단한 방법
프로세스(Processes) Unix/Linux에서 두 프로세스가 통신할 수 있는 간단한 방법 FIFO Named Pipes 자세한 사항은 “리눅스 시스템 프로그래밍” 과목에서
64
강의 목차 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례
프로세스(Processes) 프로세스 개념 프로세스 스케줄링 프로세스에 대한 연산 프로세스간 통신 IPC 시스템의 사례 클라이언트-서버 환경에서 통신 요약
65
요약 프로세스는 실행중인 프로그램이다. 프로세스는 다섯 가지 상태 중 하나를 갖는다.
프로세스(Processes) 프로세스는 실행중인 프로그램이다. 프로세스는 다섯 가지 상태 중 하나를 갖는다. 신규(new), 준비완료(ready), 실행(running), 대기(waiting), 종료(terminated) 각 프로세스는 운영체제 내에서 PCB로 표현된다. CPU를 기다리는 준비완료 큐와 입출력 장치를 기다리는 장치 큐들이 존재한다. 장기 스케줄러는 디스크로부터 준비 큐로 옮길 프로세스들을 선택한다. 단기 스케줄러는 준비완료 큐에서 하나의 프로세스를 선택하여 CPU를 할당한다. 운영체제는 부모 프로세스가 자식 프로세스를 생성하는 방법을 제공한다. 협력하는 프로세스들은 서로 간의 통신을 위해 IPC 방법을 필요로 한다. IPC 유형: 공유 메모리(shared-memory), 메시지 전달(message-passing) 클라이언트-서버 시스템에서의 통신은 소켓, RPC/RMI, 파이프 등을 사용한다
66
Homework #1 프로세스(Processes)
Similar presentations