ウォンツテック

そでやまのーと

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ローダの読み込み方がまずいかと思われます。

追記

write.Sのret前のpoplが無いだけの問題だったので修正。ただprocces1,2,3が交互に実行されず何故か1と3だけが実行されている。

sodex rev.26