164 students as of September 19th at 5:30 pm (only expected 100, cause 8:30am)
7 graduate student CA's at the moment
Sophie, Patrick, Ayelet, Julia, Victor, Swayam, Joel
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 Sundays at 2:00pm for two hours.
Overview of Linux Filesystems
Linux and C libraries for ﬁle manipulation: stat, struct stat, open, close, read, write, readdir, struct dirent, ﬁle descriptors, regular ﬁles, 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 ﬁle system
Unix Filesystem Inode Design [source]
Google File System [source]
Facebook's First Generation Haystack [source]
Multiprocessing and Exceptional Control Flow
Browser Architecture [source]
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
thread pools, cost of threads versus
Nginx and Thread Pools [source]
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 ﬁle descriptors, introduction to sockbuf and sockstream C++ classes (via socket++ open source project)
HTTP 1.0 and 1.1, header ﬁelds, GET, HEAD, POST, response codes, caching
Spotify's Dataflow for Wrapped 2020 [source]
Uber's Fiber: Distributed AI Computation [source]
Illustration courtesy of Ecy King, CS110 Champion, Spring 2021
Discussion Sections: 5%
There are no traditional exams at all this quarter
The university cancelled traditional ﬁnals for all of last, citing a distaste for anything high-stakes that might cause undue stress for those who are geographically and situationally disadvantaged.
I'm not wholly convinced this quarter will be even close to normal, so I'm not quite ready to bring the in-classroom exam back yet.
I'm sticking with low-stakes assessments as opportunities to gauge 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.
The self-assessments will be graded using a square-rooting scheme I describe in the Course Information Handout.