Мой первоначальный ответ ниже, который частично прав.
Я позволил себе контактирование авторов на MIT и получил следующий ответ:
Кода во второй половине if
обернутого системный вызов в begin_trans/commit_trans
. Позднее мы перешли на начало/конец транзакции на отдельные системные вызовы, но забыли исправить syscall()
.
Таким образом, две части были разные, и, когда они были изменены, чтобы быть таким же, модификация просто не объединить два бита вместе.
Нет, эти два бита кода эквивалентны.
Это может быть быть в какой-то момент, когда звонки 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
).
Я знаю (так как у меня есть книга), что он не переносится из кода эпохи Львов, поскольку у него нет таких пробелов в списке - они также в другом порядке, а также читать и писать дальше друг к другу, например.
Два утверждения внутри 'if', вероятно, были разными, но позже были изменены. Есть ли какой-нибудь журнал изменений, который вы можете проверить для файла (например, как CVS/SVN/GIT журнал?) В противном случае вы должны спросить разработчиков. –