다음을 통해 공유


이름 캐시 관리

NAME_CACHE 구조체는 클라이언트가 중복 요청을 표시하지 않도록 서버에서 수행된 최근 작업의 이름 문자열을 캐시합니다. 예를 들어 최근에 "파일을 찾을 수 없음" 메시지로 열린 요청이 실패하고 클라이언트 애플리케이션이 대문자 문자열로 열린 요청을 다시 시도하고 네트워크 미니 리디렉션자가 대/소문자 구분 이름을 지원하지 않는 경우 RDBSS는 서버에 충돌하지 않고 즉시 요청을 실패할 수 있습니다.

일반적으로 알고리즘은 NAME_CACHE 항목에 기간 및 작업 수 제한을 두는 것입니다. 시간 창은 일반적으로 2초입니다. 따라서 NAME_CACHE 항목이 2초보다 크면 일치가 실패하고 요청이 서버로 이동합니다. 서버에서 요청이 다시 실패하면 NAME_CACHE 항목이 또 다른 2초 창으로 업데이트됩니다. 요청 작업 수가 일치하지 않으면 하나 이상의 요청이 서버로 전송되어 이 NAME_CACHE 항목이 유효하지 않을 수 있습니다. 따라서 이 작업은 서버로 전송됩니다.

NAME_CACHE 구조에는 RDBSS에서만 사용할 수 있는 네트워크 미니 리렉터, MRX_NAME_CACHE 및 프라이빗 섹션에 노출되는 공용 부분이 있습니다. 미니 리디렉터 부분에는 이 이름 항목에 대한 이전 서버 작업의 결과와 NAME_CACHE 구조와 함께 할당할 수 있는 일부 추가 미니 리디렉터 특정 스토리지에 대한 컨텍스트 확장 포인터에 대한 컨텍스트 필드 NTSTATUS가 있습니다. 자세한 내용은 RxNameCacheInitialize를 참조하세요.

Windows 네트워킹의 경우 SMB 작업 수는 MRX_NAME_CACHE 컨텍스트 필드에 저장할 수 있는 미니 리렉터별 상태의 예입니다. RxNameCacheCheckEntry가 호출되면 이름 캐시에서 일치 항목을 찾는 과정의 일부로 컨텍스트 필드와 제공된 매개 변수 간에 같음 검사 수행합니다. NAME_CACHE 항목이 만들어지거나 업데이트되면 이 필드에 적절한 값을 제공하는 것은 네트워크 미니 리디렉션자의 작업이며 NAME_CACHE 항목의 수명(초)입니다.

NAME_CACHE 구조체의 프라이빗 RDBSS 부분에는 유니코드 문자열로 이름, 조회 속도를 높이기 위한 이름의 해시 값, 항목의 만료 시간 및 서버가 대/소문자를 구분하는 이름을 지원하는지 여부를 나타내는 플래그가 포함됩니다.

NAME_CACHE_CONTROL 구조체는 지정된 이름 캐시를 관리합니다. 무료 목록, 활성 목록 및 업데이트를 동기화하기 위한 잠금이 있습니다. 또한 NAME_CACHE_CONTROL 구조에는 할당된 현재 NAME_CACHE 항목 수, 할당할 최대 항목 수에 대한 값, 각 NAME_CACHE 항목에 사용되는 추가 네트워크 미니 리디렉터 스토리지의 크기 및 통계 값(캐시가 업데이트된 횟수, 확인됨, 유효한 일치 항목이 반환된 횟수) 필드도 있습니다. 및 네트워크 미니 리렉터에서 네트워크 작업을 저장한 경우). MaximumEntries 필드는 잘못 동작하는 프로그램이 대량의 메모리를 사용하는 잘못된 파일 이름으로 많은 수의 열린 요청을 생성하는 경우 생성된 NAME_CACHE 항목의 수를 제한합니다.

현재 OBJECT_NAME_NOT_FOUND RDBSS에서 유지 관리하는 이름 캐시가 있습니다. 이 이름 캐시의 경우 2초 창이 유지 관리되며, 서버로 작업이 전송되면 무효화됩니다. 이는 클라이언트 애플리케이션에 서버의 애플리케이션이 서버에서 다른 파일(sample2)의 생성을 알리는 데 사용할 수 있는 파일(sample1)이 열려 있을 때 발생할 수 있습니다. 클라이언트가 첫 번째 파일(sample1)을 읽고 두 번째 파일(sample2)이 서버에 생성되었음을 알게 되면 두 번째 파일(sample2)과 일치하는 이름 캐시의 적중이 오류를 반환할 수 없습니다. 이 최적화는 아직 존재하지 않는 동일한 파일에서 연속 파일 열기 작업의 경우에만 처리합니다. 이 시나리오는 Microsoft Word 사용하여 발생합니다.

RDBSS 이름 캐시 관리 루틴에는 다음이 포함됩니다.

루틴에서 반환된 값 Description

RxNameCacheActivateEntry

이 루틴은 이름 캐시 항목을 사용하고 만료 시간 및 네트워크 미니 리디렉션자 컨텍스트를 업데이트합니다. 그런 다음, 항목을 활성 목록에 배치합니다.

RxNameCacheCheckEntry

이 루틴은 NAME_CACHE 항목의 유효성을 확인합니다.

RxNameCacheCreateEntry

이 루틴은 지정된 이름 문자열을 사용하여 NAME_CACHE 구조를 할당하고 초기화합니다. 그러면 호출자가 이름 캐시 컨텍스트의 추가 네트워크 미니 리디렉션기 요소를 초기화한 다음 이름 캐시 활성 목록에 항목을 배치할 것으로 예상됩니다.

RxNameCacheExpireEntry

이 루틴은 NAME_CACHE 항목을 무료 목록에 배치합니다.

RxNameCacheExpireEntryWithShortName

이 루틴은 이름 접두사에서 지정된 짧은 파일 이름과 일치하는 모든 NAME_CACHE 항목이 만료됩니다.

RxNameCacheFetchEntry

이 루틴은 NAME_CACHE 항목에 대해 지정된 이름 문자열이 있는 일치 항목을 찾습니다.

RxNameCacheFinalize

이 루틴은 NAME_CACHE_CONTROL 구조와 연결된 모든 NAME_CACHE 항목에 대한 스토리지를 해제합니다.

RxNameCacheFreeEntry

이 루틴은 NAME_CACHE 항목에 대한 스토리지를 해제하고 NAME_CACHE_CONTROL 구조와 연결된 NAME_CACHE 캐시 항목 수를 감소합니다.

RxNameCacheInitialize

이 루틴은 이름 캐시(NAME_CACHE_CONTROL 구조)를 초기화합니다.