일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 네이버 치지직
- 데이터베이스 공부
- apple developer academy 후기
- 앱 비교 프로젝트
- 애플 디벨로퍼 아카데미 21주차 회고
- Swift 문법
- 제앱소
- OS
- 애플 디벨로퍼 아카데미
- 데이터베이스
- ObservedObject
- react
- ObservableObject
- 운영체제
- 애플 디벨로퍼 아카데미 후기
- 숭실대
- swift문법
- 네이버 부스트캠프
- iOS 개발 오류
- Swift 디자인패턴
- StateObject
- 치지직
- global soop
- Swift 기능
- SWIFT
- sqoop
- 소프트웨어분석및설계
- Apple Developer Academy @ POSTECH
- useReducer
- 애플 아카데미 후기
- Today
- Total
사과하는 제라스
7. IPC(Inter Process Communication) 본문
목차
프로세스들이 어떻게 서로 협력을 할 수 있음...?
OS는 이를 어떻게 지원함...?
궁금해...!!!
IPC란...?
: 프로세스들 간에 데이터/정보를 주고 받기 위한 메커니즘.
-> 커널에서 IPC를 위해 System Call 형태로 도구를 제공함.
(프로세스들은 이 System Call들을 호출함으로서 프로세스 간에 통신할 거라고 OS에게 얘기해 줌.-> OS는 그 프로세스들에게 그 기능을 사용 가능하게 해줌.)
- IPC의 필요성
: Process 협력 모델을 구현하기 위해서 반드시 필요함.
-> 실행 중인 프로세스는 협력하는 다른 프로세스의 영향을 받음.
어떤 시스템이 돌아갈 때 여러 프로세스들이 사용되는데 그들 간에는 통신을 해야 함. 이러한 통신을 위해서는 IPC가 필요함.
IPC 모델 2가지 - 공유 메모리(Shared Memory), 메시지 교환(Message Passing)
공유 메모리
: 프로세스의 특정 메모리 영역을 공유하는 방식.
- 응용 프로그램 레벨에서 통신 기능을 제공하기에, 공유 메모리가 한번 설정되면 이후에는 OS의 도움이 없어도(커널의 도움이 없어도) 협력이 가능함.
ex. Shared Memory
- 동작 방식: Read / Write
-> 프로세스들의 주소 공간 중 일부를 공유 메모리로 설정. 이후 프로그램에서 바로 접근해서 데이터를 읽거나 씀.
메시지 교환
: 공유 메모리 없이 동작함. 커널로 메시지를 보내고 이를 받아오는 방식으로 메시지 통신을 함.
∴ 교환 시마다 매번 커널의 도움을 받아야 함.
- Client-Server 방식의 통신.
ex. Pipe, Message Queue, Socket
- 동작 방식: Send / Receive
-> 커널을 통해 메시지를 전송함. 때로는 커널에 데이터를 버퍼링 되어 있다가(커널이 갖고 있다가) 프로세스에 전달됨.
- Context Switching에 연관됨.(상대가 실행 중이지 않을 때 메시지를 전송해주는 건 의미없기 때문.)
두 방식의 큰 차이점: OS(커널)를 거쳐서 메시지를 전송해야 하느냐와 공유 메모리를 두고 read/write만 해서도 데이터를 주고받을 수 있느냐의 차이.
IPC에서 동기화의 필요성
- 메시지 교환 방식 - 커널이 동기화를 제공하기에 따로 프로그램에서 동기화 고려 X.
- 공유 메모리 방식 - 메모리 영역에 대한 동시 접근을 제어하기 위한 방법이 필요. ex. Locking, 세마포어(Semaphore)
Pipe
: 하나의 프로세스가 다른 프로세스로 데이터를 직접 전달하는 방법.
- 데이터는 단방향으로만 이동함.
∴ 양방향 통신을 위해서는 2개의 pipe가 필요함.
- 하나의 pipe에서는 1:1 통신만 가능함.
- 보내진 순서대로만 받음.
- 용량이 제한되어 있어서 꽉 차면 사용 불가능.
∴ Receive를 해주어야 그만큼 비워져서 추가로 보낼 수 있어짐.
Signal
: 특정 프로세스에게 커널을 통해 Event를 전달하는 방법.
- 송신 프로세스: 여러 신호 중 하나를 특정 프로세스에 보냄. 수신할 프로세스의 상태에 상관없이 수행 가능함.
- 수신 프로세스: 신호 종류에 따라 신호 처리 방법을 지정할 수 있음.(무시 / 단순히 신호를 붙잡아 둠 / Signal Handler를 두어 처리)
- 비동기적인 동작
: 아무리 송신 프로세스가 수신 프로세스에게 시그널을 보내도 이 시그널의 처리는 수신 프로세스가 Scheduling되어야 가능함.(so 당연..!)
* sigaction() : 시그널 핸들러를 등록하는 함수.
* kill : 프로세스를 죽이는 것 외에도 시그널을 전달할 때도 사용함.
* waitpid : 자식 프로세스를 기다리다가 종료되면 빠져나감.
Shared Memory
: 두 개 이상의 프로세스들이 하나의 메모리 영역을 공유하여 통신하는 방법.
- 메모리의 직접 사용이 가능하기에 빠르고 자유로운 통신이 가능함.
- 두 개 이상의 프로세스가 동시에 메모리를 변경하지 않도록 프로세스 간의 동기화가 필요함.
* shmget : 공유 메모리를 생성하는 함수.
* shmat: 공유 메모리의 위치를 찾아서 저장하는 함수.
Message Queue
: 고정된 크기를 갖는 Message를 Linked-List를 통해 통신하는 방법.
- Message의 단위: 통신하고자 하는 프로세스 간의 약속이 필요함.
- 여러 프로세스가 동시에 접근이 가능한 방식이기에 동기화가 필요함!!!
* MSG: 메시지의 타입과 내용이 형식을 정해둔 구조체
* msgget: 메시지 Queue 생성하는 함수
* msgsnd: 메시지를 쓰는 함수
* msgrcv: 메시지를 읽는 함수
Socket
- Port를 이용하여 통신하는데에 사용됨.
-> Port라는 OS가 제공하는 Abstraction을 가지고서 그 번호를 이용해서 통신 상대 프로세스의 Socket을 찾아감.
- 다른 IPC와 달리에 프로세스의 위치에 상관없음.(Local도 가능하고 Remote도 가능함.)
-> 이건 Port 덕분에 가능한데,
Local은 Port 번호만으로도 식별이 가능함.
Remote는 IP주소+ Port 번호로 식별이 가능함.
- 연결의 Semantics를 정할 수 있음.(TCP vs UDP)
- Port를 사용하기에 Machine Boundary가 상관없음.
- Port로 여러 웹 브라우저를 생성하는데 이때 Remote Machinedms Local Machine의 Port만 보임(그림처럼 ㅇㅇ)
'대학 전공 공부 > 운영체제' 카테고리의 다른 글
9. Synchronization(동기화)-1 (0) | 2022.11.24 |
---|---|
8. Thread (1) | 2022.11.19 |
6. CPU Scheduling (1) | 2022.11.02 |
5. Computer Architecture (0) | 2022.10.11 |
4. Process (0) | 2022.10.09 |