Update some broken anchor links (#1444)

This commit is contained in:
Philipp Oppermann
2025-12-08 17:31:52 +01:00
committed by GitHub
parent 86c36479cf
commit 211f460251
56 changed files with 387 additions and 387 deletions

View File

@@ -280,16 +280,16 @@ pub fn _print(args: fmt::Arguments) {
Ela trava o `WRITER`, chama `write_fmt` nele, e implicitamente o destrava no final da função. Agora imagine que uma interrupção ocorre enquanto o `WRITER` está travado e o manipulador de interrupção tenta imprimir algo também:
Passo de Tempo | _start | interrupt_handler
---------|------|------------------
0 | chama `println!` |  
1 | `print` trava `WRITER` |  
2 | | **interrupção ocorre**, manipulador começa a executar
3 | | chama `println!` |
4 | | `print` tenta travar `WRITER` (já travado)
5 | | `print` tenta travar `WRITER` (já travado)
… | | …
_nunca_ | _destravar `WRITER`_ |
| Passo de Tempo | _start | interrupt_handler |
| -------------- | ---------------------- | ----------------------------------------------------- |
| 0 | chama `println!` |   |
| 1 | `print` trava `WRITER` |   |
| 2 | | **interrupção ocorre**, manipulador começa a executar |
| 3 | | chama `println!` |
| 4 | | `print` tenta travar `WRITER` (já travado) |
| 5 | | `print` tenta travar `WRITER` (já travado) |
| … | | … |
| _nunca_ | _destravar `WRITER`_ |
O `WRITER` está travado, então o manipulador de interrupção espera até que se torne livre. Mas isso nunca acontece, porque a função `_start` só continua a executar após o manipulador de interrupção retornar. Assim, o sistema inteiro trava.
@@ -646,7 +646,7 @@ extern "x86-interrupt" fn keyboard_interrupt_handler(
O código acima traduz pressionamentos das teclas numéricas 0-9 e ignora todas as outras teclas. Ele usa uma instrução [match] para atribuir um caractere ou `None` a cada scancode. Então usa [`if let`] para desestruturar o `key` opcional. Ao usar o mesmo nome de variável `key` no padrão, [sombreamos] a declaração anterior, que é um padrão comum para desestruturar tipos `Option` em Rust.
[match]: https://doc.rust-lang.org/book/ch06-02-match.html
[`if let`]: https://doc.rust-lang.org/book/ch18-01-all-the-places-for-patterns.html#conditional-if-let-expressions
[`if let`]: https://doc.rust-lang.org/book/ch19-01-all-the-places-for-patterns.html#conditional-if-let-expressions
[sombreamos]: https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html#shadowing
Agora podemos escrever números:
@@ -737,4 +737,4 @@ Agora somos capazes de interagir com nosso kernel e temos alguns blocos fundamen
Interrupções de timer são essenciais para um sistema operacional porque fornecem uma forma de interromper periodicamente o processo em execução e deixar o kernel retomar o controle. O kernel pode então mudar para um processo diferente e criar a ilusão de múltiplos processos executando em paralelo.
Mas antes de podermos criar processos ou threads, precisamos de uma forma de alocar memória para eles. As próximas postagens explorarão gerenciamento de memória para fornecer este bloco fundamental.
Mas antes de podermos criar processos ou threads, precisamos de uma forma de alocar memória para eles. As próximas postagens explorarão gerenciamento de memória para fornecer este bloco fundamental.