Magnetic Disks (Hard Drives)

Optional readings for this topic from Operating Systems: Principles and Practice: Section 12.1.

Basic geometry:

  • 1-5 platters, magnetically coated on each surface
  • Platters spin continuously at 5000-15000 RPM
  • Actuator arm positions heads, which can read and write data on the magnetic surfaces.
  • Overall size of disk package: 1-8 inches.

Organization of disk data:

  • Circular tracks corresponding to a particular position of the actuator arm.
  • Typical density today: 200,000 tracks per radial inch.
  • Tracks divided into 4096-byte sectors. Typical tracks contain a few thousand sectors.
  • Typical total drive capacities: 100GB-2TB
    • 100GB ~ 50M double-spaced pages of text.
  • Disk technology has been one of the most rapidly advancing technologies: until recently, capacities have increased faster than Moore's Law.

Reading and writing:

  • Seek: move actuator arm to position heads over desired track. Typical seek time: 2-10ms.
  • Select a particular head.
  • Rotational latency: wait for desired sector to pass under the head. One-half disk rotation on average (4ms @ 7500RPM)
  • Transfer: read or write one or more sectors as they pass under the head. Typical transfer rates: 100-150 MBytes/sec.
  • Latency refers to the sum of seek time plus rotational latency; typically 5-10ms.

API for disks:

read(startSector, sectorCount, physAddr)
write(startSector, sectorCount, physAddr)

In the old days the track and surface structure of the disk was visible to software:

read(track, surface, sector, sectorCount, physAddr)

Nowadays the track structure is hidden inside the disk:

  • Inner tracks have fewer sectors than outer tracks
  • If some sectors are bad, disk software automatically remaps them to spare sectors.

Communicating with I/O Devices

Device registers:

  • Each device appears in the physical address space of the machine as a few words, called device registers.
  • The operating system reads and writes device registers to control the device.
  • Bits in device registers serve 3 purposes:
    • Parameters provided by CPU to device (e.g. number of first sector to read)
    • Status bits provided by device to CPU (e.g. "operation complete" or "error occurred").
    • Control bits set by CPU (e.g. "start disk read") to initiate operations.
  • Device registers don't behave like ordinary memory locations:
    • "Start operation" bit may always read as 0.
    • Bits may change without being written by CPU (e.g. "operation complete" bit).

Typical I/O operation:

  • CPU writes device registers to start operation (e.g., read)
  • Once operation has started, ready bit reads as zero
  • When operation is finished, device sets ready
  • One approach to I/O is to poll the ready bit (but then CPU wastes time until the I/O finishes)

Interrupts: allow CPU to do other work while devices are operating.

  • "Interrupt Enable" bit in device register

  • CPU starts I/O operation, sets IE bit, then works on other things.

  • When device needs attention (operation completes) it interrupts the CPU:

    • A forced procedure call to a particular address in the kernel.
  • Operating system figures out which device interrupted, services that device.

    • Either start a new operation or turn off the IE bit.
  • Operating system returns from the interrupt back to whatever it was working on.

  • Interrupts make the operating system much more efficient; for example, can keep many devices busy at the same time, while also running user code.

  • Multi-core machines spread the interrupts around to balance loads.

  • Most devices also support DMA (Direct Memory Access):

    • Device can transfer data to and from physical memory, without help from the CPU.
    • CPU loads buffer address into a device register before starting operation (e.g., where to copy data read from disk).
    • Device moves data directly to/from physical memory.