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.