초보 nginx 소스 분석 데이터 구조 편 (11) 공유 메모리 ngxshm_t
6681 단어 nginx공유 메모리프로 세 스 간 통신
공유 메모 리 는 Linux 에서 제공 하 는 가장 기본 적 인 프로 세 스 통신 방법 입 니 다. mmap 또는 shmget 시스템 을 통 해 메모리 에 연속 적 인 선형 주소 공간 을 만 들 었 습 니 다. munmap 또는 shmdt 시스템 을 통 해 이 메모 리 를 호출 하여 방출 합 니 다. 공유 메모 리 를 사용 하 는 장점 은 여러 프로 세 스 가 같은 메모 리 를 사용 할 때 모든 프로 세 스 가 공유 메모리 의 내용 을 수정 한 후에다른 프로 세 스 는 이 메모리 에 접근 하면 메모리 변 화 를 얻 을 수 있 습 니 다.
ngx_shm_t: 공유 메모리 설명 에 사용:
1: typedef struct {
2: u_char *addr; //
3: size_t size; //
4: ngx_str_t name; //
5: ngx_log_t *log; // ngx_log_t
6: ngx_uint_t exists; // , 1
7: } ngx_shm_t;
1: #include<sys/mman.h>
2: void*mmap(void* start,size_t length,int prot,int flags,
3: int fd,off_t offset);
mmap 는 디스크 파일 을 메모리 에 매 핑 할 수 있 습 니 다. 메모 리 를 직접 조작 할 때 Linux 커 널 은 메모리 와 디스크 파일 의 데 이 터 를 동기 화 합 니 다. fd 인 자 는 동기 화 할 디스크 파일 을 실행 합 니 다. offset 은 파일 의 이 오프셋 에서 부터 공유 합 니 다. Nginx 는 이 기능 을 사용 하지 않 습 니 다.flags 매개 변수 에 MAP 추가ANON 혹은 MAPANONYMOUS 매개 변 수 는 파일 맵 방식 이 적용 되 지 않 는 다 고 표시 합 니 다. 이 때 fd 와 offset 매개 변 수 는 모두 의미 가 없고 전달 할 필요 가 없습니다.Nginx 에 서 는 디스크 에 동기 화 할 필요 가 없습니다.
length 매개 변 수 는 메모리 에 열 릴 선형 주소 공간 크기 입 니 다.
port 매개 변 수 는 이 공유 메모 리 를 조작 하 는 방식 을 표시 합 니 다. (읽 기 전용 또는 쓰기 가능)
start 매개 변 수 는 원 하 는 공유 메모리 의 시작 주 소 를 설명 합 니 다. 보통 NULL 로 설정 합 니 다.
공유 메모리 방출 munmap:
1: #include<sys/mman.h>
2: int munmap(void *start,size_t length);
start 가 가리 키 는 맵 메모리 시작 주소, 인자 length 는 취소 하려 는 메모리 크기 입 니 다.
공유 메모리 의 주요 동작 은 다음 과 같은 몇 가지 가 있 습 니 다.
공유 메모리 할당
ngx_shm_alloc
공유 메모리 의 방출
ngx_shm_free
5.1 공유 메모리 의 분배 ngxshm_alloc
1: ngx_int_t ngx_shm_alloc(ngx_shm_t *shm)
2: {
3: // shm->size , shm->addr
4: shm->addr = (u_char *) mmap(NULL, shm->size,
5: PROT_READ|PROT_WRITE,
6: MAP_ANON|MAP_SHARED, -1, 0);
7:
8: if (shm->addr == MAP_FAILED) {
9: ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno,
10: "mmap(MAP_ANON|MAP_SHARED, %uz) failed", shm->size);
11: return NGX_ERROR;
12: }
13:
14: return NGX_OK;
15: }
1: void
2: ngx_shm_free(ngx_shm_t *shm)
3: {
4: // ngx_shm_t addr size munmap
5: if (munmap((void *) shm->addr, shm->size) == -1) {
6: ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno,
7: "munmap(%p, %uz) failed", shm->addr, shm->size);
8: }
9: }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.