feat(userspace): shell runs programs (ls, cat) via spawn w/ terminal+storage+args page; ext4 holes read as zeros; storage re-attach same buffer
This commit is contained in:
12
docs/ipc.md
12
docs/ipc.md
@@ -74,7 +74,10 @@ calling it (`types::log`) if init gave it a log endpoint.
|
||||
|
||||
A thread made by `SpawnThread`/`SpawnThreadIn` starts with the caller's
|
||||
`arg` in `a0`. A process's first thread reads it as `types::start_arg`:
|
||||
the slots of the console and log capabilities it was handed.
|
||||
the slots of the console, log and storage capabilities it was handed, and
|
||||
whether its parent put an arguments page at `ARGS_VA` (NUL-separated, the
|
||||
program's name first; the parent fills a page and `MapPage`s it over, so
|
||||
the program owns it and it goes when the program does).
|
||||
|
||||
Boot loads only init and storage, both packed into the kernel image (they
|
||||
are what reads the disk, so they cannot come from it). The disk is one ext4
|
||||
@@ -102,7 +105,12 @@ 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.
|
||||
`\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 call-only copies of the terminal (as its log, so its
|
||||
output) and of storage, writes its arguments page, starts it and waits for
|
||||
its death. The programs share the shell's storage badge; storage hands a
|
||||
client that attaches again the same buffer, so they run one at a time.
|
||||
|
||||
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