Errata for

Crowley’s Operating Systems Book

Last change: 10 February 1999

This document lists the known errors in the book. The first number of each error entry is the page number the error occurs on. The second number is the line number the error occurs on. This may be a range of lines. The line numbers are counted from the top of the page. Line numbers ending in a "b" are counted from the bottom of the page. All text lines (except completely blank lines) are counted in the line count, including section headers. Figure captions and the header lines at the top of the page (with the chapter name and page number) are not counted in the line count.

Chapter 1

None found yet

Chapter 2

17 8-11 Change "function call" to "procedure call" (four times)

19 14-20 The "asm block" is not available in most C and C+ compilers.

20 18b to 15b Change the numbered points to bulleted points.

22 10b Remove "volatile" [Misuse of volatile. The register is but the pointer is not.]

22 8b Change "(void **)" to "(void *)"

24 18b Change "Give" to "Show".

Chapter 3

40 2 Change "int fileName" to "char * fileName".

75 1 All the system call names in parentheses should be in Courier font.

97 11 Change "toPosition++" to "newPosition++"

Chapter 4

103 7 Change "step" to "steps"

Chapter 5

124 12 Change "Queue<MessageBuffer *>" to "Queue<int>".

124 14 Change "pointer to" to "the index of a"

126 11b Change "pd[pid].slotAllocated" to "!pd[pid].slotAllocated"

127 16 Move this line "IssueDiskRead(…)" after the next two lines "while( DiskBusy() ) ;" [This is a partial fix for a bug. If the disk driver has the disk busy here then we should wait for it. But the disk interrupt will still be lost.]

129 1b Change "return current_process;" to "{pd[current_process].state = Running; return current_process; }" [The state was not changed in this case]

142 1b Change "new Queue<MessageBuffer *>" to "new Queue<int>"

143 25 Change "wait_queue.Remove()" to "wait_queue[to_q].Remove()"

143 8b Change "new WaitQueuItem" to "new WaitQueueItem"

145 20b Change "related by" to "relocated by"

149 10 Change "disk_status" to "disk_status_reg"

170 14 Change "current_process == 0" to "current_process <= 0" [The value of interest is actually –1.]

170 16 Add after this line the new line "d. pd[current_process].slotAllocated == False" [This case was added later and didn’t make it into the question.]

171 20b Change "return code" to "exit code" [wrong terminology]

173 11 Change "Receive Message" to "ReceiveMessage" [no space]

Chapter 6

186 20b After this line add the new line "pd[next_proc].state = Running;"

186 12b This line should be indented more.

189 17b Change "ProcessTableFreeFlag" to "shared_memory_flag"

189 13b Change "ProcessTableFreeFlag" to "shared_memory_flag"

192 4b In figure 6.9 Change the lower "Process table 1" to "process table 2".

193 11 Remove the marginal term "spin lock" since there already is one on page 187.

200 12 Move this line ("IssueDiskRead(…)" after the next two lines ("while(DiskBusy());")

200 20 After this line add the new line "if(tid == -1) return –1;"

200 6b Change "td[tid].sa.r30" to "td[tid].sa.[r30]"

201 14 At the end of this line append "&& td[current_thread].slotAllocated"

200 15 Change "pd" to "td".

200 16 Change "pd" to "td".

200 17 Change "return current_thread;" to "{ td[current_thread].state = Running; return current_thread;}"

202 14 Change "pd" to "td".

207 7b This uses "sa" which was eliminated. To fix this we have to allocate and set up a save area when we create the process.

208 7 Change "char ** savearea" to int ** savearea".

209 5b Change "pid" to "current_process"

211 2 Eliminate "int pid".

225 14b-12b Change the four occurrences of "clock" with "timer".

226 7 Change "running process" to "process being run by the other processor".

228 14 Change "194" to "218"

228 16 Change "this_process_number" to "this_process"

228 18 Change "this_process_number" to "this_process"

228 11b Change "194" to "218"

Chapter 7

260 7-23 These lines should be indented more.

Chapter 8

337 2b Change "process" to "task".

347 5b-1b Problem 21 is nearly identical to problem 20.

349 1-3 Eliminate problem 30 which is the same as problem 26.

Chapter 9

None found yet

Chapter 10

408 1 Title of Figure 10.26 should be "Allocating memory in a paging system"

426 4 Problems 2 and 9 are quite similar.

428 6 Change "free list" to "block list"

Chapter 11

481 20 Change "addresses" to "addressed"

481 23 Change "addresses" to "addressed"

Chapter 12

507 9b Change "lower" to "higher"

507 8b Change "higher " to "lower"

536 18 Add "port" as a margin word.

542 1-2 Change "FCFS algorithm with a free page list that is used FCFS" to "FIFO algorithm with a standby page list that is used FIFO"

Chapter 13

569 18 Delete "We see from the above model that"

Chapter 14

613 11b Change "single scan line" to "single scan line,"

614 9 Change "shown" to "should"

Chapter 15

648 12 Problems 10 and 15 are similar.

Chapter 16

655 8 Change "File system levels" to "File system context"

661 5b Change "nfs/chaco/u2/maccabe/osbook/Ch2" to "/nfs/chaco/u2/maccabe/osbook/Ch2"

662 5 Change "[book]ch01" to "[book]ch02"

680  12b Change "/" to "%" (use mod instead of divide)

681 13 Change "if [" to "if (".

Chapter 17

727 1 (label of Figure 17.20) Replace "The UNIX file pointer structure" with "Booting an operating systems"

Chapter 18

None found yet

Chapter 19

773 1 (label of figure 19.2) Change "Resources" to "Resource management"

776 18b Change "process" to "processes"

812 Figure 19.10 Change the label on the line from 7 to 8 from "Zcode(PutA?)" to "Zcode(PuA?)"

Chapter 20

822 3b Change "7" to "7,"

839 1b (label of figure 20.12) Change "system process OS model" to "Networked operating system"