« /home/rc

download ostep.org

15/01/2021

Ostep.org's authors say OSTEP is the best free operating systems book. I don't really know if it's true, but I enjoyed it a lot and I definitely reccomend you my lovely grizzly to read it.

The authors upload chapters to the website and reccomend to share links instead of PDFs, however I found that downloading chapters while you study makes it definitely easier, so I forked this gist and added a few lines to merge the chapters in a single pdf.

#!/bin/bash

url="http://pages.cs.wisc.edu/~remzi/OSTEP/"
mkdir ostep
cd ostep

wget -O "00a Preface.pdf"                         "${url}preface.pdf"
wget -O "00b TOC.pdf"                             "${url}toc.pdf"
wget -O "01 Dialogue.pdf"                         "${url}dialogue-threeeasy.pdf"
wget -O "02 Introduction.pdf"                     "${url}intro.pdf"
wget -O "03 Dialogue.pdf"                         "${url}dialogue-virtualization.pdf"
wget -O "04 Processes.pdf"                        "${url}cpu-intro.pdf"
wget -O "05 Process API.pdf"                      "${url}cpu-api.pdf"
wget -O "06 Direct Execution.pdf"                 "${url}cpu-mechanisms.pdf"
wget -O "07 CPU Scheduling.pdf"                   "${url}cpu-sched.pdf"
wget -O "08 Multi-level Feedback.pdf"             "${url}cpu-sched-mlfq.pdf"
wget -O "09 Lottery Scheduling.pdf"               "${url}cpu-sched-lottery.pdf"
wget -O "10 Multi-CPU Scheduling.pdf"             "${url}cpu-sched-multi.pdf"
wget -O "11 Summary.pdf"                          "${url}cpu-dialogue.pdf"
wget -O "12 Dialogue.pdf"                         "${url}dialogue-vm.pdf"
wget -O "13 Address Spaces.pdf"                   "${url}vm-intro.pdf"
wget -O "14 Memory API.pdf"                       "${url}vm-api.pdf"
wget -O "15 Address Translation.pdf"              "${url}vm-mechanism.pdf"
wget -O "16 Segmentation.pdf"                     "${url}vm-segmentation.pdf"
wget -O "17 Free Space Management.pdf"            "${url}vm-freespace.pdf"
wget -O "18 Introduction to Paging.pdf"           "${url}vm-paging.pdf"
wget -O "19 Translation Lookaside Buffers.pdf"    "${url}vm-tlbs.pdf"
wget -O "20 Advanced Page Tables.pdf"             "${url}vm-smalltables.pdf"
wget -O "21 Swapping_ Mechanisms.pdf"             "${url}vm-beyondphys.pdf"
wget -O "22 Swapping_ Policies.pdf"               "${url}vm-beyondphys-policy.pdf"
wget -O "23 Complete VM Systems.pdf"              "${url}vm-complete.pdf"
wget -O "24 Summary.pdf"                          "${url}vm-dialogue.pdf"
wget -O "25 Dialogue.pdf"                         "${url}dialogue-concurrency.pdf"
wget -O "26 Concurrency and Threads.pdf"          "${url}threads-intro.pdf"
wget -O "27 Thread API.pdf"                       "${url}threads-api.pdf"
wget -O "28 Locks.pdf"                            "${url}threads-locks.pdf"
wget -O "29 Locked Data Structures.pdf"           "${url}threads-locks-usage.pdf"
wget -O "30 Condition Variables.pdf"              "${url}threads-cv.pdf"
wget -O "31 Semaphores.pdf"                       "${url}threads-sema.pdf"
wget -O "32 Concurrency Bugs.pdf"                 "${url}threads-bugs.pdf"
wget -O "33 Event-based Concurrency.pdf"          "${url}threads-events.pdf"
wget -O "34 Summary.pdf"                          "${url}threads-dialogue.pdf"
wget -O "35 Dialogue.pdf"                         "${url}dialogue-persistence.pdf"
wget -O "36 I-O Devices.pdf"                      "${url}file-devices.pdf"
wget -O "37 Hard Disk Drives.pdf"                 "${url}file-disks.pdf"
wget -O "38 Redundant Disk Arrays (RAID).pdf"     "${url}file-raid.pdf"
wget -O "39 Files and Directories.pdf"            "${url}file-intro.pdf"
wget -O "40 File System Implementation.pdf"       "${url}file-implementation.pdf"
wget -O "41 Fast File System (FFS).pdf"           "${url}file-ffs.pdf"
wget -O "42 FSCK and Journaling.pdf"              "${url}file-journaling.pdf"
wget -O "43 Log-structured File System (LFS).pdf" "${url}file-lfs.pdf"
wget -O "44 Flash-based SSDs.pdf"                 "${url}file-ssd.pdf"
wget -O "45 Data Integrity and Protection.pdf"    "${url}file-integrity.pdf"
wget -O "46 Summary.pdf"                          "${url}file-dialogue.pdf"
wget -O "47 Dialogue.pdf"                         "${url}dialogue-distribution.pdf"
wget -O "48 Distributed Systems.pdf"              "${url}dist-intro.pdf"
wget -O "49 Network File System (NFS).pdf"        "${url}dist-nfs.pdf"
wget -O "50 Andrew File System (AFS).pdf"         "${url}dist-afs.pdf"
wget -O "51 Summary.pdf"                          "${url}dist-dialogue.pdf"
wget -O "A1 Dialogue.pdf"                         "${url}dialogue-vmm.pdf"
wget -O "A2 Virtual Machines.pdf"                 "${url}vmm-intro.pdf"
wget -O "A3 Dialogue.pdf"                         "${url}dialogue-monitors.pdf"
wget -O "A4 Monitors.pdf"                         "${url}threads-monitors.pdf"
wget -O "A5 Dialogue.pdf"                         "${url}dialogue-labs.pdf"
wget -O "A6 Lab Tutorial.pdf"                     "${url}lab-tutorial.pdf"
wget -O "A7 Systems Labs.pdf"                     "${url}lab-projects-systems.pdf"
wget -O "A8 xv6 Labs.pdf"                         "${url}lab-projects-xv6.pdf"

# check if pdfunite is installed and fail otherwise
command -v pdfunite >/dev/null 2>&1
if [[ $? -ne 0 ]]; then
    echo "Pdfunite required to merge pdfs!"
    exit 1
fi

pdfunite *.pdf ostep.pdf