Resources
Course files
Example programs presented in class are available in Dr. Clair's public directory on turing in the directory /export/math/home/public/clair/os
github
For team projects, this class will use github, the most popular site for collaborative coding. Working Together With Git And GitHub: How to use GitHub, specifically for this class. If you want to learn more, there are plenty of online instructions for using github and git:- github bootcamp
- Pro Git by Scott Chacon
- xkcd: Git
Linux cluster/turing
All computers in our classroom and in the Linux Lab are part of the department's linux cluster. You can access your account by logging in to any one of these. You can also access turing.slu.edu remotely, via a text terminal ssh connection or by using the NoMachine virtual desktop.
Detailed information on connecting to turing and the features of your account is available at the Math/CS department's website on the Computing Resources page.
Your account comes with a few features: a Backup directory with snapshots of your files at past times, and a WWW directory accessible at http://cs.slu.edu/~user, where user is your SLU username.
Free Online Books
- Advanced Linux Programming Very concrete how-to book. Almost all of it is relevant to our course.
- The Linux Command Line, in-depth information about using Linux from the command line..
Technical Stuff
- Emacs quick reference card
- Emacs official manual
- LinuxCommand.org, a quick guide to the Linux Command line.
- Unix/Linux Command Reference - one page cheat sheet.
- "make" manual
General Interest
- Tanenbaum - Torvalds debate. (See also the Wikipedia page).
- Linux Kernel 2.4 Internals
- Linux Source Code Cross Reference, torvalds/linux on GitHub.
IPC
- Beej's Guide to Unix IPC. Fork, signals, pipies, semaphores, and more.
- The Linux Programmer's Guide. Out of date and incomplete, but still useful.
Password Hashing
- An interesting discussion of cracking crypt hashes.
- A 1997 paper explaining why crypt is obsolete: The Ambitious Amateur vs. crypt(3)
Concurrency
- POSIX Threads Programming, an excellent introduction by Blaise Barney.
- Java applets demonstrating concurrency, from the book Concurrency, Magee & Kramer. Includes the dining philosophers.
- The Little Book of Semaphores. Not so little.
- Linux Kernel Locking. A nice overview of Linux internal locking structures, including spinlocks and semaphores. Seems to be orphaned from it's containing document, though.
Memory Management
- A short article about the malloc() which is built into the GNU C library.
- A blog post, Anatomy of a Program in Memory about 32-bit Linux process memory maps (part of a nice series by Gustavo Duarte).
- A tutorial on malloc, with almost too much help. It does have a nice discussion of the gdb debugger and also dynamic linking.
- Virtual memory in the IA-64 Linux Kernel, by S. Eranian and D. Mosberger.
- A short article, When Linux Runs Out of Memory which touches on many important memory management concepts.
- Mel Gorman's book Understanding the Linux Virtual Memory Manager is the best available discussion of any real memory manager in any modern operating system. It's an open source textbook, available for free in pdf form from Prentice Hall.
File Systems
- Coding for SSDs: Understanding how solid state drives work.
- Ext4 Disk Layout
- A short discussion of the Design and Implementation of the Second Extended Filesystem (EFS2 for Linux).
- MS-DOS disk layout
- Practical File System Design with the Be File System is an entire book, available from Dominic Giampaolo (the author).
Networks
- Beej's Guide to Network Programming using internet sockets.
- Protocols in the IP suite at the Network, Transport, and Application layer. Includes IP and TCP.
- HTTP Made Really Easy, by James Marshall.