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
The code is missing the final right brace on function cons2.
The argument registers are named a1 through a4 instead of a0 through a3.
Second line from the bottom should be "read the page into memory from disk"
In newqueue.c, the check for overflow should be >= rather than >.
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).
The comment on argument ssize in create.c should say the stack size is
measured in bytes, not words.
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
In send.c, the test of prptr->prstate==PR_FREE is unnecessary because
the current version of isbadpid() already performs the test.
The phrase ``Once a process as been'' should read ``Once has process
The final reference to getbuf should be ot freebuf.
"ptinit" is misspelled in the panic error message in file ptinit.c.
"original" is misspelled in a comment in ptsend.c.
"The position" should be "The positions".
The second paragraph should have a period at the end.
The argument to sleep and sleepms should be a signed integer rather
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.
In clkinit.c, the comment "reset os complete" should be "reset is complete".
Figure 15.2 should have a right prenthsis on ``(tail''.
Section 15.17 should have "tty" in the tiile. and the first paragraph of
the section is missing a period at the end.
After the comment about wrapping the buffer pointer, the ``if'' statement
references the output buffer variables instead of the input buffer.
After a line kill arrives, when it checks typtr->tyitail for underflow,
ttyhandle_in.c should add TY_IBUFLEN to typtr->tyitail instead of
In cbreak mode, the driver fails to signal the input semaphore when a
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.
The last sentence is ambiguous. A descriptor contains a pointer to the
next "ring descriptor".
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".
The first sentence of 16.8 should say "operating system" instead of "operating".
In the description of seek, "seek option" should be "seek operation"
The first sentence in section 18.11 is confusing, and refers to the
local device that is used to access the remote disk.
The phrase ``contains only'' in the description of a data block should
be 'only contains'. The sentence has been rewritten to clarify the
"data block are present" should be "data block is present"
In lflread.s, "individual" is misspelled in a comment.
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.
In function nammap(), the copy to tmpname should be outside the
The phrase ``network over a network'' should be ``over a network''.
The phrase ``two ampersand characters (%%)'' should be ``two percent
Copy of corrected pages: