Class Outline

From Soma-notes
Revision as of 17:06, 16 September 2007 by Rhooper (talk | contribs)

Lecture Notes: September 10th, 2007

This lecture covered Administrative items and a part of the Introduction.

Administrative

Textbook

Dr Somayaji has used the 3rd edition textbook before. It isn't ideal, but it will suffice. If you wish to a different textbook, you're expected to ensure that it covers the topics as covered in class.

Exams, Tests, Quizzes, Labs, Assignments

There will be no quizzes and no final exam. There will be 4 labs, 2 tests, and a term paper. We may collaborate on the labs, but not on the quizzes and term paper.

½ to ⅔ of a test is designed to be easy, with the remainder being more difficult.

Term Paper

Choice of topic for term paper is fairly flexible. Take what you know in other areas of computer science and integrate them in the paper. Include your own interests. The most common mistake seen is to take an idea for the exact paper, and then do research to fulfill the paper. Do research first, then come up with a topic, as the thing you want to write on may not have been written about yet.

For bibliographies, use the form found in most papers and journals. Bibtex is great for bibliographies.

Google scholar is a great place to start looking for papers. Many journals are only accessible by subscription, however the Carleton University Library provides access to students both onsite and off. You will need your student ID in order to authenticate from off-site. While on-site, you should be able to access the journals without authentication.

A useful trick is to take the URL of a journal article and append proxy.library.com to the domain name portion of the URL.

Extra Credit

Dr Somayaji would like to build a class notes wiki. You can get up to 3 percent added to your final mark if you participate and do an outstanding job. Lower quality jobs will result in less extra credit. You will be able to volunteer once during term.

Labs

You are expected to attend the first lab for each lab assignment, as there will be marks given for work done in class. This is sort of a way to take attendance, as well as to help students get started with assignments. This means there's 4 mandatory tutorials. Students are encouraged to attend all of the labs. Labs will take longer than one assignment. Don’t be discouraged by students who manage to finish labs in one hour, as they may have experience with operating systems already, or may have taken the course before.

Term Papers

You may talk to each other about papers to get feedback, but each paper is supposed to be your own work.

Plagiarism is a big deal, and some students of COMP3000 have been caught plagarizing in the past. Do not plagiarize. The official policy requires handing over the plagiarized paper and student to the dean for discipline.

You can't just cut and paste. If a section in another person's work is fundamentally the same as yours, this is still plagiarism. The paper is supposed to be your own work. Figures cannot just be cut and pasted. You must redraw it yourself, then cite it. Using a thesaurus to rephrase every word will not work. This is still fundamentally someone else's work.

This issue carries over into the commercial world, even in code: Free code may not be free -- read the licenses. Incorporating some 3rd party code may require your company to divulge all of their code into the wild.

Watch out for incorporating something but only tweaking it.

You should read your sources, put them away, and then pull them back out to put the citations in... This should help avoid plagiarizing, unless you have a photographic memory.

Lectures

Question from the floor: How do you structure the lectures?

Dr Somayaji tries to keep the tests to the material in the text and tests. The lectures will vary, and he considers them to be a performance. Skipping class will result in some interesting material getting missed, but you should do acceptably by reading the text and doing the assignments. The goal of the lectures, however, is to make it worth your time to attend.

One of the things that universities are struggling with is, especially with the compute science field, is why are we still requiring students to attend in person? Part of this is that lectures and other interactions with professors an TAs encourage a different learning due to physical presence. There is a different type of energy, different type of synergy. Being able to see reactions of students helps to fine tune the lecture.


Optional Reading

Over thanksgiving, students are encouraged to read the Neal Stephenson's article In the Beginning was the Command Line. While he's not entirely correct that UNIX is the one true computer science operating system, it is almost true. UNIX wasn't built to fulfill a commercial niche. It was built for programmers by programmers. It has survived because it has been useful to programmers.

