5. What you should know#

This course is not intended to teach you computer architecture; while we will cover some of this, we strongly recommend that you take a computer architecture course before the operating system course. Also, this course is not intended to teach you how to program. It assumes you have mastered programming skills including data structures, algorithms, the C programming language, make, git, debuggers, test driven development, how loaders work, shell scripting and other tools.

We have learned that while most students have learned programming skills and tools in previous courses, when writing the fairly simple code for prior courses many students got away without properly writing tests, using a debugger, or even writing a proper makefile. We find that students that do poorly in this course, often have problems because they have not previously mastered the tools they will need. Perhaps the best example of this is that many students try to solve the complicated operating system assignments by writing them and then trying to debug the whole thing with print statements. While possible, it takes ten times as much work and is enormously more challenging for them than the students that write simple tests of each function as they develop their application and use a debugger to be able to quickly pinpoint problems.

In the remainder of this chapter we discuss some of the tools and skills we expect you to have before the course starts and pointers to where to find more information. Our focus is not to provide a tutorial, there are many better resources out there for that, but to explain why mastering a skill/tool is important, discuss what are some of the key capabilities of your tools, and providing you links to other materials. Specific sections cover the C programming language, unix shells, editors, make, how to test your code, revision control/git, and debuggers/gdb.