feat(userspace): programs in /bin w/o .elf; bin manifests (needs = display) so shell runs snake; Ctrl+C kills foreground via terminal interrupt notification; ctrl keys; sleep
This commit is contained in:
21
docs/ipc.md
21
docs/ipc.md
@@ -116,12 +116,21 @@ font. Its output side is the log protocol (`types::log`), so a program whose
|
||||
log endpoint is the terminal prints there with `println!`: standard output
|
||||
is whatever text endpoint a program was given. `READ` (`types::terminal`)
|
||||
blocks until a line is typed and returns it in chunks, the last ending in
|
||||
`\n`. The desktop is the shell, given the terminal, storage and a spawn
|
||||
allowance. A command that is not a built-in runs `name.elf`: the shell
|
||||
spawns it, gives it a call-only copy of the terminal (as its log, so its
|
||||
output) and a read-only storage grant to the shell's current directory
|
||||
(`cd`, `pwd`), writes its arguments page, starts it, waits for its death
|
||||
and releases the grant.
|
||||
`\n`. Ctrl+C there drops the line. Keys typed while no line is read are
|
||||
kept for the next one, except Ctrl+C, which signals the notification its
|
||||
first `ON_INTERRUPT` caller gave. `REDRAW` repaints the screen and takes
|
||||
input focus back.
|
||||
|
||||
The desktop is the shell, given the terminal, storage, the display and a
|
||||
spawn allowance. Programs live in `/bin`, without extensions. A command
|
||||
that is not a built-in runs `/bin/name`: the shell spawns it, gives it a
|
||||
call-only copy of the terminal (as its log, so its output) and a read-only
|
||||
storage grant to the shell's current directory (`cd`, `pwd`), writes its
|
||||
arguments page, starts it, waits for its death (Ctrl+C kills it) and
|
||||
releases the grant. `/bin/name.manifest` (`types::manifest`) asks for more:
|
||||
`needs = display` gets the display (`StartArg::display`), with which the
|
||||
program takes focus; the shell has the terminal redraw once it is gone. A
|
||||
need the shell does not know, it refuses to run.
|
||||
|
||||
Only init holds `ProcessCreate`. Everyone else runs programs through init's
|
||||
spawn service (`types::spawn`, client `libkos::spawn`), which init serves
|
||||
|
||||
Reference in New Issue
Block a user