docs: architecture describes what is built now
kernel (threads, demand paging, TLB shootdowns, dynamic linking, RAM direct map), syscalls, filesystem (/proc, /sys, /dev), terminals (12, VT handshake, ptys), networking (r8169 through LDLS), LDLS (module sets; Linux code may ship), devices (what stays in the kernel; hybrid.md's lasting content), boot (the loader's placement of the kernel), graphics (fbdev, GMMOS, QR 1-40), audio (ALSA over OSS), debugging, usb. New: packages.md (the apk root) and desktop.md (Xorg on the framebuffer). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EVRhxi9zpdW2uDUN4FVcao
This commit is contained in:
parent
655c7d8d01
commit
2556a955b3
15 changed files with 921 additions and 341 deletions
|
|
@ -179,6 +179,10 @@ part of the boot is blank for the part that is hardest to debug any other way.
|
|||
|
||||
---
|
||||
|
||||
A panic is not the end of the log. GMMOS ([graphics.md](graphics.md)) keeps running
|
||||
under the report, can show this log on screen or as QR codes a phone can read, and
|
||||
has a small terminal for looking around a machine whose kernel is dead.
|
||||
|
||||
## Asking a question
|
||||
|
||||
`/dev/dbg` is a conversation: write a line, read the answer.
|
||||
|
|
@ -493,10 +497,16 @@ something that reports nonsense.
|
|||
- **One conversation at a time.** The answer buffer is global, so two programs
|
||||
asking at once get one answer each in some order — never half of the other's,
|
||||
but not two independent sessions either.
|
||||
- **No userspace symbolization.** The kernel names kernel symbols. A fault in a
|
||||
process still reports a bare address, and resolving it is a host-side job.
|
||||
- **The stack walk stops where the frame pointer stops.** `getcallerpcs()` walks
|
||||
`rbp` chains, so a trap frame in the middle of a chain ends the walk.
|
||||
- **No userspace symbolization.** The kernel names kernel symbols. A process
|
||||
killed by a fault is told which *file and offset* it died in (from
|
||||
`/proc/<pid>/maps`' records), which is enough to resolve with the file's own
|
||||
symbols on the host; a bare address is all there is for anonymous memory.
|
||||
- **The stack walk stops where the frame pointer stops, and it will not follow a
|
||||
bad one.** `getstackpcs()` walks `rbp` chains, and each link must go up the same
|
||||
stack by less than `KSTACKSIZE`: a chain can end at the syscall entry with a *user*
|
||||
`rbp` that a program uses as an ordinary register (`-1024` in one game), and
|
||||
dereferencing that under the syscall tracer once panicked the kernel inside
|
||||
`acquire()`. A trap frame in the middle of a chain ends the walk.
|
||||
- **`sysrq g` costs you log history.** Its output goes through `cprintf`, so
|
||||
sixteen kilobytes of views push the same amount out of a 128 KB ring.
|
||||
- **No tracing.** No static tracepoints, no event ring, no counters. "What
|
||||
|
|
|
|||
Loading…
Reference in a new issue