NDKPI 완료 처리 요구 사항

NDK 소비자 및 NDK 공급자는 NDKPI 완료 처리를 위해 이러한 요구 사항을 따라야 합니다.

NdkGetCqResults, NdkGetCqResultsEx 및 NdkArmCq 함수에 대한 규칙

소비자는 항상 동일한 CQ(완료 큐) 개체(NDK_CQ)에서 이러한 공급자 함수에 대한 호출을 직렬화합니다.

즉, 소비자는 동일한 공급자 함수를 동시에 여러 번 호출하지 않을 뿐만 아니라 여러 스레드에서 동일한 CQ에서 이러한 함수의 조합을 동시에 호출하지 않습니다.

원격 NdkSendAndInvalidate(NDK_FN_SEND_AND_INVALIDATE) 호출의 결과로 발생하는 NdkOperationTypeReceiveAndInvalidate 완료는 NdkGetCqResults(NdkGetCqResultsEx n이 아님)를 사용하여 계속 검색할 수 있어야 합니다. 이렇게 하려면 수신기에서 지정된 토큰을 무효화해야 하지만 수신 소비자에게 이 무효화를 알리지 않습니다(소비자가 이 정보를 얻으려면 NdkGetCqResultsEx 를 사용해야 합니다). 동일한 토큰에 대한 이후 NdkInvalidate (NDK_FN_INVALIDATE)는 평소와 같이 실패합니다.

알림 콜백에 대한 규칙

공급자는 NdkCqNotificationCallback(NDK_FN_CQ_NOTIFICATION_CALLBACK) 콜백을 한 번만 호출해야 하며, 소비자가 NdkArmCq를 호출하여 NdkCqNotificationCallback 콜백을 무장한 후에만 호출해야 합니다. 즉, 공급자는 NdkCqNotificationCallback 콜백 호출 조건이 발생할 때(즉, 요청 완료가 CQ에서 큐에 대기되는 경우) arm을 지우고 NdkCqNotificationCallback 콜백 을 호출해야 합니다.

소비자가 NdkArmCq를 호출할 때 CQ에 이미 완료가 있는 경우 공급자는 다음과 같이 작동합니다.

  • 마지막 NdkCqNotificationCallback 콜백 이 호출된 이후 완료 중 하나 이상이 CQ에 새로 배치된 경우 공급자는 arm 요청을 즉시 충족해야 합니다(serialization 요구 사항은 아래 참조).
  • 그러나 마지막 NdkCqNotificationCallback 콜백 이 호출되었을 때 CQ의 모든 완료가 있는 경우(즉, 소비자는 모든 완료를 제거하지 않고 NdkArmCq 라고 하며 CQ에 새 완료가 배치되지 않음) 공급자가 즉시 arm 요청을 충족할 수 있습니다.

공급자가 NdkCqNotificationCallback 콜백 을 호출해야 하는 경우 진행 중인 NdkCqNotificationCallback 콜백 이 이미 있는 경우 공급자는 NdkCqNotificationCallback 콜백에 대한 기존 호출이 공급자에 대한 컨트롤을 반환할 때까지 NdkCqNotificationCallback 콜백 의 호출을 연기해야 합니다. 즉, 공급자는 NdkCqNotificationCallback 콜백 을 직렬화해야 합니다.

다음 표에서는 이전 NdkArmCq 요청이 충족되기 전에 NdkArmCq가 두 번째로 호출 되는 경우의 결과 arm 형식을 보여 제공합니다.

2번째 팔 ANY 2번째 팔 오류 2번째 팔 요청

첫 번째 팔 ANY

ANY

ANY

ANY

첫 번째 팔 오류

ANY

오류

요청

첫 번째 팔 요청

ANY

요청

요청

NDKPI(네트워크 직접 커널 공급자 인터페이스)