Operating System Design -- The Xinu Approach, Second Edition
In comments in chprio.c, create.c kill.c, receive.c, recvclr.c, resume.c,
send.c, suspend.c, unsleep.c, and wait.c, the possessive process' should be
process's.
Page 28
The code is missing the final right brace on function cons2.
Page 46
The argument registers are named a1 through a4 instead of a0 through a3.
Page 48
Second line from the bottom should be "read the page into memory from disk"
Page 71
In newqueue.c, the check for overflow should be >= rather than >.
Page 90
The explanation of storing multiple registers on a RISC machine
should say that although ARM does have an instruction to store
multiple registers, the instruction takes multiple cycles (like
a CISC machine).
Page 112
The comment on argument ssize in create.c should say the stack size is
measured in bytes, not words.
Page 139
Exercise 7.8 is now superfluous because the latest version
of Xinu already includes signaln.
Exerecise 7.12 should say ``When it moves the current process to the waiting
state,...''.
Page 147
In send.c, the test of prptr->prstate==PR_FREE is unnecessary because
the current version of isbadpid() already performs the test.
Page 177
The phrase ``Once a process as been'' should read ``Once has process
has been''.
Page 180
The final reference to getbuf should be ot freebuf.
Page 198
"ptinit" is misspelled in the panic error message in file ptinit.c.
Page 201
"original" is misspelled in a comment in ptsend.c.
Page 219
"The position" should be "The positions".
Page 239
The second paragraph should have a period at the end.
Pages 241-243
The argument to sleep and sleepms should be a signed integer rather
than unsigned.
Page 251
The sentence, ``Clkhandler begins by incrementing local variable count1000''
should say ``Clkhandler begins by decrementing local variable count1000''.
In succesive sentences, the references to ``clkdisp'' and ``clkint'' should
refer to clkhandler.
Page 253
In clkinit.c, the comment "reset os complete" should be "reset is complete".
Page 291
Figure 15.2 should have a right prenthsis on ``(tail''.
Page 306
Section 15.17 should have "tty" in the tiile. and the first paragraph of
the section is missing a period at the end.
Page 309
After the comment about wrapping the buffer pointer, the ``if'' statement
references the output buffer variables instead of the input buffer.
Page 310
After a line kill arrives, when it checks typtr->tyitail for underflow,
ttyhandle_in.c should add TY_IBUFLEN to typtr->tyitail instead of
typtr->tyhead.
In cbreak mode, the driver fails to signal the input semaphore when a
character arrives.
Page 315
The reference to variable ``csptr'' is out of date; the code now uses
variable name ``uptr'' to reflect that the underlying hardware is a UART.
Page 331
The last sentence is ambiguous. A descriptor contains a pointer to the
next "ring descriptor".
Page 335
To be clear, the comment in ether.h on line 14 should say "NIC_TYPE_..." instard of
"NIC Type_...". Also, a later comment has "register" misspelled as "regsiter".
Page 336
The first sentence of 16.8 should say "operating system" instead of "operating".
Page 418
In the description of seek, "seek option" should be "seek operation"
Page 418
The first sentence in section 18.11 is confusing, and refers to the
local device that is used to access the remote disk.
Page 462
The phrase ``contains only'' in the description of a data block should
be 'only contains'. The sentence has been rewritten to clarify the
meaning.
Page 484
"data block are present" should be "data block is present"
Page 487
In lflread.s, "individual" is misspelled in a comment.
Page 532
In the code for rflread.c, calls to htonl() should be replaced
by calls to ntohl(). The code works as is, but the conversion is
really from network to host byte order.
Page 556
In function nammap(), the copy to tmpname should be outside the
loop.
Page 574
The phrase ``network over a network'' should be ``over a network''.
Page 613
The phrase ``two ampersand characters (%%)'' should be ``two percent
characters (%%)''.
Copy of corrected pages: