Files
aios/docs/MINIMAL_OS_DESIGN.md
2025-07-05 17:21:10 +09:00

293 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 最小限OS構成設計Redox OSベース
## Redox OS分析結果
### 1. **最小構成の特定**
#### コアコンポーネント196MiB以下
```toml
# config/minimal.toml から抽出
[packages]
base = {} # 基本システム(~20MB
base-initfs = {} # 初期ファイルシステム(~5MB
bootloader = {} # ブートローダー(~2MB
drivers = {} # 最小ドライバー(~15MB
kernel = {} # マイクロカーネル(~5MB
relibc = {} # C標準ライブラリ~10MB
coreutils = {} # 基本コマンド(~8MB
ion = {} # シェル(~3MB
```
#### 初期化プロセス
```bash
# 00_base: 基本システム初期化
rm -r /tmp # 一時ディレクトリクリア
mkdir -m a=rwxt /tmp # 一時ディレクトリ作成
ipcd # IPCデーモン
ptyd # PTYデーモン
sudo --daemon # Sudoデーモン
# 00_drivers: ドライバー初期化
pcid-spawner /etc/pcid.d/ # PCIドライバー
```
### 2. **AIOS向け最小構成実装**
#### ディレクトリ構造
```
aios-minimal/
├── kernel/ # Redoxカーネルベース
│ ├── Cargo.toml
│ ├── src/
│ │ ├── main.rs # カーネルエントリーポイント
│ │ ├── memory/ # メモリ管理
│ │ ├── syscall/ # システムコール
│ │ └── scheme/ # スキームベースFS
├── bootloader/ # ブートローダー
├── userspace/ # ユーザーランド
│ ├── init/ # 初期化プロセス
│ ├── shell/ # Rustシェル
│ └── coreutils/ # 基本コマンド
└── config/
└── minimal.toml # 最小構成設定
```
#### カーネル最小化kernel/Cargo.toml
```toml
[package]
name = "aios-kernel"
version = "0.1.0"
edition = "2021"
[dependencies]
# 必要最小限の依存関係のみ
bitflags = "2"
spin = "0.9.8"
linked_list_allocator = "0.9.0"
redox_syscall = { git = "https://gitlab.redox-os.org/redox-os/syscall.git", default-features = false }
[features]
default = [
"serial_debug", # シリアルデバッグのみ
]
# 不要機能を削除
# acpi = [] # ACPI無効化
# multi_core = [] # シングルコアのみ
# graphical_debug = [] # グラフィカルデバッグ無効
```
#### 最小カーネル実装kernel/src/main.rs
```rust
//! AIOS Minimal Kernel
#![no_std]
#![no_main]
#![feature(allocator_api)]
use core::panic::PanicInfo;
mod memory;
mod syscall;
mod scheme;
/// カーネルエントリーポイント
#[no_mangle]
pub extern "C" fn kmain() -> ! {
// 基本初期化
memory::init();
scheme::init();
syscall::init();
// 最初のユーザープロセス起動
let init_pid = syscall::exec("/usr/bin/init", &[]).expect("Failed to start init");
// メインループ
loop {
syscall::sched_yield();
}
}
#[panic_handler]
fn panic(_info: &PanicInfo) -> ! {
loop {}
}
```
#### シンプルな初期化プロセスuserspace/init/src/main.rs
```rust
//! AIOS Init Process
use std::process::Command;
fn main() {
println!("AIOS Init Starting...");
// 基本デーモン起動
spawn_daemon("ptyd"); // PTY管理
spawn_daemon("sudo"); // 権限管理
// シェル起動
Command::new("/usr/bin/shell")
.spawn()
.expect("Failed to start shell");
// プロセス管理ループ
loop {
// ゾンビプロセス回収
std::thread::sleep(std::time::Duration::from_secs(1));
}
}
fn spawn_daemon(name: &str) {
Command::new(format!("/usr/bin/{}", name))
.spawn()
.unwrap_or_else(|_| panic!("Failed to start {}", name));
}
```
#### 軽量シェル実装userspace/shell/src/main.rs
```rust
//! AIOS Minimal Shell
use std::io::{self, Write};
use std::process::Command;
fn main() {
println!("AIOS Shell v0.1.0");
loop {
print!("aios> ");
io::stdout().flush().unwrap();
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let input = input.trim();
match input {
"exit" => break,
"help" => show_help(),
cmd if !cmd.is_empty() => execute_command(cmd),
_ => {}
}
}
}
fn execute_command(cmd: &str) {
let parts: Vec<&str> = cmd.split_whitespace().collect();
if parts.is_empty() { return; }
match Command::new(parts[0])
.args(&parts[1..])
.status()
{
Ok(status) => {
if !status.success() {
println!("Command failed with exit code: {:?}", status.code());
}
}
Err(e) => println!("Failed to execute command: {}", e),
}
}
fn show_help() {
println!("Available commands:");
println!(" ls - List files");
println!(" cat - Show file contents");
println!(" echo - Print text");
println!(" help - Show this help");
println!(" exit - Exit shell");
}
```
#### 構成ファイルconfig/minimal.toml
```toml
# AIOS Minimal Configuration
[general]
filesystem_size = 128 # 128MiBRedoxの196MiBより小さく
prompt = false
[packages]
aios-kernel = {}
aios-init = {}
aios-shell = {}
aios-coreutils = {}
# 最小ファイルシステム
[[files]]
path = "/usr/lib/init.d/00_base"
data = """
mkdir -p /tmp /var/log
aios-init
"""
[[files]]
path = "/etc/hostname"
data = "aios"
# ユーザー設定
[users.root]
password = "root"
uid = 0
gid = 0
shell = "/usr/bin/aios-shell"
```
### 3. **メモリ使用量最適化**
#### カーネル最適化
- **スタックサイズ**: 4KB最小限
- **ヒープサイズ**: 1MB動的拡張
- **バッファサイズ**: 512B固定
#### ユーザーランド最適化
```rust
// メモリ制限
const MAX_PROCESSES: usize = 16; // 最大プロセス数
const MAX_FILES: usize = 64; // 最大ファイル数
const STACK_SIZE: usize = 8192; // プロセススタック8KB
```
### 4. **ビルドシステム**
#### Makefile
```makefile
# AIOS Minimal Build System
TARGET = x86_64-unknown-none
ARCH = x86_64
CONFIG = minimal
.PHONY: all kernel userspace iso clean
all: iso
kernel:
cd kernel && cargo build --release --target $(TARGET)
userspace:
cd userspace && cargo build --release
iso: kernel userspace
mkdir -p build/iso
cp kernel/target/$(TARGET)/release/aios-kernel build/iso/
cp userspace/target/release/* build/iso/
grub-mkrescue -o aios-minimal.iso build/iso
clean:
cargo clean
rm -rf build/
```
### 5. **機能制限とトレードオフ**
#### 削除される機能
- マルチコア対応
- ACPI高度機能
- グラフィカルデバッグ
- 複雑なファイルシステム
- ネットワーク機能
#### 保持される機能
- 基本的なプロセス管理
- シンプルなファイルシステム
- 最低限のメモリ管理
- シリアル出力
- 基本的なシステムコール
この設計により、**128MB以下の極小OS**を実現できます。