| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 멀티캠퍼스IT부트캠프
- 웹시큐리티
- 프론트엔드 비대면반
- 부트캠프후기
- LG유플러스 유레카 3기 프론트엔드
- 백준
- git branch 협업
- 소수
- 2775번 문제
- 브루트포스
- 유레카 부트캠프
- LG유플러스 유레카 프론트엔드
- 애자일
- Do it! 자료구조와 함께 배우는 알고리즘 입문
- Java
- 프론트엔드
- 시간 복잡도
- 코딩
- 별찍기10
- zod
- tanstack query
- 자바
- 스레드
- 알고리즘
- 멀티캠퍼스IT부트캠프티
- 프로세스
- LG유플러스 유레카 프론트엔드 개발자
- 재귀
- LG유플러스 유레카 부트캠프
- 정렬
- Today
- Total
개발 일기
시스템 콜, IPC 본문
시스템 콜
시스템 콜은 사용자 프로그램이 운영체제(OS)에게 기능 수행을 요청하는 인터페이스다.
사용자 프로그램은 직접 하드웨어를 만질 수 없다. 그래서 운영체제에게 "대신 이 작업 좀 해줘"라고 요청해야 한다. 그 요청 창구가 시스템 콜이다.
왜 시스템 콜이 필요한가?
사용자 프로그램이 마음대로 하드웨어를 제어할 수 있으면 큰 문제가 생긴다.
예를 들어,
- 아무 프로그램이나 메모리를 수정
- 디스크를 직접 조작
- CPU를 독점
- 다른 프로그램 데이터 접근
이런 일이 가능해지면 시스템 전체가 불안정해진다. 그래서 운영체제는 권한을 분리한다.
사용자 모드와 커널 모드
CPU는 보통 두 가지 실행 모드를 가진다.
사용자 모드(User Mode)
일반 프로그램이 실행되는 공간
제한된 권한만 가진다.
예:
- 브라우저
- 게임
- Node.js
- React 개발 서버
여기서는 위험한 명령을 실행할 수 없다.
커널 모드(Kernel Mode)
운영체제만 사용하는 특권 모드
가능한 작업:
- 메모리 관리
- 파일 접근
- 디스크 제어
- 프로세스 관리
- 네트워크 제어
시스템 콜의 핵심
시스템 콜은 사용자 모드에서 커널 모드로 진입하는 공식적인 방법이다.

시스템 콜은 언제 사용될까?
파일 관련
- open
- read
- write
- close
프로세스 관련
- fork
- exec
- exit
- wait
메모리 관련
- mmap
- brk
네트워크 관련
- socket
- bind
- connect
등이 있다.
IPC(Inter Process Communication)
프로세스는 독립적으로 실행된다. 즉, 독립 되어있다는 것은 다른 프로세스에게 영향을 받지 않는다고 말할 수 있다. (스레드는 프로세스 안에서 자원을 공유하므로 영향을 받는다)
이런 독립적 구조를 가진 프로세스 간의 통신을 해야 하는 상황이 있을 것이다. 이를 가능하도록 해주는 것이 바로 IPC 통신이다.
프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간 통신을 할 수 있게 된다.
IPC 설비 종류도 여러가지가 있다. 필요에 따라 IPC 설비를 선택해서 사용해야 한다.
IPC 종류
1. 익명 PIPE
파이프는 두 개의 프로세스를 연결하는데 하나의 프로세스는 데이터를 쓰기만 하고, 다른 하나는 데이터를 읽기만 할 수 있다.
한쪽 방향으로만 통신이 가능한 반이중 통신이라고도 부른다.
따라서 양쪽으로 모두 송/수신을 하고 싶으면 2개의 파이프를 만들어야 한다.
매우 간단하게 사용할 수 있는 장점이 있고, 단순한 데이터 흐름을 가질 땐 파이프를 사용하는 것이 효율적이다. 단점으로는 전이중 통신을 위해 2개를 만들어야 할 때는 구현이 복잡해지게 된다.
2. Named PIPE(FIFO)
익명 파이프는 통신할 프로세스를 명확히 알 수 있는 경우에 사용한다. (부모-자식 프로세스 간 통신처럼)
Named 파이프는 전혀 모르는 상태의 프로세스들 사이 통신에 사용한다.
즉, 익명 파이프의 확장된 상태로 부모 프로세스와 무관한 다른 프로세스도 통신이 가능한 것 (통신을 위해 이름있는 파일을 사용)
하지만, Named 파이프 역시 읽기/쓰기 동시에 불가능함. 따라서 전이중 통신을 위해서는 익명 파이프처럼 2개를 만들어야 가능
3. Message Queue
입출력 방식은 Named 파이프와 동일함
다른점은 메시지 큐는 파이프처럼 데이터의 흐름이 아니라 메모리 공간이다.
사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.
4. 공유 메모리
파이프, 메시지 큐가 통신을 이용한 설비라면, 공유 메모리는 데이터 자체를 공유하도록 지원하는 설비다.
프로세스의 메모리 영역은 독립적으로 가지며 다른 프로세스가 접근하지 못하도록 반드시 보호되야한다. 하지만 다른 프로세스가 데이터를 사용하도록 해야하는 상황도 필요할 것이다. 파이프를 이용해 통신을 통해 데이터 전달도 가능하지만, 스레드처럼 메모리를 공유하도록 해준다면 더욱 편할 것이다.
공유 메모리는 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용해준다.
프로세스가 공유 메모리 할당을 커널에 요청하면, 커널은 해당 프로세스에 메모리 공간을 할당해주고 이후 모든 프로세스는 해당 메모리 영역에 접근할 수 있게 된다.
중개자 없이 곧바로 메모리에 접근할 수 있어서 IPC 중에 가장 빠르게 작동한다.
5. 메모리 맵
공유 메모리처럼 메모리를 공유해준다. 메모리 맵은 열린 파일을 메모리에 맵핑시켜서 공유하는 방식이다. (즉 공유 매개체가 파일+메모리)
주로 파일로 대용량 데이터를 공유해야 할 때 사용한다.
6. 소켓
네트워크 소켓 통신을 통해 데이터를 공유한다.
클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용한다.
서버(bind, listen, accept), 클라이언트(connect)
이러한 IPC 통신에서 프로세스 간 데이터를 동기화하고 보호하기 위해 세마포어와 뮤텍스를 사용한다. (공유된 자원에 한번에 하나의 프로세스만 접근시킬 때)
참고 자료
👨🏻💻 Tech Interview
최종 수정 : 12/17/2022, 7:23:59 AM
gyoogle.dev
'CS' 카테고리의 다른 글
| 데드락(DeadLock, 교착 상태) (0) | 2026.06.08 |
|---|---|
| CPU Scheduling (0) | 2026.05.28 |
| PCB, Context Switching, Interrupt (0) | 2026.05.14 |
| ARM 프로세서 (0) | 2026.04.28 |
| 중앙처리장치(CPU) 작동 원리 (0) | 2026.04.16 |
