Linux 공유 메모리 구현 메커니즘 에 대한 상세 한 설명
메모리 공유:두 개의 서로 다른 프로 세 스 A,B 공유 메모리 의 뜻 은 같은 물리 적 메모리 가 프로 세 스 A,B 각자 의 프로 세 스 주소 공간 에 매 핑 된다 는 것 이다.프로 세 스 A 는 공유 메모리 의 데이터 에 대한 프로 세 스 B 의 업 데 이 트 를 즉시 볼 수 있 으 며,반대로 도 마찬가지 입 니 다.여러 프로 세 스 가 같은 메모리 영역 을 공유 하기 때문에 반드시 어떤 동기 화 메커니즘 이 필요 하 다.상호 배척 자물쇠 와 신 호 량 이 모두 가능 하 다.
효율:공유 메모리 통신 을 사용 하 는 분명 한 장점 은 효율 이 높다 는 것 이다.프로 세 스 가 메모 리 를 직접 읽 고 쓸 수 있 기 때문에 데이터 복사 가 필요 하지 않 기 때문이다.파이프 와 메시지 대기 열 등 통신 방식 에 대해 서 는 커 널 과 사용자 공간 에서 네 번 의 데이터 복사 가 필요 하 며,공유 메모리 에 서 는 두 번 의 데이터 만 복사 합 니 다[1]:한 번 은 입력 파일 에서 공유 메모리 구역 으로,다른 한 번 은 공유 메모리 구역 에서 출력 파일 로 복사 합 니 다.실제로 프로 세 스 간 에 메모 리 를 공유 할 때 소량의 데 이 터 를 읽 고 쓴 후에 맵 을 해제 하지 않 고 새로운 통신 이 있 을 때 공유 메모리 영역 을 다시 만 듭 니 다.통신 이 끝 날 때 까지 공유 영역 을 유지 하 는 것 입 니 다.그러면 데이터 내용 은 공유 메모리 에 저장 되 어 있 고 파일 을 다시 쓰 지 않 습 니 다.공유 메모리 의 내용 은 맵 을 해제 할 때 만 파일 을 다시 쓰 는 경우 가 많다.따라서 공유 메모 리 를 사용 하 는 통신 방식 의 효율 은 매우 높다.
공유 메모리 구현 메커니즘
공유 메모 리 는 같은 메모 리 를 각각 다른 프로 세 스 공간 에 비 추어 프로 세 스 간 통신 을 실현 하 는 것 이다.한편,공유 메모리 자 체 는 상호 배척 과 동기 화 체 제 를 가지 고 있 지 않 지만 여러 프로 세 스 가 같은 메모리 에 대해 읽 기와 쓰기 작업 을 동시에 할 때 이 메모리 의 내용 을 파괴 할 수 있 기 때문에 실제 적 으로 동기 화 와 상호 배척 체 제 는 사용자 가 완성 해 야 한다.
시스템 호출 함수 몇 개 보기:
(1)공유 메모리 만 들 기
매개 변수:key 는 출력 형 매개 변수 입 니 다.
size:size 의 크기 는 1024 정수 배(4k 정렬)여야 합 니 다.
shmflg:권한 표시
(2)공유 메모 리 를 자신의 메모리 공간 에 비 추기:shmat
shmat 는 공간 맵 입 니 다.만 든 공유 메모리 입 니 다.프로 세 스 에 접근 하기 전에 이 메모 리 를 사용자 프로 세 스 공간 에 표시 해 야 합 니 다.shmaddr 는 공유 메모리 가 현재 프로 세 스에 비 치 는 주소 위 치 를 지정 하 는 데 사 용 됩 니 다.설정 을 바 꾸 려 면 shmflag 를 SHM 으로 설정 해 야 합 니 다.RND 로고.대부분의 경우 빈 포인터(void*)0 으로 설정 하여 시스템 이 자동 으로 주 소 를 선택 하여 프로그램 이 하드웨어 에 대한 의존 도 를 줄 여야 합 니 다.shmflag 는 위의 설정 외 에 SHM 로 설정 할 수 있 습 니 다.RDONLY,비 친 주 소 를 읽 기만 합 니 다.
반환 값:호출 에 성공 하면 맵 주소 의 첫 번 째 바이트 로 되 돌아 갑 니 다.-1 로 되 돌아 갑 니 다.
(3)맵 해제:shmdt
파 라 메 터 는 해제 할 주소 공간 입 니 다.
(4)공유 메모리 제어
세 번 째 매개 변수의 구조 체 를 먼저 보 겠 습 니 다.
두 번 째 인자 cmd 옵션:IPCSTAT:공유 메모리 의 상 태 를 얻 고 공유 메모리 의 shmidds 구조 체 buf 로 복사
IPC_SET:공유 메모리 의 상 태 를 바 꾸 고 buf 가 가리 키 는 구조 체 의 uid,gid,mode 를 공유 메모리 의 shmid 로 복사 합 니 다.ds 구조 체 내
IPC_RMID:이 공유 메모리 삭제
BUF:총 메모리 관리 구조 체
코드 구현:
공유 메모리 의 특징:
(1)공유 메모리 란 닫 고 싶 지 않 은 두 프로 세 스 가 같은 메모리 에 접근 할 수 있 도록 하 는 것 이다.
(2)공유 메모 리 는 실행 중인 두 프로 세 스 간 에 데 이 터 를 공유 하고 전달 하 는 가장 효과 적 인 방법 이다.
(3)서로 다른 프로 세 스 간 에 공 유 된 메모 리 는 보통 같은 물리 적 메모리 로 배정 된다.
(4)공유 메모 리 는 어떠한 상호 배척 과 동기 화 체 제 를 제공 하지 않 고 보통 신 호 량 으로 임계 자원 을 보호 한다.
(5)인터페이스 가 간단 하 다
모든 프로 세 스 간 통신 의 특징:
(1)파이프
파 이 프 는 이름 파이프 와 익명 파이프 로 나 뉜 다.익명 파 이 프 는 단 방향 통신 만 할 수 있 고 친연 관계 가 있 는 프로 세 스 사이 에서 만 사용 할 수 있 습 니 다.부자 프로 세 스 에 자주 사 용 됩 니 다.프로 세 스 가 파 이 프 를 만 들 고 fork 를 호출 하여 하위 프로 세 스 를 만 든 후에 부모 프로 세 스 는 읽 기 단 을 닫 고 하위 프로 세 스 는 쓰기 단 을 닫 아 단 방향 통신 을 실현 합 니 다.파 이 프 는 바이트 흐름 을 향 해 서로 배척 하고 동기 화 하 는 메커니즘 으로 생명 주 기 는 프로 세 스에 따른다.
이름 파이프 와 익명 파이프:이름 파 이 프 는 상관 없 는 두 프로 세 스 사 이 를 허용 합 니 다.
(2)신호 량
신 호 량 은 하나의 계수기 로 여러 스 레 드 가 공유 자원 에 대한 접근 을 제어 할 수 있 습 니 다.많은 데 이 터 를 교환 하 는 것 이 아니 라 다 중 스 레 드 간 의 동기 화 에 사 용 됩 니 다.항상 잠 금 체제 로 서 특정한 프로 세 스 가 자원 에 접근 할 때 다른 프로 세 스 도 방문 하 는 것 을 방지 할 수 있 습 니 다.따라서 주로 프로 세 스 간 과 같은 프로 세 스 의 서로 다른 스 레 드 간 의 동기 화 수단 입 니 다.
(3)메시지 큐
메시지 큐 는 메시지 의 링크 로 커 널 에 저장 되 고 메시지 큐 식별 자 에 의 해 표 지 됩 니 다.메시지 큐 는 신호 전달 정보 가 적 고 파 이 프 는 형식 이 없 는 바이트 흐름 과 버퍼 제한 등 특징 을 극복 할 수 있 습 니 다.메시지 큐 는 UNIX 에서 서로 다른 프로 세 스 간 에 자원 공 유 를 실현 할 수 있 는 메커니즘 입 니 다.UNIX 는 서로 다른 프로 세 스 가 포맷 된 데이터 흐름 을 메시지 큐 형식 으로 임의의 프로 세 스에 보 낼 수 있 도록 합 니 다.메시지 큐 에 조작 권한 이 있 는 프로 세 스 는 msgget 를 사용 하여 메시지 큐 에 대한 조작 제 어 를 완성 할 수 있 습 니 다.메시지 형식 을 사용 하면 프로 세 스 는 순서대로 정 보 를 읽 을 수 있 습 니 다.메시지 에 우선 순 위 를 정 하거나.
(4)공유 메모리
공유 메모 리 는 다른 프로 세 스 가 접근 할 수 있 는 메모 리 를 비 추 는 것 입 니 다.이 공유 메모 리 는 하나의 프로 세 스 가 만 들 지만 여러 프로 세 스 가 접근 할 수 있 습 니 다.공유 메모 리 는 가장 빠 른 IPC 방식 입 니 다.다른 IPC 방식 의 운행 효율 이 낮 고 전문 적 으로 설계 되 었 습 니 다.예 를 들 어 신 호 량,배합 사용 등 다른 메커니즘 과 함께 프로 세 스 간 의 동기 화 를 실현 합 니 다.
이상 은 리 눅 스 공유 메모리 구현 메커니즘 의 내용 을 상세 하 게 소개 하 는 것 입 니 다.참고 로 궁금 한 점 이 있 으 면 본 사이트 에 메 시 지 를 남 겨 토론 할 수 있 습 니 다.읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.