대표적인 IPC 및 동기화 기법 1) 파이프(pipe) --- 운영체제 영역 이용 2) 메시지 큐(message queue) --- 운영체제 영역 이용 3) 공유 메모리(shared memory) --- 사용자 영역 이용 4) 세마포어(semaphore) --- 동기화 기법 기본적인 IPC 과정 ① 공유 메모리 확보 ② 공유 메모리 접근 ③ 공유 메모리 반납 1-1) 이름 없는 파이프 (unnamed pipe) ① 공유 메모리 확보 - 파일 디스크립터 번호를 저장하기 위한 정수형 배열 변수 선언한다. (int pipefd[2];) - pipe() 함수를 사용하여 커널 영역에 파이프 채널을 생성한다. (pipe(pipefd);) - fork() 함수를 사용하여 자식 프로세스를 생성한다. ② 공유 메모리 사..
프로세스 간 통신(IPC: Inter-process Communication) 1) 프로세스 간에 데이터를 주고 받는다 (write/read) 2) 프로세스는 독립적이다 (-> 다른 프로세스 영역을 접근(access)할 수 없다) 3) 공유 메모리가 필요하다 공유 메모리가 커널 영역에 존재 -> 동기화가 필요하지 않음 공유 메모리가 사용자 영역에 존재 -> 동기화가 필요함 4) 임계영역(critical section)이 존재함. 메시지 전송(message passing) 방식 - 커널(운영체제) 영역의 일부분을 공유 메모리로 이용한다. - 운영체제에서 임계 영역에 대한 동기화를 해결해 준다. - 메시지가 세 곳에 존재한다. ① 송신 프로세스는 자신의 데이터 영역에 메시지를 작성한 후, send() 함수를..
스래드 동기화 동일한 프로세스 내부에 생성된 스래드들은 병행적으로 실행되며 자원(프로세스의 코드 영역과 데이터 영역)을 공유한다. 따라서, 임계 영역의 문제(결정성)를 해결하기 위한 동기화 기법이 필요하다. 스래드 동기화 기법 1) 스래드 뮤텍스(mutex): 공유 자원의 개수가 오직 하나일 경우에만 사용. 2) 스래드 세마포어(semaphore): 공유 자원의 개수가 하나거나 그 이상일 경우에도 사용 가능. * 표준 라이브러리가 아님으로 컴파일링시 “–lpthread”를 반드시 첨가해야 한다. (ex: $gcc thread.c –o thread –lpthread) 1) 스래드 뮤텍스(mutex): 뮤텍스(mutexes)는 “MUTual Exclusion locks”의 약자이다. 공유 자원에 대한 상호 ..
임계 영역(critical section) :프로세스 영역 중에서 공유 자원을 접근하는 코드 영역. (즉 공유 자원에 접근했을 때를 '임계 영역에 있다'고 말함) 모든 프로세스가 임계 영역을 가지고 있는 것은 아니지만 자원을 공유하면서 병행적으로 실행되는 프로세스는 반드시 임계 영역을 가지고 있다. 프로세스의 결정성이 보장되기 위해서는 임계 영역이 상호 배제적으로 실행되어야 한다. 프로세스의 코드 영역 1) 임계 영역(critical section) 2) 진입 영역(entry section) 3) 출구 영역(exit section) 4) 잔류 영역(remainder section) 임계 영역의 문제해결 만족조건 1) 상호 배제(mutual exclusion) 조건: 두 개 이상의 프로세스가 임계영역에 존..
병행성(concurrency): 여러 개의 프로세스 혹은 스래드들이 동시에 실행되는 것 결정성(determinacy): 동일한 입력에 대한 프로세스 혹은 스래드의 실행 결과는 항상 일정하다. 하지만 상호 영향을 주고 받으면서 자원을 공유하고 병행적으로 실행될 경우 실행 결과가 달라질 수 있다. (=결정성이 보장되지 않는다.) 즉, 결정성 보장을 위한 운영체제의 기능이 요구된다. 생산자 프로세스: 데이터를 생산하여 공유버퍼에 저장한다. 소비자 프로세스: 공유 버퍼에 저장된 데이터를 가져와 소비한다. - 두 프로세스는 상호 영향을 주고 받는다. - 두 프로세스에 대한 결정성 보장이 요구됨. (동기화 필요) 경쟁 조건(race condition): 다수의 프로세스들이 공유 메모리를 병행적으로 접근할 때, 그 ..
프로세스 상태 #define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUPTIBLE 2 #define TASK_ZOMBIE 4 #define TASK_STOPPED 8 프로세스 구조 - 코드(.text) : 프로그램의 코드(명령어)가 저장된 영역 - 데이터(.data) : 초기화된 데이터가 저장된 영역 - 데이터(.bss) : 초기화되지 않은 데이터가 저장된 영역 - 힙(heap) : 동적으로 할당된 데이터 영역 - 스택(stack) : 프로그램이 실행되는 과정에서 일시적인 데이터를 저장하기 위해 LIFO(Last-In First_Out) 방식으로 관리되는 영역. 프로세스 제어 블록(PCB: Process Control Block..
프로세스 스케줄링 준비 큐에 등록된 프로세스들 중에서 스케줄링 정책에따라 하나의 프로세스를 선택하고, 선택된 프로세스에게 CPU를 할당하는 운영체제의 기법 * 준비 큐(ready queue) : 준비상태의 프로세스들을 관리하기 위한 자료구조 선점(preemptive) 방식: 강제적으로 CPU를 빼앗김(①②③④⑤) 비선점(non_peemptive) 방식: 자발적으로 CPU를 반납(①②) 스케줄링 시 고려해야 할 요소들 - CPU 이용률 (CPU utilization) : 주어진 시간에 대한 CPU 사용시간 - 처리율 (throughput) : 단위 시간당 처리된 프로세스의 개수 - 반환 시간 (turnaround time): 프로세스가 생성된 후 종료될 때까지 소요된 시간 - 대기 시간 (waiting t..
스래드는 프로세스 내부에 존재(프로세스는 하나의 스래드로 구성된 태스크) - CPU 제어의 흐름(flow of CPU control) - 실행 단위(unit of execution) - 한 프로세스 내부에서 스케줄링이 가능한 개체 - 경량(lightweight) 프로세스 단일 스래딩(single-threading): 프로세스 내부에 오직 하나의 스래드만 존재한다 다중 스래딩(multi-threading): 프로세스 내부에 다수의 스래드들이 존재할 수 있다. 프로세스와 같은 점 - CPU를 할당하는 대상(dispatchable objects of CPU) - 시스템 내부에서의 작업 단위(unit of works in a system) - 상태를 가지고 있으며 상태 변환이 일어난다. - 독립적이며 비동기적으..