Linux 프로세스 간 통신을 위한 고전적인 기술

WBOY
풀어 주다: 2022-02-09 17:38:57
앞으로
1904명이 탐색했습니다.

이 기사는 파이프, 익명 파이프, 공유 메모리 및 기타 관련 문제를 포함하여 Linux 프로세스 간 통신에 대한 관련 지식을 제공합니다.

Linux 프로세스 간 통신을 위한 고전적인 기술

·프로세스 간 통신: 시스템이 프로세스 간 통신을 구현하기 위해 운영 체제에서 제공하는 방법

각 프로세스는 독립적인 가상 주소 공간을 가지며, 자체적으로 액세스하므로 프로세스가 직접 통신할 수 없습니다. 가상 주소이므로 프로세스가 독립적이며 직접 통신할 수 없습니다

통신 시나리오에 따라 다양한 통신 방법이 제공됩니다

프로세스 간 통신 방법 유형: 파이프, 공유 메모리, 메시지 큐, 세마포

·Pipeline

특징: 반이중 통신--선택할 수 있는 방향의 단방향 통신

본질: 커널에서 버퍼 열기(커널 공간의 메모리 조각)

원리: 여러 프로세스가 동일한 커널의 버퍼에 액세스하여 통신합니다(버퍼의 작업 핸들 복사)

범주: 익명 파이프: 버퍼에는 식별자가 없으며 선호도가 있는 프로세스 간 통신에만 사용할 수 있습니다.

명명된 파이프: The 버퍼에는 식별자가 있으며 동일한 호스트에서 모든 프로세스 간 통신에 사용할 수 있습니다

Linux에서는 모든 것이 파일입니다. 모든 것이 파일로 작동하며(파이프 포함) 파이프에 대한 액세스는 IO 작업을 통해 완료됩니다

·익명 파이프라인

반환 값: 성공 시 0, 실패 시 -1 기능: 관련 관계가 있는 프로세스 간 통신에만 사용할 수 있습니다.

익명 파이프에는 식별자가 없으며 다른 프로세스를 통해서만 상위를 복사할 수 있습니다. 자식 프로세스는 통신을 이루는 프로세스를 통해 작업 핸들을 얻습니다

읽기 및 쓰기 기능: 파이프에 데이터가 없으면 읽기가 차단됩니다.

                                          using using using ‐ ‐                          through out ‐ off ’     ‐ ‐‐‐‐‐를 읽으면 프로세스가 중단되고 exit

                                                              계속해서 읽으면 데이터를 읽은 후 0이 반환되고 더 이상 차단되지 않습니다.

                                           방향을 선택하면 사용하지 않는 끝 닫혀야 합니다.

·

이름이 지정된 파이프:

기본적으로 이는 커널의 버퍼이며, 다른 프로세스에서 찾을 수 있는 식별자가 있으므로 동일한 프로세스 간 통신에 사용할 수 있습니다. 호스트 네임드 파이프 식별자는 파일 시스템에 표시되는 파이프 유형 파일입니다 여러 프로세스가 동일한 파이프 파일을 열고 동일한 커널의 버퍼에 액세스하여 통신합니다 명령 작업: mkfifo 파일 이름 네임드 파이프 파일 생성

함수 연산 :int mkfifo(const char *pathname, mode_t mode);

경로명: 파일명, 모드: 생성 권한

반환값: 성공 시 0 반환, 실패 시 -1 반환

·요약:

파이프라인의 본질: 커널 공간의 버퍼

원리: 여러 프로세스가 동일한 버퍼에 액세스하여 데이터 전송을 달성합니다. 범주: 익명 파이프, 명명된 파이프 익명 파이프: 프로세스 간 통신에만 사용할 수 있습니다. 친족 관계

Named Pipe: 동일한 호스트에서 모든 프로세스 간 통신에 사용 가능

기능: ① 반이중 통신 - 원하는 방향으로 단방향 통신

바이트 스트림 전송 서비스 제공: 주문됨 , 신뢰성, 연결 기반 일종의 스트리밍 전송

