.1. Drives de Discos Rígidos
Device driver
usaremos esta camada baixa de abstração para permitir que o SO não se precise se preocupar com detalhes das operações de IO.
Interface do Driver
Um disco consiste numa quantidade de setores (blocos de 512-bytes). O Address Space de um disco equivale a $n$ setores, ou seja, um vetor de setores. A unica garantia de atomicidade é em um único setor por vez, pela parte do disco.
Geometria do Disco
- discos
- superfícies: organizados em trilhas
- trilhas: circular (representa vários blocos de dados) organizados em setores
- cilindro: conjunto de trilhas em diferentes discos
- spindle: eixo de rotação
- cabeça de rotação faz seeking
problemas e latências
- delay de rotação - tempo de ociosidade até o leitor estar corretamente posicionado no setor desejado
- tempo de seek - tempo de movimento de trilha à trilha
multi-zoned disks: discos cujas trilhas externas que possuem mais setores do que as internas. track-buffer: bufferiza leitura de tracks não contíguas e operações incompletas ou eminentes no disco. Ou seja, se algo foi escrito corretamente ou não ou coisas nesse sentido. politicas de escritas: write-trough () e write-back (a qualquer finalização de escrita, )
// TODO FINISH THIS
$$T_{IO}=T_{seek}+T_{rotation}+T_{transfer}$$
Precisamos entender as diferenças de performance de carga de trabalho aleatória e sequencial, os quais fazem o que os seus nomes sugerem. Acesso randômico é mais veloz do que o sequencial.
Disk Scheduling - escalonamento do disco
Diferentemente do escalonador de processos, o de disco é capaz de prever o tempo de trabalho, já que podemos estimar este tempo baseado no delay de rotação médio, o tempo de seek médio e escolher os requests baseado em alguma politica.
SSTF: Shortest Seek Time first
Escolhe-se o request cuja distância à trilha atual é menor, logo o tempo de seek também. Porém, o SO não sabe exatamente a geometria do disco, apenas reconhece um vetor de índices referentes aos blocos do disco. Assim, surge o NBF, que faz o mesmo mas olhando apenas para o bloco mais próximo. Outro problema é o starvation, causada pelo fato de sempre estar-se olhando para o bloco atual e apenas ele.
Elevator (SCAN ou C-SCAN)
Chamemos de sweep (varrida) o movimento da cabeça de leitura de dentro para fora ou fora para dentro do disco. Assim, se chegar um request que pertence a um setor ou track já varrido, este request será colocado no final da fila e posteriormente feito na próxima varrida.
SPTF: Shortest Positioning Time First
Nos baseamos numa relação entre o tempo de seeking e o tempo de rotação, ou seja, o que for menor deverá ter prioridade. Entretanto, implementar isso num SO é quase que impossível (da forma ótima), apenas possível através de algunas presuposições. Basicamente, é perfeito para o controlador de disco, propriamente dito e não para o SO em si.
Alguns pontos extras:
- merge de requests subsequentes (de leitura sem alteração futura naquele bloco)
- work-conserving e non-work-conserving: esperar ou não blocos de dados para ser endereçados para o IO.

