Skip to main content
Engineering LibreTexts

2.1: Overview

  • Page ID
    58497
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Construction of reliable systems from unreliable components is one of the most important applications of modularity. There are, in principle, three basic steps to building reliable systems:

    1. Error detection: discovering that there is an error in a data value or control signal. Error detection is accomplished with the help of redundancy, extra information that can verify correctness.
    2. Error containment: limiting how far the effects of an error propagate. Error containment comes from careful application of modularity. When discussing reliability, a module is usually taken to be the unit that fails independently of other such units. It is also usually the unit of repair and replacement.
    3. Error masking: ensuring correct operation despite the error. Error masking is accomplished by providing enough additional redundancy that it is possible to discover correct, or at least acceptably close, values of the erroneous data or control signal. When masking involves changing incorrect values to correct ones, it is usually called error correction.

    Since these three steps can overlap in practice, one sometimes finds a single error-handling mechanism that merges two or even all three of the steps. 

    In earlier chapters, some of these ideas have already appeared in specialized forms:

    • A primary purpose of enforced modularity, as provided by client/server architecture, virtual memory, and threads, is error containment.
    • Network links typically use error detection to identify and discard damaged frames.
    • Some end-to-end protocols time out and resend lost data segments, thus masking the loss.
    • Routing algorithms find their way around links that fail, masking those failures.
    • Some real-time applications fill in missing data by interpolation or repetition, thus masking loss.

    and, as we will see in Chapter 5, secure systems use a technique called defense in depth both to contain and to mask errors in individual protection mechanisms. In this chapter we explore systematic application of these techniques to more general problems, as well as learn about both their power and their limitations.


    This page titled 2.1: Overview is shared under a CC BY-NC-SA license and was authored, remixed, and/or curated by Jerome H. Saltzer & M. Frans Kaashoek (MIT OpenCourseWare) .