Web教材一覧ハードウェアとソフトウェア

磁気ディスクの基礎

キーワード

記憶容量,シリンダ,トラック,セクタ,転送速度,シーク時間,サーチ時間,ブロック化、ブロック化因数、ブロック間隔


磁気ディスク

ディスクの構造

磁気ディスク(magnetic disk)は、単にディスク、ハードディスクあるいはHDD(Hard Disk Driver)ともいいます。パソコンがの普及初期には、外部記憶装置として、プロッピーディスク(薄いプラスチックの円盤)が用いられており、それとの対比で「ハード」といわれたのです。

磁気ディスクは、パソコンの筐体の内部に組み込まれている内蔵ディスクと取外しのできる外付けディスクがあります。内蔵ディスクは仮想記憶方式の主要要素であり不可欠な存在で、外付けディスクはデータのバックアップ用に広く用いられています。近年はより高速なSSDを搭載したパソコンが普及してきましたが、それでも磁気ディスクは主流の座を保っています。

磁気ディスクの構造

磁気ディスク装置は,図のように,両面に磁性体を塗布した数枚の円盤形状の磁気ディスク(プラッタ)とその磁気面に位置づけして情報を読込み書出しするスイングアーム機構から構成されています。
 スイングアームの先端には磁気ヘッドがあり、プラッタの磁気のON/OFFをキャッチしたり、プラッタの磁気をON/OFFにすることができます。プラッタが回転し十分高速になると、空気の流れにより磁気ヘッドはわずかに浮上します。磁気面と接触せずにアクセスが行われるので磁気面の損傷が防げます。

すべてのスイングアームは1つのスイングアーム回転軸に固定されているので、すべての磁気ヘッドは同じ動きでプラッタ上を移動します。スイングアープの回転によりプラッタの中心からの距離が決まり。プラッタの回転により中心からの角度がきまるので、この機構ですべての記録位置に磁気ヘッドを移動することができます。

以下、磁気ディスクの容量と転送速度の計算例を示しますが、磁気ディスクの性能は急激に向上しています。それにも関わらず、ここでは数十年前の諸元を用いています(修正するのが面倒だという理由です)。


磁気ディスクの容量計算

すなわち、磁気ディスクの総容量は、
   総容量=記録面×トラック数×セクタ数×1セクタのバイト数
で計算できます。

問題
記録面が6面の磁気ディスク装置において,
  1面当たりのトラック数が5,000本で,
  各トラックのセクタ数が表のとおりであるとき,
この磁気ディスク装置の容量は約何Gバイトか。
ここで,セクタの長さは512バイトとする。
   トラック番号  セクタ数
     0~ 699    300
    700~1499    250
   1500~2999    200
   3000~4999    150
解答
トラック番号 トラック数 セクタ数 容量(注:1セクタ長=512バイト)
  0~ 699    700     300   512×300× 700=107,520,000
700~1499    800     250   512×250× 800=102,400,000
1500~2999   1500     200   512×200×1500=153,600,000
3000~4999   2000     150   512×150×2000=153,600,000
                  -----------------------------
     1面あたりの容量(バイト)         517,120,000

517,120,000バイト→0.52GB,  または517,120,000/1024=0.48GB,
6面あるので,6×0.52=3GB または6×0.48=3GB・・・答

磁気ディスクのアクセス時間

ディスクの時間 ディスクからデータを読み出したり書き込んだりする時間を計算します。

    総時間=[シーク時間]+[サーチ時間]+[転送時間]

シーク時間
アームが対象データが存在するトラックのところ(A)まで移動する時間。
サーチ時間
ディスクが回転して,対象となるデータの先頭部分(B)が回転して,アームのところ(A)に到達するまでの時間。平均的にはディスクが半回転する時間になります。
ディスクの回転速度は,rpm[回転数/分]で与えられるのが通常です。たとえば,6000rpmならば,100[回転/秒]ですから,1回転に要する時間は0.01[秒/回転],すなわち,10ms(ミリ秒)になります。サーチ時間は半回転の時間ですから5msとなります。
転送時間
データを読取る時間。読むためのCPUやメモリの時間は,ディスクの回転速度よりも高速ですから,データの先頭部分(B)がAに来てから,末尾部分(C)がAに来るまでの時間になります。
この時間を求めるには,対象データがトラックのどれだけを占めるかを知る必要があります。もし,1トラックの容量が92KBであり,対象データが18.4KBならば,18.4/92=0.2[回転]ですから,転送時間は0.2×10=2msになります。
問題
次の磁気ディスクで1KBを転送するのに要する時間を求めよ。
  回転数        6,000rpm
  トラックの記録密度  200セクタ/トラック
  セクタ長       500バイト/セクタ
  シーク時間      1ms

ただし,1KBは1000バイトとして計算せよ。
解答
6,000rpm[回転/分]→100[回転/秒]→10[ms/回転]
 1トラック当たりの容量=500×200=100,000バイト
 1回転(10ms)で100,000バイト→10,000[バイト/ms]
 1KB(1000バイト)では0.1ms
   転送に要する時間
   = シーク時間    1ms
   + サーチ時間    5ms(←半回転)
   + データ転送時間  0.1ms
        合計    6.1ms ・・・答

ブロック化

上記の性能の説明は、データが途切れることなく連続的に記録されていることが前提でした。ところが実際の売上ファイルのデータなどを対象にしたときには、このような性能を得ることができません。

話を単純にするために、ファイルの1レコードが80バイトの固定長であるとし、セクタを500バイトだとします。
 プログラムは、ファイルから1レコードずつ読み込んで処理をします。ところが磁気ディスクでは1回に1セクタを読込みます。そうすると、1セクタには1レコードしか入れられません。
 容量では1セクタで500-80=420バイトの無駄が生じます。
 転送速度では、1回のアクセス時間で80バイトした転送できません。

これではあまりにも効率が悪いので、OSの機能により複数のレコードをブロックとして一度に読込みバッファに保存し、プログラムの読込み命令にはバッファから1レコードずつ渡すような仕組みになっています。

1ブロック=2レコードだとします。それをブロック化因数=2といいます。ブロックとブロックの間には、切れ目として10バイトのブロック間隔が必要だとします。
 レコードはセクタをまたいで記録することはできないので、1セクタに入れられるのは、
   2×80+10 + 2×80+10 + 2×80=500
ですから、6レコードになり、容量効率がよくなります。