]> Projects (at) Tadryanom (dot) Me - AdrOS.git/commitdiff
docs: update POSIX roadmap and persistence notes
authorTulio A M Mendes <[email protected]>
Sun, 8 Feb 2026 11:08:52 +0000 (08:08 -0300)
committerTulio A M Mendes <[email protected]>
Sun, 8 Feb 2026 11:08:52 +0000 (08:08 -0300)
BUILD_GUIDE.md
README.md
docs/POSIX_ROADMAP.md

index eaf0a99925f0d9cc798e4b128965d6f840770efd..6008f82ffa6e6ee7476a1d2412339fbff0f60ffd 100644 (file)
@@ -49,6 +49,10 @@ This produces `adros-x86.iso`.
 make ARCH=x86 run
 ```
 
+Persistent storage note:
+- The x86 QEMU run target attaches a `disk.img` file as an IDE drive (primary master).
+- `/persist` is mounted from this disk and is used by userspace smoke tests (e.g. `/persist/counter`).
+
 If you are iterating on kernel changes and want to avoid hanging runs, you can wrap it with a timeout:
 ```bash
 timeout 60s make ARCH=x86 run || true
index 9512e6e41d19bdc8f320945fb37bd7f1b0ed2b8b..5c35a938495a1149241b3a56c15c2b71949d3385 100644 (file)
--- a/README.md
+++ b/README.md
@@ -48,6 +48,9 @@ AdrOS is a multi-architecture operating system developed for research and academ
   - `SYSCALL_LSEEK`, `SYSCALL_STAT`, `SYSCALL_FSTAT`
   - `SYSCALL_DUP`, `SYSCALL_DUP2`, `SYSCALL_PIPE`
   - `SYSCALL_FORK`, `SYSCALL_EXECVE` (with minimal argv/envp stack setup)
+  - `SYSCALL_SELECT`, `SYSCALL_POLL`
+  - `SYSCALL_SIGACTION`, `SYSCALL_SIGPROCMASK`, `SYSCALL_KILL`
+  - `SYSCALL_SETSID`, `SYSCALL_SETPGID`, `SYSCALL_GETPGRP`
   - Per-process fd table (starting at fd=3)
   - Centralized user-pointer access API (`user_range_ok`, `copy_from_user`, `copy_to_user`)
   - Ring3 init program (`/bin/init.elf`) exercising IO + process + exec smoke tests
@@ -58,10 +61,15 @@ AdrOS is a multi-architecture operating system developed for research and academ
   - Echo + backspace handling
   - Blocking reads with a simple wait queue (multiple waiters)
   - `fd=0` wired to `tty_read`, `fd=1/2` wired to `tty_write`
+  - Minimal termios/ioctl support (`TCGETS`, `TCSETS`, `TIOCGPGRP`, `TIOCSPGRP`)
+  - Basic job control enforcement (`SIGTTIN`/`SIGTTOU` when background pgrp touches the controlling TTY)
 - **Devices (devfs)**
   - `/dev` mount
   - `/dev/null`
   - `/dev/tty`
+- **Persistent storage (x86 / QEMU)**
+  - ATA PIO driver (primary master IDE)
+  - Minimal on-disk persistence filesystem mounted at `/persist` (single `counter` file used by smoke tests)
 - **W^X (Option 1) for user ELFs (x86)**
   - User segments are mapped RW during load, then write permissions are dropped for non-writable segments
   - This provides "text is read-only" hardening without requiring NX/PAE
@@ -83,16 +91,15 @@ QEMU debug helpers:
   - Standardize arch entrypoint behavior (`arch_early_setup`) across architectures
 - **Userspace / POSIX process model**
   - `brk`/`sbrk`
-  - Signals (at least `SIGKILL`/`SIGSEGV` basics)
+  - Signal return ABI (`sigreturn`) and default actions for more signals (current support is minimal)
 - **Syscalls / ABI**
-  - `ioctl` (TTY), `getcwd`, `chdir`
+  - `getcwd`, `chdir`
   - Userspace `errno` variable + libc-style wrappers (`-1` return + `errno` set)
 - **Virtual memory hardening**
   - Option 2: PAE + NX enforcement (execute disable for data/stack)
   - Guard pages, and tighter user/kernel separation checks
 - **Filesystem**
-  - Real persisted storage (ATA/AHCI/virtio-blk or similar)
-  - Persisted storage (ATA/AHCI/virtio-blk or similar)
+  - Expand persisted storage beyond the current minimal `/persist` filesystem
   - Permissions/ownership (`uid/gid`, mode bits) and `umask`
   - Special files: block devices, `/proc`
   - Real on-disk fs (ext2/fat)
index 4600a1fa70485620092d3590399d1023c8fcf5b1..dcedb205cf36a249c180b2441285e38fa85fe1ee 100644 (file)
@@ -54,6 +54,9 @@ Notes:
 - [x] `fork()`
 - [~] `execve()` (loads ELF from InitRD; minimal argv/envp)
 - [x] `getppid()`
+- [x] `select()` / `poll()` (minimal)
+- [~] Basic signals (`sigaction`, `sigprocmask`, `kill`) (delivery model is minimal)
+- [x] `setsid()` / `setpgid()` / `getpgrp()` (minimal)
 
 ### FD layer
 - [x] Per-process fd table (fd allocation starts at 3)
@@ -67,9 +70,14 @@ Notes:
 - [x] Echo + backspace handling
 - [x] Blocking reads (process `BLOCKED`) + wait queue (multiple waiters)
 - [x] `fd=0` wired to `tty_read`, `fd=1/2` wired to `tty_write`
-- [ ] Termios-like configuration
+- [~] Termios-like configuration (minimal: `TCGETS`/`TCSETS`)
+- [~] Sessions / process groups / controlling terminal (minimal: `TIOCGPGRP`/`TIOCSPGRP` + job control checks)
 - [ ] PTY
 
+### Persistence (x86 / QEMU)
+- [x] ATA PIO driver (primary master IDE)
+- [x] Minimal on-disk persistence filesystem mounted at `/persist`
+
 ---
 
 ## 1) Milestone A1 — Process lifecycle: `waitpid` + cleanup on `exit`
@@ -172,20 +180,33 @@ Goal: get a writable filesystem (even if volatile) and a real VFS layout.
 
 ---
 
-## 5) Later milestones (not started)
+## 5) Later milestones (in progress)
 
 ### Process / POSIX expansion
 - [x] `fork()`
 - [~] `execve()`
 - [x] `getppid()`
-- [ ] Signals + basic job control
+- [~] Signals + basic job control (`SIGTTIN`/`SIGTTOU` for background TTY I/O)
 
 ### Pipes + IO multiplexing
 - [x] `pipe()`
 - [x] `dup/dup2`
-- [ ] `select/poll`
+- [x] `select/poll`
 
 ### TTY advanced
 - [ ] termios flags (canonical/raw/echo)
-- [ ] controlling terminal, sessions, pgrp
+- [~] controlling terminal, sessions, pgrp (minimal)
 - [ ] PTY for userland shells
+
+---
+
+## 6) Milestone D1 — Persistent storage (minimal on-disk)
+
+Goal: have at least one end-to-end persisted storage path for smoke tests and future filesystems.
+
+### Block device
+- [x] ATA PIO (primary master IDE)
+
+### Filesystem
+- [x] Minimal persisted filesystem mounted at `/persist`
+- [ ] General-purpose on-disk FS (directories, allocation, metadata)