I'd like to start by doing around and introducing ourselves.
This "Computer Systems" courses is an intermediate (typically sophomore or junior) level course about the machine level workings of a unix computer including
We'll follow a course developed at Carnegie Melon, using its textbook "Computer Systems: A Programmer's Perspective, 3rd edition" which includes "labs" that will let you explore assembly language and stack overflow exploits.
The primary language we'll use is C, which we'll look at in some detail. The classic book which describes C is "K&R"; Kernighan and Ritchie's "The C Programming Language, 2nd Edition" - highly recommended.
Links to both of these books as well as other good stuff can be found on the resources page in the left menu.
All of the courses assignments, the work that you turn in, and my feedback will be through this course website.
Some of the materials are only available after you log in ; see the link at the top right of the page, and use your Bennington email credentials.
Please do browse around and familiarize yourselves with what's here and how things work.
And please do look over the syllabus which has the course policies, expectations, and a tentative schedule of topics and assignments.
I'll show you a bit about how the site works, and how to turn in your assignments.
If the site is down, or you have a large attachment (the current limit is about 3MB), or for some reason you aren't able to turn in your work through the website, send me an email with your work or message me on slack instead, and I will post it for you.
There are videos, pdf lecture notes, and other resources on the CMU site. You should familiarize yourself with what's there and use it as a companion or alternative to the textbook depending on your preferences.
My experience is that textbook, while excellent, can be too wordy and dense at times, and you'll want something shorter - like the lecture notes - to identify what the essential pieces are.
All of our online meetings will be in the same zoom room ; there's a link in the left menu with the details.
We've set our weekly meetings at 2-4pm, Tue & Fri weekly. Mostly these will be to answer any questions, make sure we all know what's coming up, and to keep going in the same direction.
I've set my office hours at 7-10pm Wed nights ... though that may change if there's a time that works better for you folks.
I'm available at other times by appointment as needed - drop me an email or note on slack.
You can use this same room at other times to work with each other ; I don't need to be present for it to work.
I've set up a slack channel at #fall20-systems on bennington-cs.slack.com . We may set up other channels for specific labs or topics if need be. I hope that will be a good place to ask questions and get help from me and other members of the class.
I've also set up a unix system which will be our default environment for running code, jupyter.bennington.college. You're welcome to use whatever machine you like, but some of our work will require specific systems and libraries. Many of the CMU labs are C templates or in some cases binary files which won't work on Windows or Mac operating systems.
In addition to the browser interface (editor and shell terminal) to jupyter.bennington.college, you can set up ssh and scp access by installing your own keys. Ask for help if you aren't sure how that works.
I'll do a demo to show some of this.
See for example c/hello_world .
If you need to review the unix shell (terminal, ssh, ls, cd, tar, and all that), check out the "background" section of the resources page. The tutors (Quang, Stacy, Suman) can help with this sort of stuff; we'll be posting specifics and hours soon.
You're welcome to work with others in the course on these assignments, but I do want each of you to turn each assignment, explaining in your own words what is going on, so that I can see what you understand.
As an academic course, it's crucial that you "quote your sources" and make it clear where you started from, who you consulted, what is your work, and what is the work of others.
If you have any doubts about this, please ask.
We're going to meet twice weekly, Tues and Fri 2-4pm in a zoom session to make sure that we're all on the same page, know what needs to be done, and to discuss the material.
I will be setting up twice weekly assignments to turn in, due by midnight Tuesday and Friday. Some of those will simply be readings and practice exercises from the text, often with solutions given. But the real challenge are the labs - I'm currently planning on having us look at six of them, about one per week.
I would like you to at least start each of the labs, enough to understand what the issues are what's to be done. And I'd like you do at least three of them more thoroughly, including a write-up describing what you did in detail. Which three is up to you.
In my experience, this course ramps up very quickly.
First we'll take a week or so to orient ourselves and look at bit-level coding with C, which is the material in chapter 2 of the text.
Then in chapter 3 we'll learn x86 assembly language, and use it for two labs : a "bomb lab" where you are given a binary executable to decipher, and an "attack lab" where we look at code vulnerabilities.
After that, we'll head into virtual memory, process communication and control, and end up with network programming.
I've posted a first assignment due Friday night to get us started, and the beginnings of what we'll do after that so that you can if you wish get a headstart on what's coming next.