forkとexecをなぜ分ける設計にしたかの説明が出てきます。

Code: File descriptors

・プロセスは、ファイル、ディレクトリ、デバイスをオープンするか、パイプを生成するか、既存のdescriptorを複製することによりdescriptorを得る。
・プロセス毎に0から始まる複数のdescriptorを持つ。
・標準入力が0、標準出力が1、標準エラーが2番。
・read(fd, buf, n)はfdから最大でnバイト読み出してbufにコピーする。読み出したバイト数を返す。
・descriptor毎にoffsetを持ち、readした分ずれていく。
・read(fd, buf, n)が0を返すときend of fileの意味。
・write(fd, buf, n)はfdにbufからfdに書き込んだバイト数を返す。返値がnより小さければエラーである。
・descriptor毎にoffsetを持ち、writeした分ずれていく。
・close(fd)によりdescriptorを開放する。
・新たに割り当てられるdescriptorは現プロセスで使用していない最小番号のdescriptorである。
・descriptorとforkによってI/Oリダイレクションがうまく実装できる。
・forkによって子プロセスは親プロセスと全く同じファイルがオープンされた状態で始まる。
・execによってメモリは置き換えられるがfileテーブルはそのまま保たれる。
・cat < input.txt は、シェルによってclose(0);open("input.txt", O_RDONLY);することにより0番としてinput.txtがオープンされる。0番を開放した直後なので最小番号の0番が割り当てられるから。
このように、forkとexecが分かれていることにより、シェルは子プロセスが目的のプログラムを走らせる前に子プロセスに設定変更することができる。←うまい設計!
・親プロセスと子プロセスでoffsetは共有される。
・dupによって複製されたdescriptorは同じI/Oオブジェクトを参照しているのでoffsetも共有される。
・File descriptorにより実際に操作している対象が何であるかを隠蔽するという強力な抽象化がなされる。
やっとxv6の資料を読む時間がとれました。今後はポイントと思った箇所のメモを残すこととします。

ELFのentry pointの件がすっと頭に入ったのはkozos効果ですね。(^_^)v

Operating system interfaces

・OSの実装を簡単にする一方多様な機能を持たせるためには、組み合わせれば幅広い機能を提供できるような少数の仕組みに依存するインターフェースを設計する。
・xv6は通常のUnixのsystem callのサブセットを提供する。
(fork, exit, wait, kill, getpid, sleep, exec, sbrk, open, read, write, close, dup, pipe, chdir, mkdir, mknod, fstat, link, unlink)
・シェルはユーザープログラムであり何ら特別なものではないことが、system callの威力を示している。

Code: Processes and memory

・forkで親プロセスと全く同じメモリ内容を持つ新しいプロセスを作ることができる。
・forkは親プロセスと子プロセス両方にリターンする。親プロセスには子プロセスのpidを返し、子プロセスには0を返す。
・waitはカレントプロセスの子プロセスでexitしたもののpidを返す。子プロセスがexitするまでは待つ。
・execは呼んだプロセスのメモリをファイルからロードした内容に置き換える。ファイルのフォーマットとしてはELFを採用する。
・execは成功した場合呼んだプロセスにリターンせず、ELFのentry pointから実行を始める。
・forkとexecを単一のsystem callにしなかったことが賢い設計であることは後々分かる。
・ユーザー間のプロテクトがない。言い換えればプロセスはrootとして走る。
本は一旦終わりとし、WebにあったPOCOのマルチサイクル化の資料を読んでいます。

IF(インストラクション・フェッチ)、ID(インストラクション・デコード)、EX(エグゼキュート)、WB(ライトバック)の4サイクル版です。Webには2サイクル版、3サイクル版もありましたが、通常4サイクルが多いような気がするのでこれを勉強することにしました。

1サイクル版のVerilogコードに対してどこがなぜそのように変わったのか考えながら読んでいます。納得がいったら、JALR命令や割込み機能の追加をしたいと思います。