일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스파르타내일배움캠프TIL
- MySQL
- wil
- 스파르타코딩클럽
- 컴퓨터개론
- 프로그래머스
- 코딩테스트
- Flutter
- Spring
- 99클럽
- AWS
- 내일배움캠프
- 자바
- 국비
- 개인공부
- Python
- til
- 개발자스터디
- 소프트웨어
- 개발자블로그
- 스파르타내일배움캠프WIL
- 컴퓨터구조론 5판
- 99일지
- 부트캠프
- 운영체제
- 중심사회
- java
- 항해
- 백준
- 스파르타내일배움캠프
- Today
- Total
컴공생의 발자취
IPC 종류와 특징 본문
출처 : https://cho001.tistory.com/42
1. PIPE [IPC] pipe 예제 코드
- 정의 : 익명의 PIPE를 통해서 동일한 PPID를 가진 프로세스 간에 단방향 통신을 지원
- FIFO 구조
- 생성된 PIPE에 대하여 Write 또는 Read만 가능
- 사용 : 부모 자식 프로세스 간에 통신할 때 사용
- 쌍방 통신을 위해서는 Write 용 PIPE 하나 Read PIPE 하나씩 만들어야 한다.
- read()와 write()가 기본적으로 block 모드로 작동하기 때문에 프로세스가 read 대기 중이라면 read가 끝나기 전에는 write를 할 수가 없게 된다.
2. Named PIPE [IPC] name pipe 예제 코드
- 정의 : 이름을 가진 PIPE를 통해서 프로세스 간에 단방향 통신을 지원
- 서로 다른 프로세스들이 PIPE의 이름만 알면, 통신이 가능하다.
- FIFO 구조
- 생성된 PIPE에 대하여 Write 또는 Read만 가능
- 연관이 전혀 없는 프로세스 간에 통신할 때
- 쌍방 통신을 위해서는 Write 용 PIPE 하나 Read PIPE 하나씩 만들어야 한다.
- read()와 write()가 기본적으로 block 모드로 작동하기 때문에 프로세스가 read 대기 중이라면 read가 끝나기 전에는 write를 할 수가 없게 된다.
3. Message Queue [IPC] message queue 예제 코드
- 정의 : 메모리를 사용한 PIPE이다.
- 구조체 기반으로 통신
- FIFO 구조
- msgtype에 따라 다른 구조체를 가져올 수 있다.
- 프로세스 간의 다양한 통신을 할 때 사용 할 수 있다.
- 커널에서 제공하는 Message queue이기에 EnQueue 하는데 제한이 존재한다.
4. Shared Memory [IPC] shared memory 예제 코드
- 정의 : 시스템상의 공유 메모리를 통해 통신
- 일정한 크기의 메모리를 프로세스 간에 공유하는 구조
- 커널에서 관리 [메모리] share memory 사용법
- 프로세스 간에 Read, Write를 모두 필요로 할 때
- 프로세스 간에 상용하려면 메모리 크기가 동일 해야 한다.
5. Memory Map [IPC] 메모리 맵 mmap() 예제 코드
- 정의 : 파일을 프로세스의 메모리에 일정 부분 맵핑 시켜 사용한다.
- 구조 : 메모리 맵 파일
- 파일로 대용량 데이터를 공유할 때 사용
- FILE IO가 느릴 때 사용하면 좋다.
- 대부분 운영 체제에서는 프로세스를 실행할 때 실행 파일의 각 세그먼트를 메모리에 사상하기 위해
메모리 맵 파일을 이용
- write 시기는 프로세스의 페이지가 메모리에서 내려갈 때만 Write 된다. 그래서 메모리와 file Sync가 안 맞을 수도 있다.
- IA-32 기반 시스템에서 하나의 프로세스에서 PAE 기술을 사용하지 않고 사용 가능한 최대 크기는 4GB로 제한된다
- 메모리 맵 파일은 파일의 크기를 바꿀 수는 없으며 메모리 맵 파일을 사용하기 이전, 또는 이후에만 파일의 크기를 바꿀 수 있다.
6. Socket
- 정의 : 네트워크 소켓 통신을 사용한 데이터 공유
- 네트워크 소켓을 이용하여 Client - Server 구조로 데이터 통신
- 원격에서 프로세스 간에 데이터를 공유할 때 사용
- 네크워크 프로그래밍이 가능해야 한다.
- 데이터 세그먼트 처리를 잘 해야 한다.
7. Semaphore
- 프로세스 간 데이터를 동기화하고 보호하는데, 목적을 둔다.
- 공유된 자원에 여러 개의 프로세스가 동시에 접근하면 안 된다.
- 한 번에 하나의 프로세스만 접근할 수 있도록 만들어줘야 하며, 이때 사용되는 것이 Semaphore이다.
IPC 별 사용 시기 및 특징
IPC 종류 | PIPE | Named PIPE | Message Queue | Shared Memory | Memory Map | Socket |
사용 시기 |
부모자식간 단방향 통신 | 다른 프로세스와 단방향 통신 | 다른 프로세스와 단방향 통신 | 다른 프로세스와 양방향 통신 | 다른 프로세스와 양방향 통신 | 다른 시스템 간 양방향 통신 |
공유 매개체 |
파일 | 파일 | 메모리 | 메모리 | 파일+메모리 | 소켓 |
통신 단위 |
Stream | Stream | 구조체 | 구조체 | 페이지 | Stream |
통신 방향 |
단방향 | 단방향 | 단방향 | 양방향 | 양방향 | 양방향 |
** 혹여나 문제시 해당 게시물 삭제 **
'📖 이론 > 운영체제' 카테고리의 다른 글
Process Control Block(PCB) (0) | 2022.05.10 |
---|---|
process state diagram (0) | 2022.05.10 |
monolithic kernel VS micro kernel (0) | 2022.04.28 |
fork()_C언어(Linux) (0) | 2022.04.28 |
x86(CISC) VS ARM(RISC) (0) | 2022.04.28 |