프로세스와 스레드 (먼저 보시면 좋습니다)
Inter-Process Communication
= 내부 프로세스 간 통신운영체제 상에서 실행중인 프로세스 간에 정보를 주고받는 것.
프로세스는 자신에게 할당된 메모리 내의 정보만 접근할 수 있고,
이를 벗어난 경우 Segmentation Fault 등의 오류가 발생한다.
이는 안전성을 위해 OS에서 자신 프로세스의 메모리에만 접근하도록 강제하고 있기 때문이다.따라서 한 프로그램에서 병렬성을 키우면서 공유되는 데이터를 사용하기 위해 메모리 공간을 공유하는 스레드를 이용하는 경우가 많다. 하지만 이것은 하나의 프로그램에서만 의미가 있고,
서로 다른 프로그램(프로세스)의 데이터를 공유하려면 다른 프로세스의 메모리에 접근해야 한다.
이 때 IPC를 사용한다.
📌 커널 (Kernel)
운영체제도 SW이기 때문에 메모리에 올라가야만 사용이 가능하다.
그러나 메모리 공간의 제약으로 운영체제 中 항상 필요한 핵심적인 부분만 메모리에 올려놓고 나머지 부분은 필요할 때 메모리에 올려서 사용하는데, 이 때 운영체제 중 항상 메모리에 상주하는 핵심 부분을 커널이라고 한다.
HW와 응용프로그램 사이에서 인터페이스 제공 및 컴퓨터의 자원 관리 등의 기능을 수행한다.
- 파이프도 파일이다. 파이프는 파일의 특수한 유형이다.
- FD(File Descriptor)의 0~2에는 stdin/out/err 할당되어 있다.
- pipe( ) 시스템 호출은 일반적으로 가장 낮은 숫자 2개의 FD를 사용
- 2개 = Readable end & Writable end
- 각 읽기/쓰기 엔드에 파이프가 연결되게 함
- 부모 프로세스에서 fork( )하여 자식 프로세스를 생성하는데,
- 이 때 자식은 부모의 FD를 이어받아 자식에도 읽기/쓰기 엔드가 할당됨.
- 읽기/쓰기 中 필요한 것만 사용.
- 파이프에 대한 추가 설명
https://twpower.github.io/133-difference-between-redirect-and-pipe
📌 익명 파이프와 비교
- 익명 파이프는 단방향 / Named 파이프는 양방향 가능!
- 익명 파이프는 동일 PPID를 가진 프로세스끼리만 통신이 가능함
- Named 파이프는 PIPE이름만 알면 통신 가능
- 익명 파이프는 부모-자식 프로세스간 통신만 가능
📌 Critical Section (임계 구역)
: 프로세스 간 공유 자원에 접근할 때 한 번에 하나의 프로세스만 이유하도록 다른 프로세스의 접근을 제한하는 영역
👀 임계 구역 문제를 해결하기 위한 3가지 필요 조건
1. 상호 배제 (Mutex: Mutual exclusion)
: 한 프로세스가 임계 영역을 사용중이면 다른 프로세스는 접근 불가.2. 실행 (Process)
: 임계 구역에서 실행중인 프로세스가 없을 때, 들어가려는 프로세스가 여러 개라면 현재 대기중인 프로세스만이 후보가 될 수 있고 어느 것이 들어갈지 결정해줘야 함.3. 한정 대기 (Bounded waiting)
: 다른 프로세스의 기아(Starvation)를 방지하기 위해 한 번 임계 구역에 들어간 프로세스는 다음 번에 들어갈 때 제한을 두어야 함.※ 임계구역 관련 내용은 방대해서 나중에 따로 올려야 할 것 같다.
https://namu.wiki/w/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EA%B0%84%20%ED%86%B5%EC%8B%A0
https://heeonii.tistory.com/13
https://minkwon4.tistory.com/295
https://12bme.tistory.com/287
https://ch4njun.tistory.com/121
https://nstgic3.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%9D%B5%EB%AA%85-%ED%8C%8C%EC%9D%B4%ED%94%84anonymous-pipes
https://twpower.github.io/133-difference-between-redirect-and-pipe