연결 기반: 모든 읽기 끝이 닫히면 쓰기가 비정상이 되고 모든 쓰기 끝이 닫히면 읽기는 0

을 반환합니다. ② 동기화 및 상호 배제 제공:

동기화: 동일한 프로세스를 통해 중요한 리소스에 동시에 액세스 안전한 액세스 작업 달성

                                                                             >对 상호 배제의 구현: 파이프라인의 쓰기 작업 크기는 PIPE_BUF-4096을 초과하지 않으며 작업의 원자성을 보장합니다. 수명 주기는 프로세스를 따릅니다. 인간 개입 없이 파이프 종료를 여는 모든 프로세스가 종료됩니다. , 파이프 버퍼가 해제됩니다

·공유 메모리:

프로세스 간 데이터 공유를 구현하는 데 사용됩니다

본질: 물리적 메모리 조각 원리: 물리적 메모리 공간을 열고 여러 프로세스가 동일한 블록을 매핑합니다. 자신만의 가상 주소 공간을 확보하고, 가상 주소를 통해 직접 접근하여 데이터 공유를 실현합니다

특징: 가장 빠른 프로세스 간 통신 방법, 라이프 사이클은 커널을 따릅니다.            IN 남음, 프랑스의 IN, , , , , , , , , , , , , , , , , , , , 데이터 복사 작업 2개 줄이기

참고: 공유 메모리 운영 시 안전 문제에 주의해야 합니다

운영 프로세스:

①공유 메모리 생성 또는 열기 ②공유 메모리를 프로세스의 가상 주소 공간에 매핑

③ 매핑된 가상을 통해 주소 다양한 메모리 연산 수행 ④매핑 관계 매핑 해제 ⑤공유 메모리 삭제

int shmget(key_t key, size_t size, int shmflg);

key: 식별자(여러 프로세스가 동일한 식별자를 통해 동일한 공유 메모리를 엽니다.) ​​

size: 생성 시 열리는 공간의 크기(메모리 내) 페이지)

                                                                                  사용 사용 사용 사용 ' s ‑ ‑ ‑ ‑               

void *shmat(int shmid, const void *shmaddr, int shmflg); SHM_RDONLY - 읽기 전용; 0-읽기-쓰기

                                     ~           매핑된 첫 번째 주소를 반환할 수 있습니다.       실패하면 (void *)-1                              

int shmdt(const void *shmaddr); int shmctl(int shmid, int cmd, struct shmid_ds *buf); buf: IPC_RMID의 경우 성공적으로 0을 반환하고 실패 시 -1을 반환

·Message Queue

본질: 커널의 우선순위 큐. 여러 프로세스가 동일한 대기열에 액세스하고 프로세스 간 데이터를 달성하기 위해 대기열에 노드를 추가하거나 얻습니다. 블록 전송

기능: 동기화 및 상호 배제가 제공되며 수명 주기는 커널

·세마포

을 따릅니다. 본질: 커널의 카운터 + PCB 대기 큐

기능: 프로세스 간 동기화를 달성하는 데 사용됩니다. 상호 배제를 통해 중요한 리소스에 대한 프로세스의 액세스를 조정합니다

P 작업: 카운터 -1, 카운트가 0보다 작은지 판단, block the process

V 연산: 카운터 +1, 차단된 프로세스 깨우기

자체 카운터를 사용하여 리소스에 액세스합니다. 프로세스의 리소스 획득이 합리적인지 여부를 결정하기 위해 계산이 수행됩니다. . 리소스 생성을 기다린 후 차단된 프로세스를 깨웁니다.

동기 구현: 카운터를 통해 리소스를 계산하고 리소스를 획득하기 전에 P 연산을 수행합니다.

상호 배타적 구현: 카운터가 1이므로 리소스만 있음을 나타냅니다. 하나의 리소스, 프로세스가 리소스에 접근하기 전에 P 연산을 수행하고 방문이 완료된 후 V 연산을 수행

관련 추천: "Linux 비디오 튜토리얼"

위 내용은 Linux 프로세스 간 통신을 위한 고전적인 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