Ao alternar do modo real para o modo protegido i386 de 32 bits, qual é a diferença prática entre não definir um IDT (ou seja, não executar uma instrução lidt ) ou definir um IDT vazio?
Qual é mais útil e qual devo fazer?
Ao alternar do modo real para o modo protegido i386 de 32 bits, qual é a diferença prática entre não definir um IDT (ou seja, não executar uma instrução lidt ) ou definir um IDT vazio?
Qual é mais útil e qual devo fazer?
Não há diferença prática. Se você não habilitar interrupções ou causar exceções, então é discutível porque a CPU nunca usará o IDT. Se você fizer isso, ambos os casos resultarão em falha.
Especificamente, uma interrupção ou exceção ocorrendo quando o IDT está vazio (limite de 0) causará uma falha tripla e reinicializará a CPU. Se você deixar o IDTR não inicializado, é possível, em princípio, que ele esteja apontando para algo que se assemelha a um IDT válido o suficiente para que a CPU realmente pule para algum lugar se uma interrupção ou exceção ocorrer, e você executaria qualquer lixo que acontecesse. Mais provavelmente, isso não acontece, e uma interrupção ou exceção causaria apenas uma falha tripla como antes.
Então, na prática, você deve deixar as interrupções desabilitadas e evitar causar quaisquer exceções, até que tenha configurado uma tabela de descritores de interrupção real (não vazia). Até lá, é irrelevante o que você faz com o IDTR, então é melhor nem se incomodar em inicializá-lo.