ITKA203 In English (Spring 2018)- for International Students Only

Our main course is lectured in Finnish, and the original course material is also mostly in Finnish, too. This page attempts to list source material that matches the Finnish course content most closely.

Course guidance in English will be available from March to May 2018 for international students of the University of Jyväskylä who are participating the course. Please contact the lecturer for details, if you have not done this already. Any questions made by email will be answered, and I hope to arrange a couple of group meetings, likely on Mondays or Wednesdays, when also the Finnish lectures take place.

The method of student performance evaluation and grading will be decided before May, and it will be at least loosely based on the same learning objectives as on the Finnish main course. The learning objectives are listed in here. Because of the manageable number of non-Finnish students, I currently believe that personal evaluation based on written exercises, oral discussion, perhaps with real-time exercises, will be applicable.

Contents

Textbook (free online set of PDFs)

We'll use "Operating Systems: Three Easy Pieces" by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau http://pages.cs.wisc.edu/~remzi/OSTEP/

Not all of the textbook sections are relevant. Most are, though. As of now, it is safe to start reading from the beginning.

Here is a short-list:

Preface - to understand what we're about to read.

Table of contents - to know what could be covered in double the time of our short course.

1 Dialogue - a first "dialogue" to grasp the style of the book.

2 Introduction - setting the targets: what is to be learned here and what on other courses. If you play with the related code package please make sure you first understand how to kill processes! The example codes will easily end up burning much more than 100% of CPU time of the system you run them on! It would not be nice on a multiuser system such as our university servers! Ask for help, if needed.

3 Dialogue on virtualization

4 Processes

