12장. RHEL에서 실시간에 mlock() 시스템 호출 사용


RHEL for Real-Time 메모리 잠금(mlock()) 함수를 사용하면 실시간 호출 프로세스가 지정된 주소 공간 범위를 잠그거나 잠금 해제할 수 있습니다. 이 범위는 Linux가 메모리 공간을 스와핑할 때 잠긴 메모리를 페이징하지 못하도록 합니다. 페이지 테이블 항목에 실제 페이지를 할당하면 해당 페이지에 대한 참조가 빨라집니다. mlock() 시스템 호출에는 mlock()mlockall() 의 두 함수가 포함됩니다. 마찬가지로 munlock() 시스템 호출에는 munlock()munlockall() 함수가 포함됩니다.

12.1. mlock() 시스템 호출을 사용하여 페이지를 잠그기

실시간 mlock() 시스템 호출은 addr 매개변수를 사용하여 주소 범위의 시작을 지정하고 len 을 사용하여 주소 공간의 길이를 바이트 단위로 정의합니다. alloc_workbuf() 함수는 메모리 버퍼를 동적으로 할당하고 잠급니다. 메모리 할당은 posix_memalig() 함수에 의해 수행되어 메모리 영역을 페이지에 맞춥니다. function free_workbuf() 는 메모리 영역을 잠금 해제합니다.

사전 요구 사항

  • 큰 버퍼에서 mlockall() 또는 mlock() 을 사용할 수 있는 루트 권한 또는 CAP_IPC_LOCK 기능이 있습니다.

프로세스

  • 다음 코드는 mlock() 시스템 호출을 사용하여 페이지를 잠급니다.

    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/mman.h>
    
    void *alloc_workbuf(size_t size)
    {
      void *ptr;
      int retval;
    
      // alloc memory aligned to a page, to prevent two mlock() in the same page.
      retval = posix_memalign(&ptr, (size_t) sysconf(_SC_PAGESIZE), size);
    
      // return NULL on failure
      if (retval)
        return NULL;
    
      // lock this buffer into RAM
      if (mlock(ptr, size)) {
        free(ptr);
        return NULL;
      }
    
      return ptr;
    }
    
    void free_workbuf(void *ptr, size_t size) {
      // unlock the address range
      munlock(ptr, size);
    
      // free the memory
      free(ptr);
    }

검증

성공 시 실시간 mlock()munlock() 호출은 0을 반환합니다. 오류가 발생하면 -1을 반환하고 오류를 나타내기 위해 errno 를 설정합니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동