O Solaris pode fazer mais ou menos ler adiante. Ao contrário do Linux, o Solaris é totalmente dinâmico no kernel e decide o que fazer com base nas restrições e na memória disponível do kernel.
Há também uma leitura antecipada que é controlada pelo sistema de arquivos e pode haver um cache diferente do cache histórico se você usar, por exemplo, ZFS.
Para uma resposta melhor, seria importante se você realmente gostaria de ler dispositivos em buffer que não parecem razoáveis e seria importante saber por que você gosta de saber algo sobre um detalhe de implementação.
Em geral, no Solaris, as chamadas read () para armazenamento em segundo plano em buffer são convertidas em uma cópia de uma área de mapeamento de mapeamento de kernel transitório. Em um IIRC de kernel de 32 bits, essa área de mapeamento transitório é de 2 MB, em kernels de 64 bits é maior. As operações de leitura antecipada são implementadas por meio de chamadas de falha disparadas manualmente que são configuradas pelo driver de segmento relacionado (o driver que está entre a memória de primeiro plano virtual e o armazenamento de segundo plano). AFAIK, a única descrição disponível está na minha tese de diploma do WOFS. Foi usado por funcionários da Sun por esse motivo.
Para melhorar a compreensão, pode ajudar a conhecer o contexto histórico:
28 anos atrás, o SunOS-4.0 foi publicado com um novo subsistema de memória virtual. Todo o SO moderno copia pelo menos a idéia mmap () do SunOS-4.0. O SunOS-4.0, no entanto, é mais uma vez que implementa um subsistema VM orientado a objetos.
Existe memória de primeiro plano virtual, um driver de segmento, a camada HAL (MMU) e o armazenamento em segundo plano.
Dependendo do tipo de objeto de memória em primeiro plano e do tipo de objeto em segundo plano, há um driver de segmento especial.
Se você tiver um sistema de arquivos como objeto de primeiro plano e armazenamento em disco como memória de segundo plano, o driver de segmento será chamado seg_vn
. Se você tiver um mapeamento para um dispositivo, sev_dev
será usado.
Para entender que o readahead é específico do objeto, você pode querer verificar ufs_vnops.c
e procurar por ufs_getpage_ra()
.