私の最初の答えは以下のとおりですが、これは部分的に正しいです。
私はMITで著者に連絡する自由を取り、次の応答を受け取りました。
if
ラップされたシステムコールの後半のコードはbegin_trans/commit_trans
。後でトランザクションの開始/終了を個々のシステムコールに深く移動しましたが、修正するのを忘れていましたsyscall()
。
したがって、2つの部分は異なり、同じになるように変更された場合、変更によって2つのビットがマージされませんでした。
いいえ、これらの2ビットのコードは同等です。
ある時点で、への呼び出しがパラメータまたは戻り位置のいずれかで何らかの形で異なっていた可能性がありますが、現在はそうではありません。syscalls[?]()
また、そこに何らかのギャップがあった可能性があります。これは、3115行目に空白行があるという事実によってサポートされている可能性があります。
// System call numbers
#define SYS_fork 1
#define SYS_exit 2
#define SYS_wait 3
#define SYS_pipe 4
#define SYS_read 5
#define SYS_kill 6
#define SYS_exec 7
#define SYS_fstat 8
#define SYS_chdir 9
#define SYS_dup 10
#define SYS_getpid 11
#define SYS_sbrk 12
#define SYS_sleep 13
#define SYS_uptime 14
#define SYS_open 15
#define SYS_write 16
#define SYS_mknod 17
#define SYS_unlink 18
#define SYS_link 19
#define SYS_mkdir 20
#define SYS_close 21
これはの内容全体でsyscalls.h
あり、空白行はやや疑わしいものです。
明らかな機能のグループ化はありませんが、15以上のものはすべてファイルシステムの操作に関連しているようSYS_read
でSYS_fstat
、最初のグループに含まれています。
たぶん、あなたは彼らに尋ねるために作者に連絡するべきです(6.828-staff at pdos.csail.mit.edu
)。
私は(私が本を持っているので)それがリストにそのようなギャップがないのでライオンズ時代のコードから引き継がれていないことを知っています-それらもまた異なる順序であり、読み取りと書き込みが隣り合っています例。