Sunday, December 17, 2017

Entrando em ring3

Entrando em ring3 para rodar a thread idle.


Essa é uma imagem que mostra o código onde o kernel passa o comando para a primeira thread do primeiro processo.

Coloca-se o valor de vários registradores na pilha e efetua uma instrução iret.


Obs:
Esse é um salto feito pelo kernel base para rodar a thread idle pela primeira vez. Como não houve nenhuma interrupção não tem porque enviar um sinal de fim de interrupção de hardware.

Ainda não vi motivos para acionar a flag 14, (NT). Se existe algum motivo, alguém me conte por favor ?? Por enquanto as flags ficarão assim mesmo (0x3200).

Confesso que aquele 'cli' antes da rotina é coisa de gente medrosa. Mas como eflags vai ficar com 0x3200 então IF está setado ao entrar em ring3. Porque se a configuração de eflags não funcionar o cli antes da rotina faria tudo parar na thread idle, que é apenas um loop.


Observem as modificações feitas nos seletores de segmento na hora de saltar para ring 3.

0x20 | 3
0x18 | 3







No comments:

Post a Comment

Executando programa

** Um momento de glória ** Finalmente Kernel Dev ! A partir de agora eu posso carregar e executar um programa usando o meu shell. ...