One of the first things that tends to happen to most new Operating Systems or platforms is that some part of unix or some variant of unix is ported to it (such as NetBSD or Linux. Additionally, things like cygwin will pop up to allow you to port applications and programs over. Cygwin works fairly well, but not perfectly. This is like a handyman going to a new job. He's going to bring some of his favorite tools with him to use at the new job. You bring along your favorite tools because you're familiar with them and can do powerful things with them.

While we mostly hear about unix in class, we'll still hear about windows some.

Introduction

What is an operating system?

Student: A large piece of software that interfaces with the machine's hardware to allow a user to interact with the computer to perform actions.

Dr Somayaji doesn't like the size qualifier.

The operating system turns the hardware (the computer that you have) into the computer that you want (the applications).

Ideally an application should not depend on specific hardware, but rather generic things - not a specific brand of mouse, but rather any mouse by abstraction.

This is an interesting time to talk about operating systems, as this model of operating system is becoming more and more obsolete. Part of this is that more and more big applications are becoming part of the operating system (eg browsers). Even the protection and privilege level separation is becoming blurred. For example, Internet Explorer's HTML rendering engine is an object that can be used by many other applications, making it an operating system service. This has resulted in lawsuits surrounding what an Operating System is. Dr. Somayaji tends to take the larger view that rather than the more specific view that the layer that talks to the hardware is the Operating System.

What's newer, even if the idea is old, is an idea that has become really hot in the last 5 years (but has been around for 10 years). Virtualization. VMWare is now worth many billions of dollars. Xensource got bought by citrix.

How many people like to install Windows? (Nobody raised their hand).

The reason that this is important is that its a huge pain to install operating systems. So system administrators turn around and turn the OS into an application, and just take copies of a new image and replace the OS image with the new image to upgrade with instead.

OS <math>\leftrightarrow</math> Application interface is the system calls.

OS <math>\leftrightarrow</math> Hypervisor interface/provides virtual hardware to the OS (eg: here's an abstract disk, keyboard, network). This abstraction is mapped as the hypervisor sees fit onto hardware.

Having software provide virtual hardware requires a few tricks, as some instructions on a processor go straight to the hardware making virtualization hard. Fortunately, Intel and AMD have provided extensions to help with this (VTx).

The main point to keep in mind here is that operating systems have traditionally provided imaginary or virtual things for applications to play with. Such as "Oh, you want memory?", I'll give you memory.. But what it gives you may not correspond to memory at all. Say you asked for a megabyte of memory, it may not actually give you it at that time, but only give it to you when you use it. The same goes with CPUs and the hypervisor. It may not give you a real CPU at that time.

The other big trend going on that makes things interesting that is going has to do with gaming systems. Game manufacturers want to write their game for all of the platforms... The hardware, however, is remarkably different. Modern PCs are moving towards 2-4 cores plus graphics processors. Managing multiple CPUs is a bit tricky, but we know how to do it. The hard part comes in with the graphics processors and non-traditional processors, such as the cell processor: The cell processor is 9 cores, but each core is specialized and not symmetric. They're not all general purpose.

A standard cell processor has 8 SPUs and a central core, but one can be bad. The PS3 has 7 SPUs+Central CPU. It is a standard PPC (Power PC) core. The SPUs implement SIMD. This takes one instruction and applies it to multiple data items. Can do the op to an entire array at once. Processing graphics and sound need to process big arrays. This is what graphics cards to to a large extent. This means that they're not good for general purpose code. There's no decision making capability (branching).

SISD
Single Instruction Single Data. Plain vanilla processors.
SIMD
Single instruction multiple data
MIMD
Multiple Instructions Multiple Data.

How do you use these? How do you co-ordinate these processors? How do you abstract this division between CPU and GPU.

The XBox 360 is closer to a PC in that it has multiple CPUs and a GPU. Developing for the PS3 versus the XBox is thus very different.

Hardware is becoming more and more parallel, but more and more dedicated purpose.