Lecture on Operating Systems. lecture and exercises .
John F. Peters, a friend and Unix guru when I was a beginning kernel hacker for Siemens once told me something about operating systems which I will never forget. I remember asking him what could be the most important property of an operating system. I sure thought about message passing, micro-kernal architecture etc. But John said “ The single most important property is transparency. An OS may fail and crash - but with a good one you will be able to figure out the reason for the crash. There is nothing worse than an Operating System that fails without a known reason. ” This quote also nicely explains the differences between business applications and system software: system software needs to crash in an understandable way.
Operating systems are neither brand new nor did too much happen during the last couple of years so that onecould speak of a revolution in design or reliability. This should lead to computer scientists and programmers being well aware of possiblities and limitations of operating systems and how programs should be written to take advantage of them.
But this did not really happen. Instead - we see young programmers skilled in object-oriented computing but totally unaware of performance aspects. Worse, if something happens they seem to be unable to diagnose the problems and find a solution. Automation is used as far as provided by modern IDEs which rarely provide everything used in large projects. GUIs seem to have a disabling effect on many as Neil Stephenson argues in his latest book.
From these considerations we can derive a number of goals for our operating systems class
We want our students to know the major functional components of an OS. Both looking towards hardware support und the system call interface offered to applications. On each level the OS offers a number of abstractions, e.g. processes and threads, pipes and sockets, shared memory and semaphores etc. which can be used by application programmers. But nowadays many programmers work on top of advanced virtual machines which provide their own interfaces. After all an OS is a framework and the device drivers are its plug-ins. The patterns book on concurrency and distributed computing (I believe it's Buschman et.al. gave names to a number of old unix patterns and made them accessible. The top level of an OS is its interface - a concept well known at least to our students which take an advanced Java and OO class at the same time.
Guided by a number of use-cases we would like to show how e.g. an application gets constructed using the c language and its related tools. How the application is started which touches process and rights management, virtual memory, swapping etc.
An operating system and its toolset offers a lot of help in diagnosing and fixing problems. Logging facilities like syslog or the NT envent log let applications write messages to users or administrators. Debuggers allow fine grained stepping through applications and system call tracers like truss (is there a linux or windows equivalent?) give a coarse grainded view on what the application does. On top of these there are system admin tools which let us know about process management (ps), resource use (sar). A good understanding of OS abstractions for interprocess communication helps surely.
How many times do nice OO-projects turn sour because of performance issues? I am not saying that C or assembler are reasonable languages for application development - not even C++ is in my point of view. But at least these languages let you get a glance at how things work under the hood. How expensive heap allocation really is and how it is done. Moving from user space to kernel space and back frequently is expensive. Interprocess communication requires rescheduling in many cases and is also expensive but still much cheaper than e.g. inter-machine communication. And one thing for sure is true: no matter what Moores law says: most OO-programs I have seen in my live (are there any others left?) could run faster. Besides reliability performance still is the number one problem of applications.
OS development was slow the last couple of years. Now it looks like we will get some new features, e.g. much better security.
In the 90s of the last century performance was key. Now the emphasis should be on reliability and security when it comes to operating systems. I took the excellent new paper by Andy Tanenbaum to update my lecture on trusted computing bases and host based security. Far from finished but at least now I know what to put there...
Karl Klink and Dr. Klaus Goebel continue their engagement in the computer science and media faculty at HDM with an extended course on mainframe technology. Read how hot and successful this technology really is in this NZZ article on mainframes
The language "E" and what it brings to distributed computing: capabilites, delayed remote call resolution and sturdy references. Finally understood why capabilities are so much better. Also talks a bit about SPKI: Certificates can do more than just bind a name to a key....
What are the reasons that large corporations to move their distributed applications back to the Z/OS mainframes? It's probably not only to run linux on those boxes.
David Gelernter on what is wrong with our current Operating System dinosaurs. Is a second coming of the computer really close? At least a lot of new and small devices has shown up lately - together with wireless connectivity this could be a first step to really ubiquitous computing. If only the operating systems would not treat us as morons...
Two of my students are organizing a trip to the IBM mainframe department near Stuttgart. Things we should ask the people there.
Literature on C Language etc.
If operating systems are well understood and old stuff - then why do most OO-applications (running on some kind of virtual machine) perform like a dog? Or do our OO-weenies have trouble seeing the mallocs behind all the news?
Want to know how a CPU really works? Why hardware is more reliable than software? Simulate a CPU or a whole computer? Then the book by John Carpinelli is just for you.
Resources and discussions about Linux
Do we need a non-commercial alternative for Linux certification? Should we create a university based Linux certification label - open for everybody? Read why I think the current situation (LPI certification through commercial organizations) does not satisfy all needs)
I am gathering input on this topic. Response from students was very good. Let me know if you think you can contribute some ideas for such a certificate.
Learn more about using Linux on mobile systems, for high-availability applications or for the building of secure systems. Meet Linux afficionados or simply interested users and discuss the future of this extremely successful project. And meet the new KDE4.0 desktop environment and celebrate with us its release at our release party (starting at 18.00 at our S-bar).
And use our blog at linux-day.de . You can find there also the map of the KDE release parties all over the world.