파일을 프로세스의 가상 메모리 공간으로 Mapping
File I/O system call 사용하지 않고 접근
다른 프로세스도 파일에 접근 하다는 점을 이용하여 통신
Mapping은 Page 단위로 이루어짐
프로그램을 같은 크기의 블록으로 분할
Page : 프로그램의 분할된 block
Page frame : 메모리의 분할 영역, Page와 같은 크기로 분할
Page는 메모리를 올리는 단위이기도 하다.
Page Swap은 페이지 단위로 이루어진다.
같은 MMemory mapping region을 공유함으로써 프로세스들 사이의 통신이 가능하다.
하지만 프로세스들 간의 동기화를 잘 고려해서 사용해야 한다.
특수 파일이다.(FIFO)
독립적인 프로세스 사이의 통신을 위해 사용 가능
$ mkfifo -m 0644 pipeFile
따라서 shell에서는 파이프로 다음과 같은 작업도 가능하다.
이름이 있든, 이릉이 없든 파이프는 단방향만 가능하다. 양방향 통신을 하려면 파이프 2개 생성해야함.
같은 메모리 공간을 프로세스들이 공유한다. 동시에 Read/Write 가능하기에 동기화 필요하다
메모리 공간을 할당한 후 fork()하면 공유 가능하지 않을까 ?
-> No 메모리 영역의 복사본이 생성 됨. 공유되지 않는다.
메모리 공유를 하기 위해서는 공유 메모리를 생성한 다음 각 프로세스가 각자의 메모리에 Mapping 해야 한다.
공유 메모리를 사용한 IPC echo 구조
signal을 하나의 이벤트로서 사용한다.
다중 프로그래밍 시스템에서 동기화를 위한 기법.
음이 아닌 정수형 변수 S와 초기화, P(-), V(+) 연산을 이용하며
s 변수 하나에 ready queue가 하나씩 할당된다.
S가 0과 1 두 종류의 값만 갖는 경우. 상호배제나 프로세스 동기화의 목적으로 사용
S가 0이상의 N 정수 값을 가질 수 있는 경우. Producer-Consumer 문제 등을 해결하기 위해 사용
초기화 연산 : S 변수에 초기값을 부여하는 연산(초기 작업 갯수)
P 연산(- : Critical Section 진입시 호출)
if (S > 0)
S <- S - 1;
else
wait on the queue;
V 연산(+ : Critical Section 탈출시 호출)
if (waiting process on queue)
wakeup one of them;
else
S <- S + 1;
초기화 연산, P 연산, V 연산 모두 한 instruction cycle에 수행 되어 여기에 대해서는 동기화 처리 할 필요 없음