OS作成
ユーザ用プロセスのためにファイルシステム生成回り(kmkfs.cpp)を改良。
sodexファイルシステム上の/usr/bin以下に設置したファイルを全て読み込んでおくことにしました。その他ファイルシステム構築時の細かいところも修正。
また、簡単なcrt0.Sとシステムコール用ライブラリを用意し以下のようなmainを使ったプロセス用のコードを実行出来るようにしました。
proc3.c
int main(int argc, char** argv) { char *mes = "process 3\n"; while (1) { write(1, mes, 10); } return 0; }
write.S
#include <sys/syscalldef.h> .global write write: pushl %ebp movl %esp, %ebp movl $SYS_CALL_WRITE, %eax movl 0x8(%ebp), %ebx movl 0xC(%ebp), %ecx movl 0x10(%ebp), %edx int $0x80 popl %ebp ret
crt0.S
SYS_CALL_EXIT = 1 .text .global _start _start: call main movl %eax, %ebx movl $SYS_CALL_EXIT, %eax int $0x80
これを実行すると1回目は「process 3」と表示されますがその直後にページフォルトが発生します。恐らくelfローダの読み込み方がまずいかと思われます。