Everyone:

Next week, we will explore how an OS provides persistence by managing I/O devices such as hard disks. Likewise, we will also consider aggregation strategies such as RAID which provide an illusion of a large disk composed of multiple inexpensive disks.

TL;DR

For this reading assignment, you are to read about I/O devices and RAID, and submit your responses to the Reading 10 Quiz.

Reading

The readings for this week are:

  1. Operating Systems: Three Easy Pieces

Optional Reading

Optional AI Conversation

Using Learn About from Google, have a conversation about I/O devices and RAID by asking the following questions:

  1. What is the memory hierarchy?
  2. How do operating systems provide persistence?
  3. What is the difference between a SSD and a HDD?
  4. What is RAID and why is it useful?
  5. What is the difference between RAID 0, RAID 1, RAID 5, and RAID 10?

As you explore, feel free to dive into the suggested related questions or to "simplify", "go deeper", and "get images".

Quiz

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

Program

For this week, you are to explore the filesystems on student10.cse.nd.edu by using df, lsblk, mount, stat, and /proc/mdstat to answer the following questions:

  1. What device is the root (ie. /) filesystem mounted on (ie. /dev/XXX)?

  2. What type of filesystem is /boot mounted on?

  3. What version of RAID does /home use (ie. raidX)?

  4. How large is each swap partition (in G units)?

  5. What is the inode number of /etc/hosts?

  6. What is the file size (in bytes) of /bin/ls)?

In your program.c, simply use puts to print out the answers:

int main(int argc, char *argv[]) {
    puts("/dev/...");
    ...
    puts("1");
    return 0;
}

Submission

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

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

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

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

$ ../.scripts/check.py                # Check reading10 quiz
Checking reading10 quiz ...
     Q01 0.30
     Q02 0.20
     Q03 0.70
     Q04 0.20
     Q05 0.15
     Q06 0.30
     Q07 0.15
   Score 2.00 / 2.00
  Status Success

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

$ $EDITOR program.c                   # Edit your program.c file

$ make test-program                   # Check reading10 program
Testing reading10 program...
   Score 2.00 / 2.00
  Status Success

$ git add Makefile                    # Add Makefile to staging area
$ git add program.c                   # Add program.c to staging area
$ git commit -m "Reading 10: Code"    # Commit work

$ git push -u origin reading10        # Push branch to GitHub

Pull Request

Once you have committed your work and pushed it to GitHub, remember to create a pull request and assign it to the appropriate teaching assistant from the Reading 10 TA List.