커널이 디스크 블록에 액세스할 때 장치 블록 번호의 적절한 조합으로 버퍼를 검색합니다.
이 문장은 "The Design of the Unix Operating System"이라는 책에서 나온 것입니다. 그래서 제 질문은 커널이 어떤 버퍼에서 작동할지 어떻게 결정하고 해당 버퍼에 대한 장치 블록 번호를 어디서 얻느냐는 것입니다.
답변1
귀하의 질문은 데이터가 이미 버퍼에 있는 경우 또는 새 버퍼를 할당해야 하는 경우에 관한 것입니까?
장치 블록 번호는 파일 시스템을 마운트하는 데 사용되는 장치 파일(예: Linux의 /dev/sda1 또는 BSD의 /dev/hd0a)에서 나옵니다. 버퍼 사용 여부에 관계없이 장치 번호가 필요합니다. 버퍼는 동일한 데이터를 다시 읽는 시간을 절약해 주는 캐시일 뿐입니다. 장치 내의 블록 번호는 파일 시스템의 레이아웃에 따라 결정됩니다. 파일 시스템 형식에 대한 자세한 내용은 책의 이 섹션을 읽으십시오. 디렉터리, inode, 직접 및 간접 블록 등에 대한 설명이 있습니다.
따라서 커널이 필요한 블록을 결정하면 메모리의 버퍼를 확인하여 필요한 블록을 찾습니다. 있는 경우 읽기 작업이 필요하지 않으며 데이터가 즉시 반환됩니다.
블록의 내용이 메모리에 없으면 커널은 블록의 내용이 가까운 장래에 사용되지 않을 것이라는 희망으로 버퍼를 선택합니다. 이는 일반적으로 가장 최근에 사용된 버퍼입니다.