2012-04-09 3 views

risposta

6

Se si desidera comprendere questa roba, uno dei modi migliori per avvicinarsi è seguire il processo di avvio Linux Kernel Boot Process attraverso il codice. Ad esempio, supponiamo che tu faccia funzionare Linux su architettura x86. Quello che succede all'avvio è che il BIOS dà il controllo a un boot loader. Il boot loader in terna dà il controllo del kernel.

Il kernel quindi esegue un processo per avviarsi. Inizialmente la maggior parte delle cose è scritta in linguaggio assembly - vedi /arch/x86/boot/header.S

Quindi va a /arch/x86/boot/main.c. Proprio alla fine della funzione principale vedrete la chiamata a go_to_protected_mode()

Si può vedere che la funzione in /arch/x86/boot/pm.c

Quindi, una volta che si avvia nel kernel, esso diventa il gateway per la CPU e il codice viene eseguito nella macchina virtuale fornita dal kernel. I programmi utente non possono essere eseguiti in altre modalità dal fatto che devono fare tutto attraverso questa macchina virtuale.

1

La modalità utente può modificare la modalità privilegiata solo generando una sorta di interrupt. Sembra che lo scopo dell'interrupt sia cambiare la modalità privilegiata del programma. Alla generazione di qualsiasi interrupt normale, la modalità privilegio è elevata e parte il codice del kernel in esecuzione ..... Conclusione: interrompendo se stesso, il programma in modalità utente non può elevare i privilegi e mantenere in esecuzione il proprio codice .... Ecco come questa grande sicurezza meccanismo funziona.

Billmic