The University of Queensland Homepage
School of ITEE ITEE Main Website

 COMP3300 Operating System Resources

COMP3300 – Operating Systems resources

Updated on Friday, 4 March 2005 at 11:54 AM

Watch this page for more links. Assignment-specific content will be updated when assignments are published.

Most will be free; you can access the ACM digital library from campus computers. The IEEE digital library can be accessed via the university library pages. If you want to develop yourself long-term as a professional, consider joining the ACM or IEEE. (Would you go to a doctor who had not looked at any published research since graduating? Then again, leeches are coming back after a century or so in limbo … )


Specifically to threads, here are some resources.

IEEE Std 1003.1-2001 <http://www.unix-systems.org/version3/ieee_std.html> (POSIX)

Open Source POSIX Threads for Win32 <http://sources.redhat.com/pthreads-win32/>

For paging, here is some extra reading which may lead to Assignment 2.

B. Jacob, and T. Mudge. Virtual memory in contemporary microprocessors. IEEE Micro, vol. 18, no. 4 July/August 1998, pp. 60–75.. PDF at <http://www.eecs.umich.edu/~tnm/papers/vm-hardware.pdf> – a useful summary of the way paging etc. are implemented on popular real systems.

The IBM RS/6000 (predecessor of PowerPC and POWER RISC architectures) version of inverted page table is an interesting example <http://www.cs.nmsu.edu/~pfeiffer/classes/473/notes/ipt.html>

For a research project using virtual memory, see the RAMpage project at <http://www.itee.uq.edu.au/~philip/Research/Architecture/rampage.html>.


In Chapter 8, graphs are used to represent potential deadlock situations. You need not understand much more than basic notation, but for those who want to know more, here is a site with common terminology:

Chris Caldwell. Graph Theory Glossary, 1995, <http://www.utm.edu/departments/math/graph/glossary.html>

Here is some further reading on synchronization (Chapter 7), in case you want to delve into some of the research behind the material in the course:

J. Anderson. Lamport on mutual exclusion: 27 years of planting seeds, Proc. 20th ACM Symposium on Principles of Distributed Computing, Newport, RI, August 2001 pp 3–12, <http://www.cs.unc.edu/~anderson/papers/lamport.pdf>


To extend the material in the book (Chapter 6, which is a bit thin), here is more on processes and threads on specific operating systems, as well as some more up to date simulation concepts:

Windows 2000

Solaris threads

Soft realtime on Linux:

Mansoor Alicherry and K Gopinath. Predictable Management of System Resources for Linux, Proceedings of the FREENIX Track: 2001 USENIX Annual Technical Conference, June 25-30, 2001, Boston, MA <http://www.usenix.org/events/usenix01/freenix01/full_papers/alicherry/alicherry_html/>

A fair share scheduler is an interesting variation, which ensures that all processes get a fair go at the CPU. Although an old idea, it’s still interesting. Do a google <http://www.google.com/> search to see if it’s still in use:

J. Kay and P. Lauder. A fair share scheduler, Communications of the ACM, vol. 31 no. 1 January 1988, pp 44–55. <http://doi.acm.org/10.1145/35043.35047>

Full-system simulation is a growing trend in Computer Architecture research, and simulations are now available which are detailed enough and fast enough to boot a whole operating system. While not originally designed for OS research, they would be good tools e.g. to investigate alternative scheduling strategies. Examples:

m5 is a relatively new project at University of Michigan which can either run standalone programs or boot a complete system. It was designed initially around the Alpha instruction set, but comes with an instruction set description language to allow other instruction sets to be implemented

SimOS (free but boots proprietar OSes) simulates a Silicon Graphics system, and boots a full version of Irix 5.3; there are other versions including one simulating an Alpha processor running the Tru64 version of UNIX

Simics (commercial but free academic individual license) simulates a variety of architectures and can boot a range of operating systems, with tools to inspect the result of simulated execution at various levels of detail

ML-RSIM (free) is a fairly complete SPARC simulator (some details are fudged), which boots its own version of NetBSD (with some details simplified to match the fudged details of the simulator)


The Linux Documentation Project, <http://www.tldp.org/guides.html>, also at <http://www.ibiblio.org/mdw/guides.html> of which:

Sven Goldt, Sven van der Meer, Scott Burkett and Matt Welsh. The Linux Programmer's Guide Version 0.4, March 1995, <http://www.tldp.org/LDP/lpg/>

Tigran Aivazian. Linux Kernel 2.4 Internals, 7 August 2002 <http://www.tldp.org/LDP/lki/index.html>

will be most useful. (It mostly seems OK but some things are dated: let me know if you find a more recent alternative.)

To navigate the source of an operating system, try LXR Cross Referencer at <http://lxr.linux.no/>, in the process of moving to <http://sourceforge.net/projects/lxr>

For more on where free software comes from, <http://www.gnu.org/> explains the GNU (GNU is Not UNIX) project. “Free” in this sense equates with liberty, not “free” as in “free beer”. The Free Software Foundation’s web site <http://www.fsf.org/> resolves to the same address. Documentation which could be of relevance to this course can be found at

<http://www.gnu.org/doc/doc.html>

For programming aspects of the course, some of you may find these notes I wrote in 1994 useful, but you will need to check them against a more recent C++ reference:

C and C++ in 5 Days

If you want to use the emacs editor, here is a useful tutorial to get you started quickly.

If there is enough interest, I may update this, though the C++ part is the most in need of updating and not relevant to this course. Here, in the meantime, is some notes on learning C from Java:

<http://www.comp.lancs.ac.uk/computing/users/ss/java2c/diffs.html>

If you want a copy of the latest ANSI C standard, you can buy one directly from ANSI in the US (but this is a fairly technical document, aimed at language lawyers). Let me know if you find out how to pick it up, because I haven't had time to navigate the ANSI site (the latest standard is C99). Here are some alternative sites for other information on the current language standard, and answers to some of those pesky questions like why an extra "&" fixes a bug (or causes one):

comp.lang.c Frequently Asked Questions <http://www.eskimo.com/~scs/C-faq/top.html>
Commentary on the language standard: Rationale for American National Standard for Information Systems - Programming Language - C (addendum to American National Standard X3.159-1989) <http://www.lysator.liu.se/c/rat/>


Here’s some history. Strangely, lessons from past generations of technology tend to be forgotten. Expect some of these ideas to come back in a new form:

general history

specific systems

memory history pages (based on a talk I gave in 1996)

Why is studying history important? Because anticipating when some old idea is worth resurrecting gives you a hige competitive advantage. Not only can you be first with the cool “new” idea, but you can base it on long-established experience from the past – which everyone else has forgotten.

See my architecture research pages for a few ideas inspired by looking at past practice.

Another example: Magnetoresistive Random Access Memory (MRAM) has some properties in common with magnetic core memory; here’s a paper which needs a bit of EE (specifically, magnetics) background to understand:

In the field of embedded an mobile devices, many of the tricks which applied to early systems where memory was tight are coming back. For example, microkernels with very small memory footprints – a big idea in the 1980s – could come back (e.g., see the L4 project).


For the curious, here are some thoughts on how learning takes place. See if you can recognize yourself in one of the two categories.