Algumas informações básicas: Estou atualmente lendo o livro de Bach, O design do sistema operacional UNIX e tentando implementar algumas partes como um exercício e para obter uma melhor compreensão das partes internas de um sistema operacional (não estou planejando escreva meu próprio).
Estou ciente de que o cache de buffer foi substituído pelo cache de buffer unificado em todas as implementações modernas do Unix (Linux, FreeBSD, etc.), mas ainda assim gostaria de saber como ele funcionava.
Meu problema é que não encontrei nenhuma informação sobre os tamanhos de bloco do cache de buffer. É óbvio que o uso de um sistema de arquivos que suporta apenas um tamanho de bloco fixo, e. 1k, os blocos do cache de buffer seriam os mesmos. Mas como o cache de buffer funciona com um sistema de arquivos que suporta vários tamanhos de bloco? O que acontece se eu tiver 2 dispositivos montados, um usando um tamanho de bloco de 1k e o outro usando 8k? Suponho que o sistema operacional não aloque caches de buffer separados para dispositivos com tamanhos de bloco diferentes. Uma opção poderia ser usar o maior tamanho de bloco, mas no meu exemplo, isso desperdiçaria 7k para cada bloco armazenado em cache do primeiro sistema de arquivos. Além disso, seria necessário descartar e reconstruir o cache de buffer com blocos maiores se apenas o sistema de arquivos 1k estivesse disponível no momento da inicialização e o sistema de arquivos 8k fosse montado posteriormente. O cache de buffer poderia alocar dinamicamente blocos diferentes de acordo com a necessidade? Isso não levaria à fragmentação da memória alocada para o cache de buffer depois de um tempo?
Eu tentei encontrar a resposta no OSDI de Tanenbaum e nos livros UNIX Filesystems de Pate e fiz muito googling, mas até o momento não tive sorte.
Tags kernel cache filesystems buffer