초보 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에 따라 라이센스가 부여됩니다.