HD.4
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:7k
源码类别:

操作系统开发

开发平台:

C/C++

  1. HD(4)                     Minix Programmer's Manual                      HD(4)
  2. NAME
  3.      hd - winchester hard disk
  4. DESCRIPTION
  5.      The hd* family of devices refer to the Winchester hard disk  drivers  for
  6.      the  IBM XT, AT and PS/2 machines, but may also refer to the generic (and
  7.      slower) BIOS based hard disk driver.  These disks are arrays of 512  byte
  8.      sectors,  although  Minix  always works with two sectors at a time due to
  9.      its 1024 byte block size.  You can read or  write  any  number  of  bytes
  10.      however,  Minix  takes  care  of  cutting  and  pasting incomplete blocks
  11.      together.
  12.      The devices may be divided into three classes:
  13.           The devices with a minor device number that is a multiple of 5, i.e.
  14.           hd0  or  hd5,  refer  to the whole hard disk 0 and 1.  Through these
  15.           devices one has access to any block on the hard disk.  Most  notably
  16.           the  partition  table,  that can be found in the first sector of the
  17.           disk.
  18.           The devices with a minor device number that is not a multiple of  5,
  19.           i.e.   hd1,  hd2,  ..., hd6, ..., refer to primary partitions of the
  20.           lower numbered whole  hard  disk  device.   These  devices  normally
  21.           contain  MS-DOS or Minix file systems.  /dev/hd1 is often the MS-DOS
  22.           C: drive.
  23.           Minor devices from 128 up may refer to  Minix  subpartitions  within
  24.           primary  partitions  if  a  subpartition  table has been placed in a
  25.           Minix primary partition.  The subpartitions of hd3 for instance, are
  26.           named  hd3a  through  hd3d.   Their  minor  device  numbers  may  be
  27.           calculated as 128 + 16*drive + 4*partition + subpartition,  counting
  28.           the partitions from zero.
  29.      If a primary partition is an extended partition then up to  four  logical
  30.      partitions  can  be accessed as subpartitions of that extended partition.
  31.      This allows one  to  access  foreign  file  systems  of  other  operating
  32.      systems,   Minix   file  systems  are  not  normally  placed  in  logical
  33.      partitions.
  34. PARTITIONING
  35.      The first sector of a drive (or partition for  subpartitioning)  contains
  36.      the  partition  table  at byte offset 446.  This is what each of the four
  37.      entries looks like as defined in <ibm/partition.h>:
  38.      /* Description of entry in the partition table.  */
  39.      struct part_entry {
  40.        unsigned char bootind;       /* boot indicator 0/ACTIVE_FLAG      */
  41.        unsigned char start_head;    /* head value for first sector       */
  42.        unsigned char start_sec;     /* sector value + high 2 cyl bits    */
  43.                                                                              1
  44. HD(4)                     Minix Programmer's Manual                      HD(4)
  45.        unsigned char start_cyl;     /* low 8 cylinder bits               */
  46.        unsigned char sysind;        /* system indicator                  */
  47.        unsigned char last_head;     /* h/s/c for the last sector         */
  48.        unsigned char last_sec;
  49.        unsigned char last_cyl;
  50.        unsigned long lowsec;        /* logical first sector              */
  51.        unsigned long size;          /* size of partition in sectors      */
  52.      };
  53.      #define ACTIVE_FLAG     0x80   /* value for active in bootind field */
  54.      #define NR_PARTITIONS   4      /* number of entries in table        */
  55.      #define PART_TABLE_OFF  0x1BE  /* offset of table in boot sector    */
  56.      /* Partition types (sysind). */
  57.      #define MINIX_PART      0x81   /* Minix partition type */
  58.      #define NO_PART         0x00   /* unused entry */
  59.      #define OLD_MINIX_PART  0x80   /* created before 1.4b, obsolete */
  60.      #define EXT_PART        0x05   /* extended partition */
  61.      The cylinder numbers are encoded in a very strange way, bits 8 and 9  are
  62.      in the high two bits of the sector number.  The sector numbers count from
  63.      1, not 0!  More useful are the  lowsec  and  size  fields  however,  they
  64.      simply  give  the  location of the partition as an absolute sector offset
  65.      and length within the drive.
  66.      The partition table entry defined above is specific to  IBM  type  disks.
  67.      The  device  drivers  use  another  partition  entry  structure  to  pass
  68.      information on a partition.  This is what <minix/partition.h> looks like:
  69.      struct partition {
  70.        u64_t base;              /* byte offset to the partition start */
  71.        u64_t size;              /* number of bytes in the partition */
  72.        unsigned cylinders;      /* disk geometry for partitioning */
  73.        unsigned heads;
  74.        unsigned sectors;
  75.      };
  76.      The base and size fields are the byte offset and length of  a  partition.
  77.      (These  are 64 bit numbers under Minix-vmd, but only 32 bit numbers under
  78.      standard Minix.)  The geometry of the disk is also given for the  benefit
  79.      of  partition  table  editors.   This information can be obtained from an
  80.      open disk device with the call:
  81.           ioctl(fd, DIOCGETP, &entry);
  82.      One can change the placement of the device to the lowsec and size  fields
  83.      of  entry  by  using  the  DIOCSETP call instead.  Only the base and size
  84.      fields are used for DIOCSETP.
  85.                                                                              2
  86. HD(4)                     Minix Programmer's Manual                      HD(4)
  87.      The partition tables when read from disk by the driver  are  checked  and
  88.      truncated to fit within the primary partition or drive.  The first sector
  89.      should be left free for the partition table.
  90.      The partition tables are read when the in-use count  (opens  and  mounts)
  91.      changes  from  0 to 1.  So an idle disk is automatically repartitioned on
  92.      the next access.  This  means  that  repartitioning  programs  only  have
  93.      effect  if  a  disk  stays in use, unless they reload a changed partition
  94.      table.
  95. FILES
  96.      /dev/hd[0-9], /dev/hd[1-46-9][a-d]
  97. SEE ALSO
  98.      ioctl(2), int64(3), part(8), repartition(8).
  99. BUGS
  100.      The subpartitioning is incompatible with the MS-DOS  method  of  extended
  101.      partitions.   The  latter  does  not  map well to the sparse minor device
  102.      number space.
  103.      The primary partition  table  is  sorted  by  lowsec  like  MS-DOS  does,
  104.      subpartition  tables  are  not.   Just  think about what happens when you
  105.      delete a partition in the MS-DOS scheme.
  106.      Don't move a partition that is mounted or kept open by some process.  The
  107.      file system may write cached blocks to the new location.
  108.      The BIOS driver is not slow at all on a buffered disk.
  109.      Some IDE disks send an interrupt when they spin down under hardware power
  110.      management.   The  driver acknowledges the interrupt as it is supposed to
  111.      do by reading the status register.  The disk then spins up again...   You
  112.      have to disable the spin down in the computer setup to fix the problem.
  113. AUTHOR
  114.      Kees J. Bot (kjb@cs.vu.nl)
  115.                                                                              3