버퍼는 항상 해시 큐에 있습니까?

버퍼는 항상 해시 큐에 있습니까?

저자가 책에서 버퍼 캐싱에 대해 이야기할 때 -UNIX 운영 체제 설계,물론

버퍼는 항상 해시 큐에 있지만 사용 가능 목록에 있을 수도 있고 그렇지 않을 수도 있습니다.

전혀 사용되지 않을 수 있는 사용 가능 목록의 버퍼는 어떻습니까? 그들은 단지 무료 목록의 일부가 아닌가요?

책에 소개된 데이터 구조는 논의된 것과 유사합니다.여기

이 책에서는 UNIX System V에 대해 설명합니다.

답변1

“버퍼 내의 버퍼는 어떻습니까?무료 목록전혀 사용되지 않았을 수도 있습니까? 그게 바로 그들이 아닌가?무료 목록의 일부? "

나는 당신이 당신의 질문에 대답했다고 믿습니다! 같은 텍스트에서:

"시스템이 시작되면 각 버퍼는 사용 가능 목록에 배치됩니다."

“…무료 목록에 있을 수도 있고 없을 수도 있습니다.”

무료이기 때문에 시스템이 초기화되면 무료 목록에 올라갑니다! 그러나 시스템이 버퍼를 소비하고 이를 사용하기 위해 해시 큐에 넣은 다음 다시 사용 가능 목록으로 되돌리는 경우에는 그렇지 않을 수 있습니다.

해시 큐는 "예, 이것을 보고 어떤 식으로든 사용했습니다."라고 말하는 것과 비슷하지만 반드시 버퍼 큐에서 처리되었다는 의미는 아닙니다.

표현이 좀 혼란스러워서 인용한 텍스트를 파헤쳐야 합니다. 명확성을 위해 40/41페이지를 보고 있습니다.

답변2

여유 목록은 버퍼 캐시에서 잠금 해제된 버퍼와 사용 가능한 버퍼를 검색하는 알고리즘입니다. 이 데이터 구조는 주로 버퍼 쓰기에 사용됩니다. 쓰기에는 어떤 버퍼든 선택할 수 있고 읽기에는 특정 버퍼가 필요하기 때문입니다.

이제 사용 가능 목록에 있는 모든 버퍼는 비어 있지 않을 수 있지만 확실히 잠금 해제되어 있습니다. 게다가 모든 버퍼는 해시 큐에 있지만 사용 가능 목록에는 없습니다.

설치 시 관리자에게 대기열 수를 요청한 다음 모든 버퍼를 이러한 대기열에 넣기로 결정하기 때문입니다. 따라서 시스템은 해시 대기열의 모든 버퍼를 나열해야 합니다.

관련 정보