For the past couple of weeks, we have studied how an operating system virtualizes the CPU by providing [processes] and [scheduling] policies. By enabling users to execute multiple jobs simultaneously, the OS enables better utilization of the hardware and allows for more sophisticated workflows. Unfortunately, this multiprogramming ability comes with the cost of complexity due to issues related to concurrency.

This week we will examine both event-based programming and pthreads. Afterwards, we will further explore how to tackle the challenges of concurrency with tools such as locks, condition variables, and semaphores.


For this reading assignment, you are to read about two forms of concurrency: event-based programming via select and poll, and threads ala pthreads, and submit your responses to the Reading 04 Quiz.


The readings for Tuesday, September 18 are:

  1. Operating Systems: Three Easy Pieces

    1. Dialogue
    2. Concurrency and Threads
    3. Thread API
    4. Event-based Concurrency

Optional Readings

  1. On the duality of operating system structures

  2. Async IO on Linux: select, poll, and epoll

  3. Inside NGINX: How We Designed for Performance & Scale

    Also, Thread Pools in NGINX Boost Performance 9x!


Once you have done the readings, answer the following Reading 04 Quiz questions:


To submit you work, follow the same process outlined in Reading 00:

$ git checkout master                 # Make sure we are in master branch
$ git pull --rebase                   # Make sure we are up-to-date with GitLab

$ git checkout -b reading04           # Create reading04 branch and check it out

$ cd reading04                        # Go into reading04 folder
$ $EDITOR answers.json                # Edit your answers.json file

$ ../.scripts/submit.py               # Check reading04 quiz
Submitting reading04 assignment ...
Submitting reading04 quiz ...
      Q1 0.20
      Q2 0.20
      Q3 0.30
      Q4 1.10
      Q5 0.10
      Q6 0.20
      Q7 0.40
      Q8 0.50
   Score 3.00

$ git add answers.json                # Add answers.json to staging area
$ git commit -m "Reading 04: Done"    # Commit work

$ git push -u origin reading04        # Push branch to GitLab

Remember to create a merge request and assign the appropriate TA from the Reading 04 TA List.