디스크 블록에 대한 접근을 모니터링하고, 블록 비트맵 형태로 접근을 모니터링할 수 있는 방법을 찾고 있습니다.
또한 장치 블록 액세스를 고정(및 대기열)할 수 있어야 합니다(고정 해제 및 보류 중인 블록 쓰기도 가능해야 함). 이 기능은 커널 모드에서 지원되어야 하는 것 같습니다(아마도 사용자 애플리케이션으로는 불가능할 것입니다). 커널에는 실제 블록 장치를 호출하기 전의 진입점인 blk-core.c가 있습니다. 이런 용도로 사용해도 될 것 같아요.
일종의 큐잉 메커니즘이 사용되는 것 같으며 실제로 장치에 기록된 시기를 알 수 있는 방법이 필요합니다.
void blk_start_queue(struct request_queue *q)
{
WARN_ON(!irqs_disabled());
queue_flag_clear(QUEUE_FLAG_STOPPED, q);
__blk_run_queue(q);
}
EXPORT_SYMBOL(blk_start_queue);
또한 블록이 아닌 섹터를 사용한다는 것도 확인했습니다(추적해야 하는 부분입니다).
커널 파일 시스템 쓰기 요청은 섹터에 있는 반면 기본 디스크 장치 드라이버는 블록에 있습니까? 그렇다면 블록 모니터링이 디스크 드라이버에 있어야 합니다.
또한 장치 블록 자체(예: hd.c) 요청 구조에 전송이 발생해야 하는 위치가 정확히 어디에 있는지 잘 모르겠습니다.
struct request
{
....
sector // the position in the device at which the transfer should be made
....
}
읽고 쓸 정확한 섹터에 대한 정보를 제공하는데, 요청을 보내는 상위 계층에서는 이를 어떻게 결정합니까? 이는 블록 드라이버(이 경우 hd.c)의 결정이 아닌가요?
내가 이해하는 부분이 누락되었을 수도 있습니다.
이 주제에 대한 제안을 보내주셔서 감사합니다.