5 Process API (homeworks seem nice, but the Finns don't do that much, so they are optional, although fun and instructive...)

6 Direct Execution

7 CPU Scheduling

(on our short course, we skip 8, 9, and 10)

11 Summary

12 Dialogue on memory virtualization

13 Address Spaces

14 Memory API (highly useful, although optional on the Finnish course)

15 Address Translation

16 Segmentation

(on our short course, we skip 17)

18 Introduction to Paging

19 Translation Lookaside Buffers

20 Advanced Page Tables

21 Swapping: Mechanisms

22 Swapping: Policies

(we skip 23)

24 Summary on virtual memory

25 Dialogue on Concurrency.

26 Concurrency and Threads

27 Thread API

28 Locks

29 Locked Data Structures (the Finns get much less information about this... only the basic idea of a locked variable or so...)

30 Condition Variables

31 Semaphores

32 Concurrency Bugs

(we skip 33)

34 Summary on Concurrency

35 Dialogue on Persistence

36 I/O Devices

37 Hard Disk Drives

38 RAID (The Finns get about 15 minutes of RAID and that's it... basic idea only...)

39 Files and Directories

40 File System Implementation

(we skip 41)

42 FSCK and Journaling

(we skip 43, 44, 45)

46 Summary on Persistence

(we skip 47-51, i.e., the rest of the book)

Practical tutorials on Shell and C language

Chapters 1-12 and 24-26 or so of the book http://linuxcommand.org/tlcl.php which seems to have a free PDF download available.

In addition, "man" pages and examples of "find", "grep", "cat"

Shell scripting basics from: http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ or http://www.learnshell.org/ or something similar..

C language basics from: http://www.learn-c.org/ (up to Chapter "Structures") or http://www.tutorialspoint.com/cprogramming/ (up to Chapter "C - Structures")

Practical tutorials on Assembler and GDB

After rudimentary C, what completes our breadth-first overview is just a tiny bit of assembly language and command line debugging of compiled C code. Perfect material would be Chapters 1-4 and Appendix F of "Programming from the ground up" http://programminggroundup.blogspot.fi/

Finalize with something like (again "first Google hits"): http://www.thegeekstuff.com/2010/03/debug-c-program-using-gdb/ http://www.unknownroad.com/rtfm/gdbtut/ https://sourceware.org/gdb/onlinedocs/gdb/

Practicals using the University servers

One objective of the course is to learn how to use a Linux server machine via an ssh connection and text-based terminal. After learning the command line, the work with C programming and gdb can continue at on of the identical server machines jalava.cc.jyu.fi or halava.cc.jyu.fi provided for students and staff - I didn't find instructions in English, but it is basically quite simple (unless we need some troubleshooting):

  1. If you've never done this before, you need to "activate your access" once by logging in to the university user account service http://salasana.jyu.fi and clicking on the button that should say "Activate UNIX". Before logging out from the service, also verify that the "login shell" is set to "bash" and NOT anything else, like tcsh or any other option they possibly offer. We use bash (Bourne Again Shell) as the shell, since, well, it is the best option for beginners for many reasons.
activate_unix.png set_bash.png
  1. Then you'll need an SSH client program to connect to one of the two servers from your own machine. On Windows, I recommend KiTTY: http://www.9bis.net/kitty/ If you happen to use Mac, then you already have an ssh client program, which can be started simply by writing the command "ssh username@jalava.cc.jyu.fi" to the Mac terminal window, where "username" is your university username (not email or anything, just the username). (I never remember how the terminal itself is opened on Mac, but it is something simple like everything in the Mac world...). If you happen to use a Linux, it is the same story, you can just type the ssh command to your own terminal window. Password needs to be written, when the server asks for it - you won't (and shouldn't) see the password characters on screen when typing them!
kitty_ssh.png
  1. Then, if it doesn't work for some reason, we'll need to troubleshoot. Some 5% of user accounts have turned out to have problems with the initial activation, which requires assistance from the IT support staff.. Might have no problems, but we don't know beforehand.. it is a lottery.
  2. It is important to make sure that your own client program uses the "UTF-8" characters which are default at the server side. There's an option for this in KiTTY, and it is worthwhile to save the setting as default and not worry about it afterwards. Garbled or unexpected characters will sometimes appear if the setting is wrong. While at it, KiTTY should be configured to "transmit ALT key as META", which I think should be default, but it's best to make sure. Meaning of "ALT as META" is explained in the book I linked :).
kitty_utf8.png kitty_meta.png
  1. Due to obvious reasons, the user account may be configured to use Finnish language by default, which I can help you to change. Of course it might be correctly set up in English, too.. You'll find out if the system tries to talk to you in Finnish in most of its response messages. (English is usually most descriptive, even if your own language happens to be supported.)
  2. What must be remembered at all times is: everything is fine when you know what you are typing to the terminal and why, but:
  • not knowing, or randomly banging the keys can be potentially dangerous (to your own files and data) very fast.
  • So keep children, cats, people angry at you, etc. away from the keyboard while keypresses are going to a shell session!
  • Type carefully - at first only the commands given in trustworthy tutorials that completely explain what the command is supposed to do. Every character matters, as you'll find out soon enough :)

These warnings are necessary at first, before you get to the point where you can safely improvise your own experiments and start the actual fun of it. The most important learning objective, of course, is to get to that point where you can start experimenting both safely and comfortably.

Learning and experimenting might be somewhat easier if you have your own Unix-like system with bash installed. Any Linux will do, Mac OSX terminal will do (although the book I linked might use some Linux-specific stuff), and on Windows you could install a virtual machine with any operating system.. But the university servers have a complete Linux environment readily at your use, and one of the goals is to learn remote use over the net, which is also one common and useful real-world application of the command line interface.

Naturally, the university systems do not allow regular users to do any system administration tasks, so trying anything with "sudo" or "su" needs to be done in your own system. (After you are very, very sure, what "sudo" means; system administration is not part of our introductory course).

Exercises / Labs

There will be some programming exercises to verify your skills gained from the tutorials. Exact details will be announced later; I'll be notifying the Spring 2018 international students when these are determined. As of now, you may do exercises from the beginning of the tutorials linked above. The indicated chapters and "up-to chapter" notes apply. No need to go too deep on this course.

Videos from Berkeley(?)

Berkeley CS162 Fall 2011 lectures 1, 2, 3, 4, 5, 6, 9, 15, 16, 19, 20, 21 are pretty much to the point. Link to videos: https://www.youtube.com/playlist?list=PLA32F8ECF0A0ED16A

There seems to be a matching course archive site at http://inst.eecs.berkeley.edu/~cs162/fa11/

Lectures other than the ones listed seem to deal more with databases, internet, security, and software engineering concepts, which we teach on other courses, not ITKA203 that deals mostly with operating system basics. I don't have prior experience about the videos, but I sampled some of them quickly, and they seem to be very well in line with what I (try to) teach on my Finnish lectures.

Please, keep a learning diary of the lectures, if you start to watch them. That way I can verify that you have been watching. Of each lecture video that I listed, answer the following questions:

  1. Number and title of the lecture, naturally, for bookkeeping.
  2. What do you think was the most interesting or useful thing you learned from the lecture?
  3. Was there something surprising that you had not known or thought of before?
  4. Do you think that the covered topics improve your professional skills? If yes, how? If not, why?
  5. On the other end of the spectrum, was there something that you think was a waste of your time (other than the unavoidable parts that deal with local arrangements at Berkeley)?
  6. Did you have to search additional information on some pre-requisites assumed at Berkeley? What were those, specifically?
  7. Anything else you might consider worthwhile to notice about this lecture?

Returning the learning diary in the end will is likely to be one required part of the course mode.