From: Paul Menzel Date: Wed, 24 Apr 2024 05:57:01 +0000 (+0200) Subject: Unix_Concepts: Only mark up I/O operations as code and not comma X-Git-Url: http://git.tuebingen.mpg.de/?p=aple.git;a=commitdiff_plain;h=HEAD;hp=0d431cf6bd2cb41ec51041f4069711dbf2306d54;ds=sidebyside Unix_Concepts: Only mark up I/O operations as code and not comma Currently, the spacing is a little off, because the comma is also marked up as code. So only mark up the I/O operations. Signed-off-by: Andre Noll --- diff --git a/Filesystems.m4 b/Filesystems.m4 index 903b0b3..40dedd1 100644 --- a/Filesystems.m4 +++ b/Filesystems.m4 @@ -1385,7 +1385,7 @@ silly renames: An NFS4.1 server knows when it its safe to unlink a file and communicates this information to the client.

The file handle which an nfs client received through some earlier -rpc can become invalid at any time due to operations on a different +rpc can become invalid at any time due to operations on different hosts. This happens, for example, if the file was deleted on the server or on a different nfs client, or when the directory that contains the file is no longer exported by the server due to a configuration @@ -1432,7 +1432,7 @@ EXERCISES()

  • In an nfs-mounted directory (nfs version 4.0 or earlier), run cat > foo &. Note that the cat process automatically receives the STOP signal. Run rm foo; ls -ltra. Read - section D2 of the nfs HOWTO + section D2 of the nfs HOWTO for the explanation.
  • In an nfs-mounted directory, run { while :; do echo; sleep @@ -1441,7 +1441,7 @@ EXERCISES()
  • Discuss the pros and cons of hard vs. soft mounts.
  • -
  • Read section A10 of the nfs +
  • Read section A10 of the nfs HOWTO to learn about common reasons for stale nfs handles.
  • Can every local filesystem be exported via nfs?
  • @@ -1508,9 +1508,12 @@ SECTION(«Further Reading»)
  • Dominic Giampaolo: Practical File System Design
  • Cormen
  • Darrick Wong: XFS Filesystem Disk Structures
  • -
  • The xfs FAQ
  • Documentation/filesystems/path-lookup.rst
  • rfc 5531: Remote Procedure Call Protocol, Version 2 (2009)
  • Birell, A.D. and Nelson, B.J.: Implementing Remote Procedure Calls (1984)
  • +
  • NFS: the early + years and NFS: the new + millennium, two articles on the design and history of NFS by Neil + Brown.
  • diff --git a/Introduction.m4 b/Introduction.m4 index 3f0f5b3..230e038 100644 --- a/Introduction.m4 +++ b/Introduction.m4 @@ -24,8 +24,8 @@ for Developmental Biology and the Friedrich Miescher Laboratory in Tübingen, Germany. Over time they morphed into a generic document that was made public in December 2019.

    -

    The title is of course a pun on the famous book "Advanced -Programming in the Unix Environment" by W. Richard Stevens. While +

    The title is of course a pun on the famous book Advanced +Programming in the Unix Environment by W. Richard Stevens. While Stevens' book centers around C programming, we try to convey fundamental ideas without assuming substantial programming skills. An elementary knowledge of shell and C programming is certainly diff --git a/LVM.m4 b/LVM.m4 index bf13076..959d4ce 100644 --- a/LVM.m4 +++ b/LVM.m4 @@ -60,21 +60,18 @@ they can be submitted as a unit for performance reasons. The thusly processed bios then form an I/O request which is handed to an I/O scheduler (also known as elevator).

    -

    At this time of writing (2018-11) there exist two different sets -of schedulers: the traditional single-queue schedulers and the -modern multi-queue schedulers, which are expected to replace the -single-queue schedulers soon. The three single-queue schedulers, -noop, deadline and cfq (complete fair queueing), were designed for -rotating disks. They reorder requests with the aim to minimize seek -time. The newer multi-queue schedulers, mq-deadline, kyber, and bfq -(budget fair queueing), aim to max out even the fastest devices. As -implied by the name "multi-queue", they implement several request -queues, the number of which depends on the hardware in use. This -has become necessary because modern storage hardware allows multiple -requests to be submitted in parallel from different CPUs. Moreover, -with many CPUs the locking overhead required to put a request into -a queue increases. Per-CPU queues allow for per-CPU locks, which -decreases queue lock contention.

    +

    Traditionally, the schedulers were designed for rotating disks. +They implemented a single request queue and reordered the queued +I/O requests with the aim to minimize disk seek times. The newer +multi-queue schedulers mq-deadline, kyber, and bfq (budget fair +queueing) aim to max out even the fastest devices. As implied by +the name "multi-queue", they implement several request queues, +the number of which depends on the hardware in use. This has become +necessary because modern storage hardware allows multiple requests +to be submitted in parallel from different CPUs. Moreover, with many +CPUs the locking overhead required to put a request into a queue +increases. Per-CPU queues allow for per-CPU locks, which decreases +queue lock contention.

    We will take a look at some aspects of the Linux block layer and on the various I/O schedulers. An exercise on loop devices enables the @@ -837,12 +834,12 @@ EXERCISES() target_args. Determine the correct values for the first three arguments to encrypt /dev/loop0. -

  • The target_args for the dm-crypt target are - of the form cipher key iv_offset device offset. To - encrypt /dev/loop0 with AES-256, cipher - is aes, device is /dev/loop0 and both - offsets are zero. Come up with an idea to create a 256 bit key from - a passphrase.
  • +
  • The target_args for the dm-crypt target are + of the form cipher key iv_offset device offset. To + encrypt /dev/loop0 with AES-256, cipher + is aes, device is /dev/loop0 + and both offsets are zero. Come up with an idea to create a 256 bit + key from a passphrase.
  • The create subcommand of dmsetup(8) creates a device from the given table. Run a command of diff --git a/Networking.m4 b/Networking.m4 index a3a5d65..f64b341 100644 --- a/Networking.m4 +++ b/Networking.m4 @@ -156,15 +156,15 @@ section aim to get the reader started with both tools.

    SUBSECTION(«Virtual Ethernet Interfaces») -

    A bridge can accommodate physical devices like eth0 -as well as virtual devices. On Linux systems the common approach -to equip virtual machines with network interfaces employs the -virtual ethernet (veth) device driver. This driver provides -virtual pairs of devices where each pair represents an ethernet -tunnel. Ethernet frames received by one end appear on its pair. To -set up the network interface for a virtual machine, one end of the -pair is added to a bridge on the host system while the other end -represents the ethernet device of the virtual machine.

    +

    A bridge can accommodate physical devices as well as virtual +devices. On Linux systems the common approach to equip virtual machines +with network interfaces employs the virtual ethernet device +driver, veth. This driver provides virtual pairs of devices where +each pair represents an ethernet tunnel. Ethernet frames received +by one end appear on its peer. To set up the network interface for +a virtual machine, one end of the pair is added to a bridge on the +host system while the other end represents the ethernet device of +the virtual machine.

    EXERCISES()
      @@ -333,11 +333,11 @@ works and how it can be used to identify networking problems. SECTION(«Transport Layer») -

      The protocols of the transport layer provide message transfer services -which are on one hand independent of the underlying network type, -and on the other hand independent of the application. Different -network services on running on the same host are distinguished by - port numbers, which are 16 bit identifiers. Several well +

      The protocols of the transport layer provide message transfer +services which are on one hand independent of the underlying network +type, and on the other hand independent of the application. Different +network services running on the same host are distinguished by +port numbers, which are 16 bit identifiers. Several well known port numbers are are associated with specific applications. The two dominant transport layer protocols on top of IP, TCP and UDP, are discussed in the following subsections.

      diff --git a/OS-Level_Virtualization.m4 b/OS-Level_Virtualization.m4 index 47d5bad..1b43783 100644 --- a/OS-Level_Virtualization.m4 +++ b/OS-Level_Virtualization.m4 @@ -136,7 +136,7 @@ HOMEWORK(« Extended Page Tables.
    • Suppose a hacker gained root access to a VM and wishes to proceed - from there to get also full control over the host OS. Discuss the thread + from there to get also full control over the host OS. Discuss the threat model in the context of the three virtualization frameworks covered in this section.
    • diff --git a/Unix_Concepts.m4 b/Unix_Concepts.m4 index 3841c01..fb3a122 100644 --- a/Unix_Concepts.m4 +++ b/Unix_Concepts.m4 @@ -145,18 +145,34 @@ interface based on the X window system facilitated cheap workstations which ran a complete open source software stack.

      The success of Linux, or GNU/Linux as some prefer to -call it for reasons that should now be clear, has only increased -over time, to the point where commercial Unix systems are mostly -irrelevant. Today Linux runs on a wide variety of machines ranging -from supercomputers to workstations, smart phones and IOT (internet -of things) devices with very limited resources. - -

      The same companies which almost killed Unix by commercializing it -in order to maximize their profit make money with Linux today. However, -they had to adjust their business model in order to comply with the -GPL. Rather than selling proprietary software, they bundle open source -software and sell support to paying customers. Some companies also -sell hardware with Linux pre-installed.

      +call it for reasons that should now be clear, steadily increased over +time. In 2003 the SCO group, a company which sold a proprietary Unix +system, was unhappy about this progress and sued IBM, which offered +various Linux products. SCO claimed to be the owner of Unix, and that +Linux contained "millions of lines" of code copied from Unix. SCO's +lawyers argued that the success of Linux originated from this theft +of intellectual property and asked for $5 billion as compensation +for the resulting losses. The company also tried to collect taxes +from other Linux users. Microsoft funded SCO in these efforts.

      + +

      In the end SCO lost the lawsuit since it was evident that all that +copied code never existed. In fact, the court ruled that SCO did not +even own the Unix copyrights to begin with. Another fun fact is that +the large number of bugs in the early Linux code actually helped to +prove that Linux was original work. The long term effects of this +lawsuit, an improved position of Linux and its ecosystem, last until +the presence. Commercial Unix systems have become irrelevant as Linux +runs on a wide variety of machines ranging from supercomputers to +workstations, smart phones and IOT (internet of things) devices with +very limited resources.

      + +

      While SCO went bankrupt eventually, some of the companies which +almost killed Unix by maximizing their own profit still exist, and +make money with Linux today. However, they had to adjust their +business model in order to comply with the GPL. Rather than selling +proprietary software, they bundle open source software and sell +support to paying customers. Some companies also sell hardware with +Linux pre-installed.

      SUBSECTION(«Linux Distributions») @@ -541,8 +557,8 @@ EXERCISES() HOMEWORK(« Think about printers, sound cards, or displays as a file. Specifically, -describe what open, read, and write should -mean for these devices. +describe what open, read, and write +should mean for these devices. », « @@ -554,9 +570,10 @@ printers could return the number of paper trays, the amount of toner left etc. Writing to the file descriptor would cause output on the device. This would mean to print the text that is written, play the audio samples, or show the given text on the display. The point to -take away is that the open, read, write interface is a -generic concept that works for different kinds of devices, not only -for storing data in a file on a hard disk. +take away is that the open, read, +write interface is a generic concept that works for +different kinds of devices, not only for storing data in a file on a +hard disk. ») @@ -1774,8 +1791,7 @@ SUBSECTION(«Pipes and Redirections»)

      The pipe(2) system call takes no arguments and creates two file descriptors for the calling process which are tied -together as a unidirectional first in, first out data channel that -works just like a fifo, but without any files being involved. One +together as a unidirectional first in, first out data channel. One file descriptor is the read end of the pipe, the other is the write end. Data written to the write end is buffered by the kernel and can be obtained by reading from the read end.

      @@ -1787,6 +1803,18 @@ a copy of both pipe file descriptors. Hence the parent process can communicate with the child by writing a message to the write end of the pipe for the child to read.

      +

      This approach depends on file descriptor inheritance across +fork(2), so it does not work in the situation +where neither process is an ancestor of the other. Files of +type fifo (named pipes) overcome this restriction. To +establish a connection between two unrelated processes, +both processes call open(2) to obtain a file +descriptor which is associated with the fifo. One process passes +the O_WRONLY flag to open the file for writing while +the other passes O_RDONLY to open it for reading. The +two processes may then communicate in the same way as with the +pipe(2)/fork(2) approach.

      +

      The POSIX dup(2) and dup2(2) system calls allow a process to manipulate the entries of its file descriptor array. In particular the standard file descriptors 0, 1, and 2 can be @@ -1811,12 +1839,6 @@ with wc(1). Since ls(1) writes to stdout and wc(1) reads from stdin, wc(1) processes the output of ls(1).

      -

      Note that this trick does not work to establish a connection -between two existing processes because it depends on file -descriptor inheritance across fork(2). In the general -case one has to fall back to sockets or fifos to create the data -channel.

      - SUBSECTION(«Stdio»)

      The POSIX standard requires a compliant Unix system to provide @@ -2510,6 +2532,9 @@ SECTION(«Further Reading») href="https://www.newyorker.com/business/currency/the-gnu-manifesto-turns-thirty"> The GNU Manifesto Turns Thirty, by Maria Bustillos. +

    • The SCO lawsuit, + 20 years later
    • +
    • The Koan of Master Foo and the End User.
    • diff --git a/include/css/aple.css b/include/css/aple.css index e422518..bb5544e 100644 --- a/include/css/aple.css +++ b/include/css/aple.css @@ -1,26 +1,51 @@ body { - background-color: #aacccc; + color: #000; + background-color: #acc; text-align: justify; padding: 0px 30px 0px 25px; - + font-size: 110%; } h1 { - font-size: 150%; + font-size: 160%; +} + +h2 { + font-size: 130%; +} + +h3 { + font-size: 110%; +} + +code { + font-size: 130%; } +p { + padding: 0px 0px 0px 0px; +} + + .logo { border: 0px; - padding: 0em 20px 0px 0px; - margin-left: 0px; - margin-right: 0px; - border: 0px; } table { - margin-left: auto; + margin-left: 0px; margin-right: auto; border: none; + padding: 10px 0px 10px 0px; +} + +table.menu { + padding: none; + border: 0px; + border-spacing: 0px; +} + +table.logo { + margin-left: 0px; } td { @@ -28,6 +53,15 @@ td { padding: 5px; } +td.logo { + border: none; +} + +td.menu { + border: none; + vertical-align: top; +} + svg { float: left; } @@ -38,14 +72,9 @@ svg { border: 0px; } -#overview_heading { - text-align: center; - font-weight: bold; -} - -#overview_text { +.overview { margin: 1% 5% 1% 5%; - font-size: 95%; + font-size: 90%; } div.solution { @@ -69,10 +98,6 @@ dt { text-decoration: underline; } -#chapter_list { - font-size: 120%; -} - .dropdown { position: fixed; top: 0; /* Position the navbar at the top of the page */ @@ -82,11 +107,10 @@ dt { .dropdown-content { display: none; background-color: #8aa; - min-width: 300px; - padding: 12px 12px; - font-size: 75%; + padding: 6px 25px 0px 30px; } .dropdown:hover .dropdown-content { display: block; + font-size: 80%; } diff --git a/include/m4/aple.m4 b/include/m4/aple.m4 index c209513..7b23385 100644 --- a/include/m4/aple.m4 +++ b/include/m4/aple.m4 @@ -13,22 +13,18 @@ define(«REFERENCE», [«REMOVE_NEWLINE(«$2»)»](««#»»«LOCAL_LINK_NAME(« define(«XREFERENCE», «[$2]»«($1)») define(«EMPH», ««_»REMOVE_NEWLINE(«$1»)«_»») define(«CMD», «`REMOVE_NEWLINE(«$1»)`») -define(«SECTION», « -divert(«0») -
    • $1
    • -divert(«2») - -») -define(«SUBSECTION», « -») +define(«SECTION», « divert(«0») $1
      divert(«2»)

      $1

      ») define(«SUBSECTION», +« ») define(«OVERVIEW», « -
      -ifelse(«$2», «», «Overview», «$2») -
      -
      -$1 +
      +
      + ifelse(«$2», «», «Overview», «$2») +
      + $1
      ») define(«EXERCISES», «

      Exercises

      ») @@ -63,7 +59,7 @@ define(«HEADER», « -