技術

[xv6 #1] Chapter 0 – Operating system interfaces

テキストの7,8ページ

概要

xv6はユーザー空間とカーネル空間に分かれている。
ユーザー空間のプロセスからOSのインターフェースを通してカーネルが提供するサービスを呼び出すことをシステムコールという。
そしてこれはプロセスがユーザー空間とカーネル空間で交互に実行される事を示す。
カーネルはCPUにハードウェア実装された保護機構を使って、ユーザー空間のプロセスが自分自身のメモリ領域へのみアクセス可能なようにする。

xv6のシステムコール一覧

fork()	プロセスの生成
exit()	現在のプロセスを終了
wait()	子プロセスを待つ
kill(pid)	pidのプロセスを終了
getpid()	現在のプロセスのpidを返す
sleep(n)	単位時間 x nだけ寝る
exec(filename, *argv)	ファイルを読み込んで実行する
sbrk(n)	プロセスのメモリをnバイト増やす
open(filename, flags)	ファイルを開く(flagsは読み書きフラグ)
read(fd, buf, n)	開いてるファイルからnバイト読み込んでbufに入れる
write(fd, buf, n)	開いてるファイルにbufの内容をnバイト書き込み
close(fd)	開いてたファイルを解放する
dup(fd)	fdを複製する
pipe(p)	パイプを生成してpのfdを返す
chdir(dirname)	現在のディレクトリを変更する
mkdir(dirname)	新しいディレクトリを作成する
mknod(name, major, minor)	デバイスファイルを作成する
fstat(fd)	開いてるファイルの情報を返す
link(f1, f2)	ファイルf1の別名f2を作成
unlink(filename)	ファイルを削除する

シェルはユーザー空間で実行される通常のプログラムであってカーネルの一部ではない。
内部でシステムコールを使ってるだけである。
だからシェルを入れ替えるのは簡単である。
世の中のUnixベースのシステムは多くのシェルの選択肢を持つ。
xv6のシェルはUnix Bourne shellを元にしたシンプルなものである。

感想

Chapter 0のさわりって事もあって、OSのコード書いたり読んだりしたことなくても何となく知ってる内容でした。
読み違えてなければxv6のシステムコールは上記で全てなので、僕でも中身を理解できそうかもと思えてきました。
一日2ページぐらいのペースでテキストを読み進められればいいなぁ(*´∀`*)ポワワ

コメントを残す

メールアドレスが公開されることはありません。



※画像をクリックして別の画像を表示