home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / Unix-Internet-Fundamentals-HOWTO < prev    next >
Text File  |  1999-02-09  |  41KB  |  925 lines

  1.   The Unix and Internet Fundamentals HOWTO
  2.   by Eric S. Raymond
  3.   v1.1, 3 December 1998
  4.  
  5.   This document describes the working basics of PC-class computers,
  6.   Unix-like operating systems, and the Internet in non-technical lan¡
  7.   guage.
  8.   ______________________________________________________________________
  9.  
  10.   Table of Contents
  11.  
  12.  
  13.   1. Introduction
  14.  
  15.      1.1 Purpose of this document
  16.      1.2 Related resources
  17.      1.3 New versions of this document
  18.      1.4 Feedback and corrections
  19.  
  20.   2. Basic anatomy of your computer
  21.  
  22.   3. What happens when you switch on a computer?
  23.  
  24.   4. What happens when you run programs from the shell?
  25.  
  26.   5. How do input devices and interrupts work?
  27.  
  28.   6. How does my computer do several things at once?
  29.  
  30.   7. How does my computer keep processes from stepping on each other?
  31.  
  32.   8. How does my computer store things on disk?
  33.  
  34.      8.1 Low-level disk and file system structure
  35.      8.2 File names and directories
  36.      8.3 Mount points
  37.      8.4 How a file gets looked up
  38.      8.5 How things can go wrong
  39.  
  40.   9. How do computer languages work?
  41.  
  42.      9.1 Compiled languages
  43.      9.2 Interpreted languages
  44.      9.3 P-code languages
  45.  
  46.   10. How does the Internet work?
  47.  
  48.      10.1 Names and locations
  49.      10.2 Packets and routers
  50.      10.3 TCP and IP
  51.      10.4 HTTP, an application protocol
  52.  
  53.  
  54.   ______________________________________________________________________
  55.  
  56.   1.  Introduction
  57.  
  58.  
  59.  
  60.   1.1.  Purpose of this document
  61.  
  62.   This document is intended to help Linux and Internet users who are
  63.   learning by doing.  While this is a great way to acquire skills,
  64.   sometimes it leaves peculiar gaps in one's knowledge of the basics --
  65.   gaps which can make it hard to think creatively or troubleshoot
  66.   effectively, from lack of a clear mental model of what is really going
  67.   on.
  68.  
  69.   I'll try to describe in clear, simple language how it all works.  The
  70.   presentation will be tuned for people using Unix or Linux on PC-class
  71.   hardware.  Nevertheless I'll usually refer simply to `Unix' here, as
  72.   most of what I will describe is constant across platforms and across
  73.   Unix variants.
  74.  
  75.   I'm going to assume you're using an Intel PC.  The details differ
  76.   slightly if you're running an Alpha or PowerPC or some other Unix box,
  77.   but the basic concepts are the same.
  78.  
  79.   I won't repeat things, so you'll have to pay attention, but that also
  80.   means you'll learn from every word you read.  It's a good idea to just
  81.   skim when you first read this; you should come back and reread it a
  82.   few times after you've digested what you have learned.
  83.  
  84.   This is an evolving document.  I intend to keep adding sections in
  85.   response to user feedback, so you should come back and review it
  86.   periodically.
  87.  
  88.  
  89.   1.2.  Related resources
  90.  
  91.   If you're reading this in order to learn how to hack, you should also
  92.   read the How To Become A Hacker FAQ
  93.   <http://www.tuxedo.org/~esr/faqs/hacker-howto.html>.  It has links to
  94.   some other useful resources.
  95.  
  96.  
  97.   1.3.  New versions of this document
  98.  
  99.  
  100.   New versions of the Unix and Internet Fundamentals HOWTO will be
  101.   periodically posted to comp.os.linux.help and and news.answers
  102.   <news:answers>.  They will also be uploaded to various Linux WWW and
  103.   FTP sites, including the LDP home page.
  104.  
  105.   You can view the latest version of this on the World Wide Web via the
  106.   URL <http://sunsite.unc.edu/LDP/HOWTO/Fundamentals-HOWTO.html>.
  107.  
  108.  
  109.   1.4.  Feedback and corrections
  110.  
  111.  
  112.   If you have questions or comments about this document, please feel
  113.   free to mail Eric S. Raymond, at esr@thyrsus.com. I welcome any
  114.   suggestions or criticisms. I especially welcome hyperlinks to more
  115.   detailed explanations of individual concepts.  If you find a mistake
  116.   with this document, please let me know so I can correct it in the next
  117.   version. Thanks.
  118.  
  119.  
  120.   2.  Basic anatomy of your computer
  121.  
  122.   Your computer has a processor chip inside it that does the actual
  123.   computing.  It has internal memory (what DOS/Windows people call
  124.   ``RAM'' and Unix people often call ``core'').  The processor and
  125.   memory live on the motherboard which is the heart of your computer.
  126.  
  127.   Your computer has a screen and keyboard.  It has hard drives and
  128.   floppy disks.  The screen and your disks have controller cards that
  129.   plug into the motherboard and help the computer drive these outboard
  130.   devices.  (Your keyboard is too simple to need a separate card; the
  131.   controller is built into the keyboard chassis itself.)
  132.  
  133.   We'll go into some of the details of how these devices work later.
  134.   For now, here are a few basic things to keep in mind about how they
  135.   work together:
  136.  
  137.   All the inboard parts of your computer are connected by a bus.
  138.   Physically, the bus is what you plug your controller cards into (the
  139.   video card, the disk controller, a sound card if you have one).  The
  140.   bus is the data highway between your processor, your screen, your
  141.   disk, and everything else.
  142.  
  143.   The processor, which makes everything else go, can't actually see any
  144.   of the other pieces directly; it has to talk to them over the bus.
  145.   The only other subsystem it has really fast, immediate access to is
  146.   memory (the core).  In order for programs to run, then, they have to
  147.   be in core.
  148.  
  149.   When your computer reads a program or data off the disk, what actually
  150.   happens is that the processor uses the bus to send a disk read request
  151.   to your disk controller.  Some time later the disk controller uses the
  152.   bus to signal the computer that it has read the data and put it in a
  153.   certain location in core.  The processor can then use the bus to look
  154.   at that memory.
  155.  
  156.   Your keyboard and screen also communicate with the processor via the
  157.   bus, but in simpler ways.  We'll discuss those later on.  For now, you
  158.   know enough to understand what happens when you turn on your computer.
  159.  
  160.  
  161.   3.  What happens when you switch on a computer?
  162.  
  163.   A computer without a program running is just an inert hunk of
  164.   electronics.  The first thing a computer has to do when it is turned
  165.   on is start up a special program called an operating system.  The
  166.   operating system's job is to help other computer programs to work by
  167.   handling the messy details of controlling the computer's hardware.
  168.  
  169.   The process of bringing up the operating system is called booting
  170.   (originally this was bootstrapping and alluded to the difficulty of
  171.   pulling yourself up ``by your bootstraps'').  Your computer knows how
  172.   to boot because instructions for booting are built into one of its
  173.   chips, the BIOS (or Basic Input/Output System) chip.
  174.  
  175.   The BIOS chip tells it to look in a fixed place on the lowest-numbered
  176.   hard disk (the boot disk) for a special program called a boot loader
  177.   (under Linux the boot loader is called LILO).  The boot loader is
  178.   pulled into core and started.  The boot loader's job is to start the
  179.   real operating system.
  180.  
  181.   The loader does this by looking for a kernel, loading it into core,
  182.   and starting it.  When you boot Linux and see "LILO" on the screen
  183.   followed by a bunch of dots, it is loading the kernel.  (Each dot
  184.   means it has loaded another disk block of kernel code.)
  185.  
  186.   (You may wonder why the BIOS doesn't load the kernel directly -- why
  187.   the two-step process with the boot loader?  Well, the BIOS isn't very
  188.   smart.  In fact it's very stupid, and Linux doesn't use it at all
  189.   after boot time.  It was originally written for primitive 8-bit PCs
  190.   with tiny disks, and literally can't access enough of the disk to load
  191.   the kernel directly.  The boot loader step also lets you start one of
  192.   several operating systems off different places on your disk, in the
  193.   unlikely event that Unix isn't good enough for you.)
  194.  
  195.   Once the kernel starts, it has to look around, find the rest of the
  196.   hardware, and get ready to run programs.  It does this by poking not
  197.   at ordinary memory locations but rather at I/O ports -- special bus
  198.   addresses that are likely to have device controller cards listening at
  199.   them for commands.  The kernel doesn't poke at random; it has a lot of
  200.   built-in knowledge about what it's likely to find where, and how
  201.   controllers will respond if they're present.  This process is called
  202.   autoprobing.
  203.  
  204.   Most of the messages you see at boot time are the kernel autoprobing
  205.   your hardware through the I/O ports, figuring out what it has
  206.   available to it and adapting itself to your machine.  The Linux kernel
  207.   is extremely good at this, better than most other Unixes and much
  208.   better than DOS or Windows.  In fact, many Linux old-timers think the
  209.   cleverness of Linux's boot-time probes (which made it relatively easy
  210.   to install) was a major reason it broke out of the pack of free-Unix
  211.   experiments to attract a critical mass of users.
  212.  
  213.   But getting the kernel fully loaded and running isn't the end of the
  214.   boot process; it's just the first stage (sometimes called run level
  215.   1).
  216.  
  217.   The kernel's next step is to check to make sure your disks are OK.
  218.   Disk file systems are fragile things; if they've been damaged by a
  219.   hardware failure or a sudden power outage, there are good reasons to
  220.   take recovery steps before your Unix is all the way up.  We'll go into
  221.   some of this later on when we talk about ``how file systems can go
  222.   wrong''.
  223.  
  224.   The kernel's next step is to start several daemons.  A daemon is a
  225.   program like a print spooler, a mail listener or a WWW server that
  226.   lurks in the background, waiting for things to do.  These special
  227.   programs often have to coordinate several requests that could
  228.   conflict.  They are daemons because it's often easier to write one
  229.   program that runs constantly and knows about all requests than it
  230.   would be to try to make sure that a flock of copies (each processing
  231.   one request and all running at the same time) don't step on each
  232.   other.  The particular collection of daemons your system starts may
  233.   vary, but will almost always include a print spooler (a gatekeeper
  234.   daemon for your printer).
  235.  
  236.   Once all daemons are started, we're at run level 2.  The next step is
  237.   to prepare for users.  The kernel starts a copy of a program called
  238.   getty to watch your console (and maybe more copies to watch dial-in
  239.   serial ports).  This program is what issues the login prompt to your
  240.   console.  We're now at run level 3 and ready for you to log in and run
  241.   programs.
  242.  
  243.   When you log in (give a name and password) you identify yourself to
  244.   getty and the computer.  It then runs a program called (naturally
  245.   enough) login, which does some housekeeping things and then starts up
  246.   a command interpreter, the shell.  (Yes, getty and login could be one
  247.   program.  They're separate for historical reasons not worth going into
  248.   here.)
  249.  
  250.   In the next section, we'll talk about what happens when you run
  251.   programs from the shell.
  252.  
  253.  
  254.   4.  What happens when you run programs from the shell?
  255.  
  256.   The normal shell gives you the '$' prompt that you see after logging
  257.   in (unless you've customized it to something else).  We won't talk
  258.   about shell syntax and the easy things you can see on the screen here;
  259.   instead we'll take a look behind the scenes at what's happening from
  260.   the computer's point of view.
  261.  
  262.   After boot time and before you run a program, you can think of your
  263.   computer of containing a zoo of processes that are all waiting for
  264.   something to do.  They're all waiting on events. An event can be you
  265.   pressing a key or moving a mouse.  Or, if your machine is hooked to a
  266.   network, an event can be a data packet coming in over that network.
  267.  
  268.   The kernel is one of these processes.  It's s special one, because it
  269.   controls when the other user processes can run, and it is normally the
  270.   only process with direct access to the machine's hardware.  In fact,
  271.   user processes have to make requests to the kernel when they want to
  272.   get keyboard input, write to your screen, read from or write to disk,
  273.   or do just about anything other than crunching bits in memory.  These
  274.   requests are known as system calls.
  275.  
  276.   Normally all I/O goes through the kernel so it can schedule the
  277.   operations and prevent processes from stepping on each other.  A few
  278.   special user processes are allowed to slide around the kernel, usually
  279.   by being given direct access to I/O ports.  X servers (the programs
  280.   that handle other programs' requests to do screen graphics on most
  281.   Unix boxes) are the most common example of this.  But we haven't
  282.   gotten to an X server yet; you're looking at a shell prompt on a
  283.   character console.
  284.  
  285.   The shell is just a user process, and not a particularly special one.
  286.   It waits on your keystrokes, listening (through the kernel) to the
  287.   keyboard I/O port.  As the kernel sees them, it echos them to your
  288.   screen then passes them to the shell.  When the kernel sees an `Enter'
  289.   it passes your line of text to the shell. The shell tries to interpret
  290.   those keystrokes as commands.
  291.  
  292.   Let's say you type `ls' and Enter to invoke the Unix directory lister.
  293.   The shell applies its built-in rules to figure out that you want to
  294.   run the executable command in the file `/bin/ls'.  It makes a system
  295.   call asking the kernel to start /bin/ls as a new child process and
  296.   give it access to the screen and keyboard through the kernel.  Then
  297.   the shell goes to sleep, waiting for ls to finish.
  298.  
  299.   When /bin/ls is done, it tells the kernel it's finished by issuing an
  300.   exit system call.  The kernel then wakes up the shell and tells it it
  301.   can continue running.  The shell issues another prompt and waits for
  302.   another line of input.
  303.  
  304.   Other things may be going on while your `ls' is executing, however
  305.   (we'll have to suppose that you're listing a very long directory).
  306.   You might switch to another virtual console, log in there, and start a
  307.   game of Quake, for example.  Or, suppose you're hooked up to the
  308.   Internet.  Your machine might be sending or receiving mail while
  309.   /bin/ls runs.
  310.  
  311.  
  312.   5.  How do input devices and interrupts work?
  313.  
  314.   Your keyboard is a very simple input device; simple because it
  315.   generates small amounts of data very slowly (by a computer's
  316.   standards).  When you press or release a key, that event is signalled
  317.   up the keyboard cable to raise a hardware interrupt.
  318.  
  319.   It's the operating system's job to watch for such interrupts.  For
  320.   each possible kind of interrupt, there will be an interrupt handler, a
  321.   part of the operating system that stashes away any data associated
  322.   with them (like your keypress/keyrelease value) until it can be
  323.   processed.
  324.  
  325.   What the interrupt handler for your keyboard actually does is post the
  326.   key value into a system area near the bottom of core.  There, it will
  327.   be available for inspection when the operating system passes control
  328.   to whichever program is currently supposed to be reading from the
  329.   keyboard.
  330.  
  331.   More complex input devices like disk or network cards work in a
  332.   similar way.  Above, we referred to a disk controller using the bus to
  333.   signal that a disk request has been fulfilled.  What actually happens
  334.   is that the disk raises an interrupt.  The disk interrupt handler then
  335.   copies the retrieved data into memory, for later use by the program
  336.   that made the request.
  337.  
  338.   Every kind of interrupts has an associated priority level.  Lower-
  339.   priority interrupts (like keyboard events) have to wait on higher-
  340.   priority interrupts (like clock ticks or disk events).  Unix is
  341.   designed to give high priority to the kinds of events that need to be
  342.   processed rapidly in order to keep the machine's response smooth.
  343.  
  344.   In your OS's boot-time messages, you may see references to IRQ
  345.   numbers.  You may be aware that one of the common ways to misconfigure
  346.   hardware is to have two different devices try to use the same IRQ,
  347.   without understanding exactly why.
  348.  
  349.   Here's the answer.  IRQ is short for "Interrupt Request".  The
  350.   operating system needs to know at startup time which numbered
  351.   interrupts each hardware device will use, so it can associate the
  352.   proper handlers with each one.  If two different devices try use the
  353.   same IRQ, interrupts will sometimes get dispatched to the wrong
  354.   handler.  This will usually at least lock up the device, and can
  355.   sometimes confuse the OS badly enough that it will flake out or crash.
  356.  
  357.  
  358.   6.  How does my computer do several things at once?
  359.  
  360.   It doesn't, actually.  Computers can only do one task (or process) at
  361.   a time.  But a computer can change tasks very rapidly, and fool slow
  362.   human beings into thinking it's doing several things at once.  This is
  363.   called timesharing.
  364.  
  365.   One of the kernel's jobs is to manage timesharing.  It has a part
  366.   called the scheduler which keeps information inside itself about all
  367.   the other (non-kernel) processes in your zoo.  Every 1/60th of a
  368.   second, a timer goes off in the kernel, generating a clock interrupt.
  369.   The scheduler stops whatever process is currently running, suspends it
  370.   in place, and hands control to another process.
  371.  
  372.   1/60th of a second may not sound like a lot of time.  But on today's
  373.   microprocessors it's enough to run tens of thousands of machine
  374.   instructions, which can do a great deal of work.  So even if you have
  375.   many proceses, each one can accomplish quite a bit in each of its
  376.   timeslices.
  377.  
  378.   In practice, a program may not get its entire timeslice. If an
  379.   interrupt comes in from an I/O device, the kernel effectively stops
  380.   the current task, runs the interrupt handler, and then returns to the
  381.   current task.  A storm of high-priority interrupts can squeeze out
  382.   normal processing; this misbehavior is called thrashing and is
  383.   fortunately very hard to induce under modern Unixes.
  384.  
  385.   In fact, the speed of programs is only very seldom limited by the
  386.   amount of machine time they can get (there are a few exceptions to
  387.   this rule, such as sound or 3-D graphics generation).  Much more
  388.   often, delays are caused when the program has to wait on data from a
  389.   disk drive or network connection.
  390.  
  391.   An operating system that can routinely support many simultaneous
  392.   processes is called "multitasking".  The Unix family of operating
  393.   systems was designed from the ground up for multitasking and is very
  394.   good at it -- much more effective than Windows or the Mac OS, which
  395.   have had multitasking bolted into it as an afterthought and do it
  396.   rather poorly.  Efficient, reliable multitasking is a large part of
  397.   what makes Linux superior for networking, communications, and Web
  398.   service.
  399.  
  400.  
  401.   7.  How does my computer keep processes from stepping on each other?
  402.  
  403.   The kernel's scheduler takes care of dividing processes in time.  Your
  404.   operating system also has to divide them in space, so that processes
  405.   don't step on each others' working memory.  The things your operating
  406.   system does to solve this problem are called memory management.
  407.  
  408.   Each process in your zoo needs its own area of core memory, as a place
  409.   to run its code from and keep variables and results in.  You can think
  410.   of this set as consisting of a read-only code segment (containing the
  411.   process's instructions) and a writeable data segment (containing all
  412.   the process's variable storage).  The data segment is truly unique to
  413.   each process, but if two processes are running the same code Unix
  414.   automatically arranges for them to share a single code segment as an
  415.   efficiency measure.
  416.  
  417.   Efficiency is important, because core memory is expensive.  Sometimes
  418.   you don't have enough to hold the entirety of all the programs the
  419.   machine is running, especially if you are using a large program like
  420.   an X server.  To get around this, Unix uses a strategy called virtual
  421.   memory.  It doesn't try to hold all the code and data for a process in
  422.   core.  Instead, it keeps around only a relatively small working set;
  423.   the rest of the process's state is left in a special swap space area
  424.   on your hard disk.
  425.  
  426.   As the process runs, Unix tries to anticipate how the working set will
  427.   change and have only the pieces that are needed in core.  Doing this
  428.   effectively is both complicated and tricky, so I won't try and
  429.   describe it all here -- but it depends on the fact that code and data
  430.   references tend to happen in clusters, with each new one likely to
  431.   refer to somewhere close to an old one.  So if Unix keeps around the
  432.   code or data most frequently (or most recently) used, you will usually
  433.   succeed in saving time.
  434.  
  435.   Note that in the past, that "Sometimes" two paragraphs ago was "Almost
  436.   always," -- the size of core was typically small relative to the size
  437.   of running programs, so swapping was frequent.  Memory is far less
  438.   expensive nowadays and even low-end machines have quite a lot of it.
  439.   On modern single-user machines with 64MB of core and up, it's possible
  440.   to run X and a typical mix of jobs without ever swapping.
  441.  
  442.   Even in this happy situation, the part of the operating system called
  443.   the memory manager still has important work to do.  It has to make
  444.   sure that programs can only alter their own data segments -- that is,
  445.   prevent erroneous or malicious code in one program from garbaging the
  446.   data in another.  To do this, it keeps a table of data and code
  447.   segments.  The table is updated whenever a process either requests
  448.   more memory or releases memory (the latter usually when it exits).
  449.  
  450.   This table is used to pass commands to a specialized part of the
  451.   underlying hardware called an MMU or memory management unit.  Modern
  452.   processor chips have MMUs built right onto them.  The MMU has the
  453.   special ability to put fences around areas of memory, so an out-of-
  454.   bound reference will be refused and cause a special interrupt to be
  455.   raised.
  456.  
  457.   If you ever see a Unix message that says "Segmentation fault", "core
  458.   dumped" or something similar, this is exactly what has happened; an
  459.   attempt by the running program to access memory outside its segment
  460.   has raised a fatal interrupt.  This indicates a bug in the program
  461.   code; the core dump it leaves behind is diagnostic information
  462.   intended to help a programmer track it down.
  463.   8.  How does my computer store things on disk?
  464.  
  465.   When you look at a hard disk under Unix, you see a tree of named
  466.   directories and files.  Normally you won't need to look any deeper
  467.   than that, but it does become useful to know what's going on
  468.   underneath if you have a disk crash and need to try to salvage files.
  469.   Unfortunately, there's no good way to describe disk organization from
  470.   the file level downwards, so I'll have to describe it from the
  471.   hardware up.
  472.  
  473.  
  474.   8.1.  Low-level disk and file system structure
  475.  
  476.   The surface area of your disk, where it stores data, is divided up
  477.   something like a dartboard -- into circular tracks which are then pie-
  478.   sliced into sectors.  Because tracks near the outer edge have more
  479.   area than those close to the spindle at the center of the disk, the
  480.   outer tracks have more sector slices in them than the inner ones.
  481.   Each sector (or disk block) has the same size, which under modern
  482.   Unixes is generally 1 binary K (1024 8-bit words).  Each disk block
  483.   has a unique address or disk block number.
  484.  
  485.   Unix divides the disk into disk partitions.  Each partition is a
  486.   continuous span of blocks that's used separately from any other
  487.   partition, either as a file system or as swap space.  The lowest-
  488.   numbered partition is often treated specially, as a boot partition
  489.   where you can put a kernel to be booted.
  490.  
  491.   Each partition is either swap space (used to implement ``virtual
  492.   memory'' or a file system used to hold files.  Swap-space partitions
  493.   are just treated as a linear sequence of blocks.  File systems, on the
  494.   other hand, need a way to map file names to sequences of disk blocks.
  495.   Because files grow, shrink, and change over time, a file's data blocks
  496.   will not be a linear sequence but may be scattered all over its
  497.   partition (from wherever the operating system can find a free block
  498.   when it needs one).
  499.  
  500.  
  501.   8.2.  File names and directories
  502.  
  503.   Within each file system, the mapping from names to blocks is handled
  504.   through a structure called an i-node.  There's a pool of these things
  505.   near the ``bottom'' (lowest-numbered blocks) of each file system (the
  506.   very lowest ones are used for housekeeping and labeling purposes we
  507.   won't describe here).  Each i-node describes one file.  File data
  508.   blocks live above the inodes.
  509.  
  510.   Every i-node contains a list of the disk block numbers in the file it
  511.   describes.  (Actually this is a half-truth, only correct for small
  512.   files, but the rest of the details aren't important here.)  Note that
  513.   the i-node does not contain the name of the file.
  514.  
  515.   Names of files live in directory structures.  A directory structure
  516.   just maps names to i-node numbers.  This is why, in Unix, a file can
  517.   have multiple true names (or hard links); they're just multiple
  518.   directory entries that happen to point to the same inode.
  519.  
  520.  
  521.   8.3.  Mount points
  522.  
  523.   In the simplest case, your entire Unix file system lives in just one
  524.   disk partition.  While you'll see this arrangement on some small
  525.   personal Unix systems, it's unusual.  More typical is for it to be
  526.   spread across several disk partitions, possibly on different physical
  527.   disks.   So, for example, your system may one small partition where
  528.   the kernel lives, a slightly larger one where OS utilities live, and a
  529.   much bigger one where user home directories live.
  530.  
  531.   The only partition you'll have access to immediately after system boot
  532.   is your root partition, which is (almost always) the one you booted
  533.   from.  It holds the root directory of the file system, the top node
  534.   from which everything else hangs.
  535.  
  536.   The other partitions in the system have to be attached to this root in
  537.   order for your entire, multiple-partition file system to be
  538.   accessible.  About midway through the boot process, your Unix will
  539.   make these non-root partitions accessible.  It will mount each one
  540.   onto a directory on the root partition.
  541.  
  542.   For example, if you have a Unix directory called `/usr', it is
  543.   probably a mount point to a partition that contains many programs
  544.   installed with your Unix but not required during initial boot.
  545.  
  546.  
  547.   8.4.  How a file gets looked up
  548.  
  549.   Now we can look at the file system from the top down.  When you open a
  550.   file (such as, say, /home/esr/WWW/ldp/fundamentals.sgml) here is what
  551.   happens:
  552.  
  553.   Your kernel starts at the root of your Unix file system (in the root
  554.   partition).  It looks for a directory there called `home'.  Usually
  555.   `home' is a mount point to a large user partition elsewhere, so it
  556.   will go there.  In the top-level directory structure of that user
  557.   partition, it will look for a entry called `esr' and extract an inode
  558.   number.  It will go to that i-node, notice it is a directory
  559.   structure, and look up `WWW'.  Extracting that i-node, it will go to
  560.   the corresponding subdirectory and look up `ldp'.  That will take it
  561.   to yet another directory inode.  Opening that one, it will find an i-
  562.   node number for `fundamentals.sgml'.  That inode is not a directory,
  563.   but instead holds the list of disk blocks associated with the file.
  564.  
  565.  
  566.   8.5.  How things can go wrong
  567.  
  568.   Earlier we hinted that file systems can be fragile things.  Now we
  569.   know that to get to file you have to hopscotch through what may be an
  570.   arbitrarily long chain of directory and i-node references.  Now
  571.   suppose your hard disk develops a bad spot?
  572.  
  573.   If you're lucky, it will only trash some file data.  If you're
  574.   unlucky, it could corrupt a directory structure or i-node number and
  575.   leave an entire subtree of your system hanging in limbo -- or, worse,
  576.   result in a corrupted structure that points multiple ways at the same
  577.   disk block or inode.  Such corruption can be spread by normal file
  578.   operations, trashing data that was bot in the original bad spot.
  579.  
  580.   Fortunately, this kind of contingency has become quite uncommon as
  581.   disk hardware has become more reliable.  Still, it means that your
  582.   Unix will want to integrity-check the file system periodically to make
  583.   sure nothing is amiss.  Modern Unixes do a fast integrity check on
  584.   each partition at boot time, just before mounting it.  Every few
  585.   reboots they'll do a much more thorough check that takes a few minutes
  586.   longer.
  587.  
  588.   If all of this sounds like Unix is terribly complex and failure-prone,
  589.   it may be reassuring to know that these boot-time checks typically
  590.   catch and correct normal problems before they become really
  591.   disasterous.  Other operating systems don't have these facilities,
  592.   which speeds up booting a bit but can leave you much more seriously
  593.   screwed when attempting to recover by hand (and that's assuming you
  594.   have a copy of Norton Utilities or whatever in the first place...).
  595.   9.  How do computer languages work?
  596.  
  597.   We've already discussed ``how programs are run''.  Every program
  598.   ultimately has to execute as a stream of bytes that are instructions
  599.   in your computer's machine language.  But human beings don't deal with
  600.   machine language very well; doing so has become a rare, black art even
  601.   among hackers.
  602.  
  603.   Almost all Unix code except a small amount of direct hardware-
  604.   interface support in the kernel itself is nowadays written in a high-
  605.   level language.  (The `high-level' in this term is a historical relic
  606.   meant to distinguish these from `low-level' assembler languages, which
  607.   are basically thin wrappers around machine code.)
  608.  
  609.   There are several different kinds of high-level languages.  In order
  610.   to talk about these, you'll find it useful to bear in mind that the
  611.   source code of a program (the human-created, editable version) has to
  612.   go through some kind of translation into machine code that the machine
  613.   can actually run.
  614.  
  615.  
  616.   9.1.  Compiled languages
  617.  
  618.   The most conventional kind of language is a compiled language.
  619.   Compiled languages get translated into runnable files of binary
  620.   machine code by a special program called (logically enough) a
  621.   compiler.  Once the binary has been generated, you can run it directly
  622.   without looking at the source code again.  (Most software is delivered
  623.   as compiled binaries made from code you don't see.)
  624.  
  625.   Compiled languages tend to give excellent performance and have the
  626.   most complete access to the OS, but also to be difficult to program
  627.   in.
  628.  
  629.   C, the language in which Unix itself is written, is by far the most
  630.   important of these (with its variant C++).  FORTRAN is another
  631.   compiled language still used among engineers and scientists but years
  632.   older and much more primitive.  In the Unix world no other compiled
  633.   languages are in mainstream use.  Outide it, COBOL is very widely used
  634.   for financial and business software.
  635.  
  636.   There used to be many other compiler languages, but most of them have
  637.   either gone extinct or are strictly research tools.  If you are a new
  638.   Unix developer using a compiled language, it is overwhelmingly likely
  639.   to be C or C++.
  640.  
  641.  
  642.   9.2.  Interpreted languages
  643.  
  644.   An interpreted language depends on an interpreter program that reads
  645.   the source code and translates it on the fly into computations and
  646.   system calls.  The source has to be re-interpreted (and the
  647.   interpreter present) each time the code is executed.
  648.  
  649.   Interpreted languages tend to be slower than compiled languages, and
  650.   often have limited access to the underlying operating system and
  651.   hardware.  On the other hand, they tend to be easier to program and
  652.   more forgiving of coding errors than compiled languages.
  653.  
  654.   Many Unix utilities, including the shell and bc(1) and sed(1) and
  655.   awk(1), are effectively small interpreted languages.  BASICs are
  656.   usually interpreted.  So is Tcl.  Historically, the most important
  657.   interpretive language has been LISP (a major improvement over most of
  658.   its successors).  Today Perl is very widely used and steadily growing
  659.   more popular.
  660.  
  661.   9.3.  P-code languages
  662.  
  663.   Since 1990 a kind of hybrid language that uses both compilation and
  664.   interpretation has become increasingly important.  P-code languages
  665.   are like compiled languages in that the source is translated to a
  666.   compact binary form which is what you actually execute, but that form
  667.   is not machine code.  Instead it's pseudocode (or p-code), which is
  668.   usually a lot simpler but more powerful than a real machine language.
  669.   When you run the program, you interpret the p-code.
  670.  
  671.   P-code can can run nearly as fast as a compiled binary (p-code
  672.   interpreters can be made quite simple, small and speedy).  But p-code
  673.   languages can keep the flexibility and power of a good interpreter.
  674.  
  675.   Important p-code languages include Python and Java.
  676.  
  677.  
  678.   10.  How does the Internet work?
  679.  
  680.   To help you understand how the Internet works, we'll look at the
  681.   things that happen when you do a typical Internet operation --
  682.   pointing a browser at the front page of this document at its home on
  683.   the Web at the Linux Documentation Project.  This document is
  684.  
  685.  
  686.   http://sunsite.unc.edu/LDP/HOWTO/Fundamentals.html
  687.  
  688.  
  689.  
  690.   which means it lives in the file LDP/HOWTO/Fundamentals.html under the
  691.   World Wide Web export directory of the host sunsite.unc.edu.
  692.  
  693.  
  694.   10.1.  Names and locations
  695.  
  696.  
  697.   The first thing your browser has to do is to establish a network
  698.   connection to the machine where the document lives.  To do that, it
  699.   first has to find the network location of the host sunsite.unc.edu
  700.   (`host' is short for `host machine' or `network host'; sunsite.unc.edu
  701.   is a typical hostname).  The corresponding location is actually a
  702.   number called an IP address (we'll explain the `IP' part of this term
  703.   later).
  704.  
  705.   To do this, your browser queries a program called a name server.  The
  706.   name server may live on your machine, but it's more likely to run on a
  707.   service machine that yours talks to.  When you sign up with an ISP,
  708.   part of your setup procedure will almost certainly involve telling
  709.   your Internet software the IP address of a nameserver on the ISP's
  710.   network.
  711.  
  712.   The name servers on different machines talk to each other, exchanging
  713.   and keeping up to date all the information needed to resolve hostnames
  714.   (map them to IP addresses).  Your nameserver may query three or four
  715.   different sites across the network in the process of resolving
  716.   sunsite.unc.edu, but this usually happens very quickly (as in less
  717.   than a second).
  718.  
  719.   The nameserver will tell your browser that Sunsite's IP address is
  720.   152.2.22.81; knowing this, your machine will be able to exchange bits
  721.   with sunsite directly.
  722.  
  723.  
  724.  
  725.  
  726.  
  727.   10.2.  Packets and routers
  728.  
  729.  
  730.   What the browser wants to do is send a command to the Web server on
  731.   Sunsite that looks like this:
  732.  
  733.  
  734.   GET /LDP/HOWTO/Fundamentals.html HTTP/1.0
  735.  
  736.  
  737.  
  738.   Here's how that happens.  The command is made into a packet, a block
  739.   of bits like a telegram that is wrapped with three important things;
  740.   the source address (the IP address of your machine), the destination
  741.   address (152.2.22.81), and a service number or port number (80, in
  742.   this case) that indicates that it's a World Wide Web request.
  743.  
  744.   Your machine then ships the packet down the wire (modem connection to
  745.   your ISP, or local network) until it gets to a specialized machine
  746.   called a router.  The router has a map of the Internet in its memory
  747.   -- not always a complete one, but one that completely describes your
  748.   network neighborhood and knows how to get to the routers for other
  749.   neighborhoods on the Internet.
  750.  
  751.   Your packet may pass through several routers on the way to its
  752.   destination.  Routers are smart.  They watch how long it takes for
  753.   other routers to acknowledge having received a packet.  They use that
  754.   information to direct traffic over fast links.  They use it to notice
  755.   when another routers (or a cable) have dropped off the network, and
  756.   compensate if possible by finding another route.
  757.  
  758.   There's an urban legend that the Internet was designed to survive
  759.   nuclear war.  This is not true, but the Internet's design is extremely
  760.   good at getting reliable performance out of flaky hardware in am
  761.   uncertain world..  This is directly due to the fact that its
  762.   intelligence is distributed through thousands of routers rather than a
  763.   few massive switches (like the phone network).  This means that
  764.   failures tend to be well localized and the network can route around
  765.   them.
  766.  
  767.   Once your packet gets to its destination machine, that machine uses
  768.   the service number to feed the packet to the web server.  The web
  769.   server can tell where to reply to by looking at the command packet's
  770.   source IP address. When the web server returns this document, it will
  771.   be broken up into a number of packets.  The size of the packets will
  772.   vary according to the transmission media in the network and the type
  773.   of service.
  774.  
  775.  
  776.   10.3.  TCP and IP
  777.  
  778.   To understand how multiple-packet transmissions are handled, you need
  779.   to know that the Internet actually uses two protocols, stacked one on
  780.   top of the other.
  781.  
  782.   The lower level, IP (Internet Protocol), knows how to get individual
  783.   packets from a source address to a destination address (this is why
  784.   these are called IP addresses).  However, IP is not reliable; if a
  785.   packet gets lost or dropped, the source and destination machines may
  786.   never know it.  In network jargon, IP is a connectionless protocol;
  787.   the sender just fires a packet at the receiver and doesn't expect an
  788.   acknowledgement.
  789.  
  790.   IP is fast and cheap, though.  Sometimes fast, cheap and unreliable is
  791.   OK.  When you play networked Doom or Quake, each bullet is represented
  792.   by an IP packet.  If a few of those get lost, that's OK.
  793.   The upper level, TCP (Transmission Control Protocol), gives you
  794.   reliability.  When two machines negotiate a TCP connection (which they
  795.   do using IP), the receiver knows to send acknowledgements of the
  796.   packets it sees back to the sender.  If the sender doesn't see an
  797.   acknowledgement for a packet within some timeout period, it resends
  798.   that packet.  Furthermore, the sender gives each TCP packet has a
  799.   sequence number, which the receiver can use you reassemble packets in
  800.   case they show up out of order.  (This can happen if network links go
  801.   up or down during a connection.)
  802.  
  803.   TCP/IP packets also contain a checksum to enable detection of data
  804.   corrupted by bad links.  So, from the point of view of anyone using
  805.   TCP/IP and nameservers, it looks like a reliable way to pass streams
  806.   of bytes between hostname/service-number pairs.  People who write
  807.   network protocols almost never have to think about all the
  808.   packetizing, packet reassembly, error checking, checksumming, and
  809.   retransmission that goes on below that level.
  810.  
  811.  
  812.   10.4.  HTTP, an application protocol
  813.  
  814.   Now let's get back to our example.  Web browsers and servers speak an
  815.   application protocol that runs on top of TCP/IP, using it simply as a
  816.   way to pass strings of bytes back and forth.  This protocol is called
  817.   HTTP (Hyper-Text Transfer Protocol) and we've already seen one command
  818.   in it -- the GET shown above.
  819.  
  820.   When the GET command goes to sunsite.unc.edu's webserver with service
  821.   number 80, it will dispatched to a server daemon listening on port 80.
  822.   Most Internet services are implemented by server daemons that do
  823.   nothing but wait on ports, watching for and executing incoming
  824.   commands.
  825.  
  826.   If the design of the Internet has one overall rule, it's that all the
  827.   parts should be as simple and human-accessible as possible.  HTTP, and
  828.   its relatives (like the Simple Mail Transfer Protocol, SMTP, that is
  829.   used to move electronic mail between hosts) tend to use simple
  830.   printable-text commands that end with a carriage-return/line feed.
  831.  
  832.   This is marginally inefficient; in some circumstances you could get
  833.   more speed by using a tightly-coded binary protocol.  But experience
  834.   has shown that the benefits of having commands be easy for human
  835.   beings to describe and understand outweigh any marginal gain in
  836.   efficiency that you might get at the cost of making things tricky and
  837.   opaque.
  838.  
  839.   Therefore, what the server daemon ships back to you via TCP/IP is also
  840.   text.  The beginning of the response will look something like this (a
  841.   few headers have been suppressed):
  842.  
  843.  
  844.   HTTP/1.1 200 OK
  845.   Date: Sat, 10 Oct 1998 18:43:35 GMT
  846.   Server: Apache/1.2.6 Red Hat
  847.   Last-Modified: Thu, 27 Aug 1998 17:55:15 GMT
  848.   Content-Length: 2982
  849.   Content-Type: text/html
  850.  
  851.  
  852.  
  853.   These headers will be followed by a blank line and the text of the web
  854.   page (after which the connection is dropped).  Your browser just
  855.   displays that page.  The headers tell it how (in particular, the
  856.   Content-Type header tells it the returned data is really HTML).
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.