First bad bad pass.
[cascardo/kernel/notes/.git] / 07.race / 1.race / text
1 BKL:
2
3 Código de 2.0, quando SMP foi introduzido: artigo do Alan Cox sobre SMP
4 no 2.0.
5
6 Existe deste então. No entanto, sua característica é permitir que apenas
7 um processador execute código de kernel space. Por isso, foram criados
8 os demais mecanismos para evitar concorrência, como spinlock. TODO:
9 verificar de quando é spinlock e referenciar texto do Linus em
10 Documentation/.
11
12 O BKL ainda se encontra hoje no código do Linux e muitos tem tentado
13 removê-lo. Um dos maiores obstáculos é o subsistema de tty, que ainda é
14 um código bem antigo.
15
16 --
17
18 Condições de corrida: exemplos clássicos!?!
19
20 Clássico exemplo do incremento.
21 Sessão crítica.
22
23 Uma interrupção pode acontecer, e o código de interrupção geralmente é uma
24 sessão crítica.
25 Em sistemas SMP, outro processador pode executar a mesma sessão crítica.
26 O escalonador pode executar (provavelmente, ocorreu uma interrupção, como o
27 timer) e executar outro processo que executará a mesma sessão crítica.
28
29 Para tanto, desabilitar interrupções é uma opção. Mas, muitas vezes, não é a
30 melhor. Em sistemas SMP, pode não ser suficiente.
31
32 Com a preempção suportada (escalonador pode ser executado em uma CPU
33 mesmo quando ela executa código em kernel space) (TODO: estudar melhor
34 as três opções atuais de preempção), outros problemas, antes não
35 existentes aparecem. (TODO: quais? exemplos!)
36
37
38 smp_processor_id: o escalonador pode executar e trocar o processo de CPU.
39 Desabilitar preempção basta.
40
41
42 TODO:
43 Mais referências
44 Exemplos
45 Mais e melhores descrições dos problemas e das soluções
46
47
48 Referências:
49 Livros acadêmicos sobre sistemas operacionais
50 Documentação histórica do Linux sobre as soluções que foram surgindo
51 Código de preempção, interrupção global, softirq/BH.