Spring 2021
Instructors Roz Cyrus and Jerry Cain
PDF
Things I love working on and discussing:
Algorithmic game theory
Game design (digital and board)
Systems programming
HCI (human-computer interaction design)
Design Patterns
190 students (!) as of March 27th at 2:30 pm (only expected 100, since 508 students enrolled a year ago in spring 2020 and we assumed there was noone left!)
7 graduate student CA's at the moment
Ella, Matt, Patrick, Raejoon, Semir, Sophie, Thea
We’re working on getting at least one more CA. We can never have enough!
CS110A: Problem Solving Lab for CS110
CS110A is a one-unit supplementary discussion section designed to foster additional community and establish a bedrock foundation in systems programming.
CS110A is relatively new and is based on one of the School of Engineering's Equity and Inclusion Initiatives.
CS110A meets once a week, on Thursdays, 12:30pm. Your CS110A discussion section satisfies the CS110 discussion section requirement.
Overview of Linux Filesystems
Linux and C libraries for file manipulation: stat, struct stat, open, close, read, write, readdir, struct dirent, file descriptors, regular files, directories, soft and hard links, programmatic manipulation of them, implementation of ls, cp, find, and other core Unix utilities you probably never realized were plain old C programs
Naming, abstraction and layering concepts in systems as a means for managing complexity, blocks, inodes, inode pointer structure, inode as abstraction over blocks, direct blocks, indirect blocks, doubly indirect blocks, design and implementation of a file system
Threading and Concurrency
Sequential programming, desire to emulate the real world within a single process using parallel threads, free-of-charge exploitation of multiple cores (8 per myth machine, 12 - 16 per wheat machine, 16 per oat machine), pros and cons of threading versus forking
C++ threads, thread construction using function pointers, blocks, functors, join, detach, race conditions, mutex, IA32 implementation of lock and unlock, spinlock, busy waiting, preemptive versus cooperative multithreading, yield, sleep_for
Condition variables, condition_variable_any, rendezvous and thread communication, wait, notify_one, notify_all, deadlock, thread starvation
Semaphore concept and semaphore implementation, generalized counters, pros and cons of semaphore versus exposed condition_variable_any, thread pools, cost of threads versus processes
Active threads, blocked threads, ready threads, high-level implementation details of a thread manager, mutex, and condition_variable_any
Pure C alternatives via pthreads, pros and cons of pthreads versus C++'s thread package
Networking and Distributed Systems
Client-server model, peer-to-peer model, telnet, protocols, request, response, stateless versus keep-alive connections, latency and throughput issues, gethostbyname, gethostbyaddr, IPv4 versus IPv6, struct sockaddr hierarchy of records
Ports, sockets, socket descriptors, socket, connect, bind, accept, read, simple echo server, time server, concurrency issues, spawning threads to isolate and manage single conversations
C++ layer over raw C I/O file descriptors, introduction to sockbuf and sockstream C++ classes (via socket++ open source project)
HTTP 1.0 and 1.1, header fields, GET, HEAD, POST, response codes, caching
Discussion Sections: 10%
Self-Assessments: 20%
There are no traditional exams at all this quarter
The university cancelled traditional finals for the entire academic year, citing a distaste for anything high-stakes that might cause undue stress for those who are geographically and situationally disadvantaged
My interpretation: the traditional CS110 exam is on hiatus until further notice.
My solution: low-stakes self-assessments as opportunities to assess how well you understand the accumulation of topics taught so far.
We'll have three of them, and they'll go the Fridays of Week 3, 6, and 8.
Each self-assessment will be timed: once you download it, you'll have three hours to complete and submit it.
We will, however, give you a 72-hour stretch of time during which you choose what three-hour block works best for you.
20% of final grade: 7%, 7%, 6% (lowest score is weighted only 6%, others 7%)
The self-assessments will be graded using the square-rooting scheme we describe in the course information handout.