Linux IPC

mohadang·2023년 3월 12일
0

Linux System Programming

목록 보기
9/9
post-thumbnail

Memory Mapping

파일을 프로세스의 가상 메모리 공간으로 Mapping
File I/O system call 사용하지 않고 접근
다른 프로세스도 파일에 접근 하다는 점을 이용하여 통신
Mapping은 Page 단위로 이루어짐

Paging System

프로그램을 같은 크기의 블록으로 분할
Page : 프로그램의 분할된 block
Page frame : 메모리의 분할 영역, Page와 같은 크기로 분할

Page는 메모리를 올리는 단위이기도 하다.
Page Swap은 페이지 단위로 이루어진다.

주의

같은 MMemory mapping region을 공유함으로써 프로세스들 사이의 통신이 가능하다.
하지만 프로세스들 간의 동기화를 잘 고려해서 사용해야 한다.

Named pipe

특수 파일이다.(FIFO)
독립적인 프로세스 사이의 통신을 위해 사용 가능

  • FIFO 파일을 미리 만들어 두어야 함(shell, api 둘다 가능)
$ mkfifo -m 0644 pipeFile
  • Kernel 내부적으로 데이터 전달하며 파일에 내용이 쓰여지진 않음. 여기서 파일은 기록이 아닌 주소 역할을 할 뿐이다.

따라서 shell에서는 파이프로 다음과 같은 작업도 가능하다.

이름이 있든, 이릉이 없든 파이프는 단방향만 가능하다. 양방향 통신을 하려면 파이프 2개 생성해야함.

공유 메모리

같은 메모리 공간을 프로세스들이 공유한다. 동시에 Read/Write 가능하기에 동기화 필요하다

메모리 공간을 할당한 후 fork()하면 공유 가능하지 않을까 ?
-> No 메모리 영역의 복사본이 생성 됨. 공유되지 않는다.

메모리 공유를 하기 위해서는 공유 메모리를 생성한 다음 각 프로세스가 각자의 메모리에 Mapping 해야 한다.

공유 메모리를 사용한 IPC echo 구조

signal을 하나의 이벤트로서 사용한다.

세마포어

다중 프로그래밍 시스템에서 동기화를 위한 기법.
음이 아닌 정수형 변수 S와 초기화, P(-), V(+) 연산을 이용하며
s 변수 하나에 ready queue가 하나씩 할당된다.

Binary semaphore

S가 0과 1 두 종류의 값만 갖는 경우. 상호배제나 프로세스 동기화의 목적으로 사용

Counting semaphore

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에 수행 되어 여기에 대해서는 동기화 처리 할 필요 없음

profile
mohadang

0개의 댓글