docs: documented Panic screen output
This commit is contained in:
parent
5eab21e98a
commit
a57f2c25de
|
@ -45,6 +45,62 @@ When the Computer is in paging mode, only mapped pages are accessible.
|
|||
Now every Process gets its own page table and tada: we have successfully isolated the processes from each other,
|
||||
because every process can only access the data that it needs to access.
|
||||
|
||||
## Panic screen
|
||||
When a fatal / not recoverable error occurs, the kernel panics. It logs panic information and then halts forever.
|
||||
Such a panic log can look like the following one:
|
||||
```
|
||||
[ Error ] !=====[ KERNEL PANIC ]=====!
|
||||
Interrupt ID: 0x0E
|
||||
Error Code: 0b00000000000000000000000000000010
|
||||
Error Message: Page Fault
|
||||
|
||||
Paging Info:
|
||||
Page Map: 0x000000000FB0A000
|
||||
|
||||
CPU Flags:
|
||||
Parity
|
||||
Sign
|
||||
|
||||
CPU Registers:
|
||||
RIP: 0xFFFFFFFF8000027A RAX: 0x0000100000079838 RBX: 0x0000000000000000
|
||||
RCX: 0xFFFFFFFFFFFFFFD8 RDX: 0x0000000000000000 RSI: 0x0000000000000000
|
||||
RDI: 0x0000100000079838 RBP: 0xFFFF80000FB1AF10 RSP: 0xFFFF80000FB1AEF0
|
||||
|
||||
[ Warning ] !=====[ HALTING SYSTEM ]=====!
|
||||
```
|
||||
but what does it say?
|
||||
|
||||
In most cases, a panic occurs while handling an interrupt.
|
||||
If this is the case, we will have the state of the cpu while it was interrupted.
|
||||
This cpu state provides us very much information.
|
||||
|
||||
`Interrup ID` tells us, which interrupt caused the panic.
|
||||
In this case the ID is `0x0E`, a `Page Fault Exception`.
|
||||
|
||||
`Error Code` is a binary representation of the 32 least significant bits of the error code pushed by some interrupts.
|
||||
If an interrupt pushes no error code, this will be just zeros.
|
||||
In our example the code tells us, that the error happened because of a write attempt to a not present page.
|
||||
|
||||
`Error Message` tells us, what happened.
|
||||
|
||||
`Paging Info` contains all information about paging.
|
||||
At the moment, this is just the physical address of the loaded page map.
|
||||
|
||||
`CPU Flags` contains information about which bits are set in the CPU status register.
|
||||
If this block doesn't appear, there are no bits set.
|
||||
|
||||
`CPU Registers` contains the data, in the main cpu registers.
|
||||
This is probably the most interesting block, because you get very detailed information out of here,
|
||||
if you know what each of these registers does in the cpu.
|
||||
|
||||
### Panic without interrupt
|
||||
If the panic wasn't caused by an interrupt, it has no cpu_state, and because of that it has no detailed info about the execution state.
|
||||
In this rare case, you will get the following message:
|
||||
```
|
||||
No detailed Information available (cpu_state null reference)
|
||||
```
|
||||
The `Error Message` could still be helpful, but good luck finding that bug.
|
||||
|
||||
## Format strings
|
||||
Format strings are strings that are formatted at runtime.
|
||||
They are created by defining a pattern, like the following one:
|
||||
|
|
Loading…
Reference in New Issue