연결 및 파일 구조 관리
연결 및 파일 구조를 관리하기 위해 RDBSS에서 사용하는 6가지 기본 데이터 구조가 있습니다. 이러한 데이터 구조는 RDBSS 및 다양한 네트워크 미니 리렉터에서 내부적으로 사용됩니다. 이러한 데이터 구조에는 두 가지 버전이 있습니다. 네트워크 미니 리디렉션기 버전에는 네트워크 미니 리디렉션기 드라이버에서 조작할 수 있는 필드가 포함되어 있습니다. 이러한 데이터 구조의 네트워크 미니 리 디렉터 버전은 MRX_ 접두사로 시작합니다. RDBSS 버전에는 RDBSS에서만 조작할 수 있는 추가 필드가 포함되어 있습니다.
이러한 6가지 기본 데이터 구조는 다음과 같습니다.
SRV_CALL--서버 호출 컨텍스트입니다. 이 구조체는 원격 서버에 대한 추상화 기능을 제공합니다.
NET_ROOT-net 루트입니다. 이 구조체는 공유에 대한 연결을 추상화합니다.
V_NET_ROOT-net 루트 보기(가상 netroots라고도 함).
FCB--파일 제어 블록입니다. 이 구조체는 공유의 열린 파일을 나타냅니다.
SRV_OPEN--서버 쪽 열린 컨텍스트입니다. 이 구조체는 서버의 열린 핸들을 캡슐화합니다.
FOBX--파일 개체 확장명입니다. 이 구조체는 FILE_OBJECT 구조체에 대한 RDBSS 확장입니다.
이러한 데이터 구조는 다음 계층 구조로 구성됩니다.
SRV_CALL
FCB <------> NET_ROOT
SRV_OPEN <---> V_NET_ROOT
FOBX
FILE_OBJECT
커널 파일 시스템 호출에 대한 응답으로 RDBSS는 일반적으로 FOBX 구조를 제외한 앞에서 언급한 모든 구조체를 네트워크 미니 리렉터 드라이버에 대해 만들고 마무리합니다. 따라서 네트워크 미니 리디렉션기 드라이버는 일반적으로 연결 및 파일 구조 관리에 사용되는 몇 가지 RDBSS 루틴만 호출합니다. 이러한 루틴의 대부분은 RDBSS에 의해 내부적으로 호출됩니다.
이러한 모든 데이터 구조는 참조 횟수입니다. 데이터 구조에 대한 참조 수는 다음과 같습니다.
데이터 구조 | 참조 수에 대한 설명 |
---|---|
SRV_CALL |
SRV_CALL 가리키는 NET_ROOT 항목 수와 일부 동적 값입니다. |
NET_ROOT |
NET_ROOT 가리키는 FCB 항목 및 V_NET_ROOT 항목 수와 일부 동적 값입니다. |
V_NET_ROOT |
V_NET_ROOT 가리키는 SRV_OPEN 항목 수와 일부 동적 값입니다. |
FCB |
FCB를 가리키는 SRV_OPEN 항목 수와 일부 동적 값입니다. |
SRV_OPEN |
SRV_OPEN 가리키는 FOBX 항목 수와 일부 동적 값입니다. |
FOBX |
일부 동적 값입니다. |
각 경우에 동적 값은 역참조 없이 구조를 참조한 호출자 수를 나타냅니다. 참조 수의 정적 부분은 루틴 자체에 의해 유지 관리됩니다. 예를 들어 RxCreateNetRoot 는 연결된 SRV_CALL 구조체에 대한 참조 수를 증분합니다.
참조 호출 및 성공적으로 조회하면 참조 수가 증가합니다. 역참조 호출은 개수를 감소합니다. 루틴 호출을 만들어 구조체를 할당하고 참조 수를 1로 설정합니다.
모든 데이터 구조와 연결된 참조 개수는 1개 이상이며 데이터 구조와 연결된 다음 하위 수준에서 데이터 구조의 인스턴스 수보다 낮습니다. 예를 들어 두 개의 NET_ROOTs 연결된 SRV_CALL 연결된 참조 수는 3개 이상입니다. RDBSS 내부 NameTable 구조와 다음 하위 수준의 데이터 구조에서 보유하는 참조 외에도 획득되었을 수 있는 추가 참조가 있습니다.
이러한 제한은 아래의 모든 데이터 구조가 완료되거나 참조를 해제할 때까지 지정된 수준의 데이터 구조를 완료(해제 및 연결된 메모리 블록 해제)할 수 없도록 합니다. 예를 들어 FCB에 대한 참조가 유지되면 연결된 V_NET_ROOT, NET_ROOT 및 SRV_CALL 구조체에 안전하게 액세스할 수 있습니다.
네트워크 미니 리렉터와 RDBSS 간의 인터페이스에 사용되는 두 가지 중요한 추상화는 SRV_CALL 구조와 NET_ROOT 구조입니다. SRV_CALL 구조체는 연결이 설정된 서버와 연결된 컨텍스트에 해당하며, NET_ROOT 구조는 서버의 공유에 해당합니다(네트워크 미니 리렉터에서 클레임한 네임스페이스의 일부로 볼 수도 있음).
SRV_CALL 및 NET_ROOT 구조의 생성에는 일반적으로 하나 이상의 네트워크 왕복이 포함됩니다. 비동기 작업을 계속하기 위해 이러한 작업은 2단계 작업으로 모델링됩니다. SRV_CALL 및 NET_ROOT 구조를 만들기 위한 네트워크 미니 리디렉터에 대한 각 호출에는 네트워크 미니 리디렉터에서 RDBSS로의 호출이 함께 제공되어 요청의 완료 상태 알립니다. 현재 동기식입니다.
SRV_CALL 구조의 생성은 RDBSS가 서버와의 연결을 설정하기 위해 여러 네트워크 미니 리다이렉터 중에서 선택해야 한다는 사실 때문에 더욱 복잡해집니다. RDBSS가 배포하려는 네트워크 미니 리디렉터를 선택할 수 있는 최대 유연성을 제공하기 위해 SRV_CALL 구조를 만들려면 RDBSS가 네트워크 미니 리디렉터에게 승자를 알 수 있도록 하는 세 번째 단계가 포함됩니다. 손실되는 네트워크 미니 리 디렉터 모두 연결된 컨텍스트를 삭제합니다.
이 섹션에서는 다음 항목을 다룹니다.