물론이죠! 전체적으로 프로세스 간 통신(IPC, Inter-Process Communication)과 관련된 내용을 다루고 있는 것 같아요. 흐름을 유지하면서 좀 더 명확하고 자연스럽게 정리해드릴게요:
공유 메모리(shared memory) 객체는, 해당 이름을 가진 객체가 존재하지 않을 경우 새로 생성되며, 읽기와 쓰기가 모두 가능한 형태로 생성됩니다. 이때, 공유 메모리 객체의 접근 권한은 0666으로 설정되어, 모든 사용자에게 읽기 및 쓰기 권한을 부여합니다.
이러한 공유 메모리는 파일 디스크립터(file descriptor)를 통해 접근하며, 이는 시스템 콜(system call)의 반환값으로 할당됩니다. 사용자 애플리케이션에서는 직접 하드웨어나 커널을 제어할 수 없기 때문에, 시스템 콜을 통해 커널에 요청을 보내고, 커널은 해당 요청을 처리하여 하드웨어 자원을 제어합니다.
메일박스(mailbox) 시스템은 커널 또는 커널 공간에서 생성된 메모리 공간을 통해, 한 프로세스가 특정 데이터를 기록하면 다른 프로세스가 이를 확인하고 동작할 수 있도록 설계된 통신 방식입니다. 예를 들어, A 프로세스가 메일박스에 메시지를 작성하면, B 프로세스는 이를 감지하고 응답할 수 있습니다.
Windows 운영체제에서는 메시지 패싱(message passing) 시스템을 사용합니다. 고급 로컬 프로시저 호출(ALPC, Advanced Local Procedure Call)을 통해 동일 시스템 내의 프로세스 간 통신을 수행합니다. 한국어로는 "고급 로컬 설비"로 번역되기도 하나, 의미가 다소 애매하므로, 영어 원어 그대로 이해하는 것이 더 정확합니다.
ALPC는 동일 시스템 내 프로세스 간 통신을 위한 방식으로, 포트(port)를 통해 통신 채널을 유지합니다.
- 클라이언트 프로세스는 핸들을 열고 connection port object를 생성하여 서버에게 연결 요청을 보냅니다.
- 서버 프로세스는 두 개의 communication port를 생성하여, 그 중 하나를 클라이언트에 전달하고 나머지 하나는 서버 측에서 유지합니다.
- 이러한 포트를 통해 메시지를 주고받으며, 요청(request)은 항상 클라이언트가 보내고, 응답(response)은 서버가 수행합니다.
데이터가 256바이트를 초과하면, 이 메시지들은 포트를 통해 직접 주고받는 방식으로 처리됩니다.
소켓
소켓(Socket)
- 소켓은 네트워크 통신에서 양쪽 끝단(Endpoint) 역할을 합니다.
- 두 프로세스 간의 데이터 통신을 가능하게 하는 핵심 요소이며, 인터넷이나 네트워크를 통한 통신에서 널리 사용됩니다.
remote procedure call
원격 프로시저 호출 (Remote Procedure Call, RPC)
- *RPC(Remote Procedure Call)은 네트워크를 통해 다른 컴퓨터의 함수를 호출하는 기술입니다.
- 클라이언트가 마치 로컬 함수를 호출하듯이 원격 함수를 호출하면, 파라미터는 네트워크를 통해 서버로 전달되고, 실행 결과 역시 네트워크를 통해 반환됩니다.
RPC 구조
- 클라이언트 stub: 로컬에 존재하며, 원격 호출인지를 판단하고 파라미터를 네트워크를 통해 전달합니다.
- 서버 stub: 전달받은 파라미터를 분리(tokenize)하여 서버 측 함수를 실행하고, 그 결과를 다시 클라이언트에 전달합니다.
바이트 순서 (Endianness)
- 시스템 아키텍처에 따라 상위 비트(MSB)와 하위 비트(LSB)의 저장 순서가 다릅니다.
- 예: Windows는 little-endian, 일부 UNIX 시스템은 big-endian
- 서로 다른 시스템 간 통신 시, 바이트 순서를 맞춰주는 작업이 필요합니다.
- 이를 처리하는 표준이 XDR(External Data Representation)이며, 데이터를 공통된 포맷으로 직렬화/역직렬화합니다.
파이프
파이프 (Pipe)
- 파이프는 한 프로세스의 출력 결과를 다른 프로세스의 입력값으로 전달하는 통신 수단입니다.
- 흔히 사용하는 쉘 명령어 a | b에서 볼 수 있듯이, a의 출력이 b의 입력으로 전달됩니다.
단방향 vs 양방향
- Ordinary Pipe:
- 단방향 통신
- 일반적으로 부모-자식 관계에서만 사용 가능
- 외부 프로세스가 접근할 수 없습니다 (보안성 높음)
- Named Pipe (FIFO):
- 양방향 통신 가능
- 부모-자식 관계가 없어도 사용 가능
- 이름을 가진 파이프이기 때문에 여러 프로세스가 동시에 접근 가능
- 유닉스/윈도우 모두 지원
Producer & Consumer
- Producer: 파이프에 데이터를 write(쓰기) 하는 주체
- Consumer: 파이프에서 데이터를 read(읽기) 하는 주체
- 데이터는 FIFO(First In First Out) 방식으로 흐릅니다.
'IT 프로그래밍 > 운영체제' 카테고리의 다른 글
[FT] [운영체제] 프로세스의 생성과 삭제 (0) | 2025.03.28 |
---|---|
[FT] [운영체제] 프로세스의 생성과 삭제 (0) | 2025.03.28 |
[FT][운영체제] 프로세스와 스레드 (0) | 2025.03.28 |
[운영체제] 프로세스 (0) | 2025.03.26 |
[운영체제] 스케쥴러 (0) | 2025.03.25 |