2012-05-06 2 views
3

私はLBAからCHSへの方程式がhereであることを見てきました。誰かがこれらの方程式がなぜ機能するのか説明できますか? (おそらく、データがフロッピーディスクなどの記憶装置に格納される順序の簡単な説明を与える)LBAからCHSへの説明

+1

時間の変換と同じ種類のものです(分:秒から秒まで)。あなたは異なる数字しか持っていません。 –

答えて

8

CHSは、ディスクが文字通りデータにアクセスした日からのシリンダ、ヘッドおよびセクタを参照します。シリンダ、ヘッドおよびセクタを読み取る。

LBAは基本的にディスクを連続的に増加するブロック数として扱う新しい方式です。

変換スキームは本質的にあなたを一方から他方に導きます。まず、方程式は、あなたが知る必要があるいくつかの値、つまりシリンダあたりのヘッド数、ヘッドあたりのセクタ数のプレースホルダを与えます。

そうで、今、あなたはこのようないくつかのデータを持っていると想像:

Cylinder number Head Number  Sector Number Data   LBA 
================================================================================ 
     0    0    0   A    1 
     0    0    1   B    2 
     0    0    2   A    3 
     0    1    0   B    4 
     0    1    1   A    5 
     0    1    2   B    6 

これは頭あたりわずか3つのトラックがされた故意に不自然なスキームです。どうやって、私たちはLBAを注文することを選択しました。しかし、ヘッドを切り替えるときは、トラック番号を増やす必要があります。したがって、私たちは言うことができる:

LBA = sectors per head * current head + current sector number 

をだから今LBA 4を見つけるために、我々は(0,1,0)に等しいCHS表記で知っています。 1頭当り3セクター、3*1+0=4

私は意図的に-1を見逃してしまったので、LBAがゼロオフセットであるために使用されています。

とにかく、これはヘッドとセクタでうまく動作しますが、シリンダーはどうですか?さて、シリンダ番号が1つ上がると、number of heads per cylinderヘッドがディスク上で前方にジャンプしました。これはディスク上のセクタnumber of heads per cylinder times number of sectors per headです。私たちは、シリンダ、ヘッド、セクターのタプルを与えられている場合は、我々はどのように多くのまで追加可能性がある分野うまくすることができます:左から右への作業

LBA = (((cylinder number * heads per cylinder) + head number) * 
     * sector per head) + sector number - 1 

、式の最初の部分は、シリンダ番号を変換し、ジャンプするのに必要なヘッドの数。次の部分はそれに現在のヘッド番号を加え、それを多数のセクタに変換する。最後に、現在のセクター番号を追加し、ゼロインデックスから1を減算します。

私はここで、正当な理由から繰り返しています。これは、それらの概念の1つです。それが役に立つなら、16進数から10進数への並行変換を描きます。私はあなたにFEDを与えて、何が小数であるのかを知りたいとします。つまり、変換は次のようになります。

dec = (((15*16)+14)*16)+13 

どうしましたか? FEDの左から右には、 "10"あたり16個の "100"があり、15桁があります。これに "10"という数字を追加します。これは14です。 1単位あたり16個の「10」。最後に、余分な13単位を追加します。

事はあなたが小数で毎日この種のものを行う、である - ここでの唯一の難点は、ベース、またはradix 10ではないので、私たちの自然な表記で理にかなっていること数であるということです。


編集:あなたは実際に反対方向について尋ねています。それはで、多くは

最初に、モジュラス演算子 - これは、ある値を別の値で割ったときの余りを意味します。だから我々がr = X mod Yを持っていれば、XをYで割ったときの残りはrです。

これは時計のように時計のように循環的に変化します増加X

我々はまた、除数の商を計算することができる - 対XYおよびコンピューティングX/Y与えられ、それはAようX > AYの最大値です。

商と剰余を5で割った商と剰余を計算するように要求された場合、5が5を割り切るので2 = 32 mod 5となります。商は6です。

右のようになります。 LBAアドレスが与えられていると、ヘッドあたりのトラックに1シリンダあたりのヘッドを掛けると、与えられたシリンダ数が「カバーする」トラック数が得られます。この範囲の残りの部分はすべて同じシリンダを使用します。上の考案されたテーブルを使った実際の例:ヘッドあたり3つのトラックがあり、シリンダあたり6つのヘッドがあるとします - したがって6 * 3 = 18です。今度はLBAを取って、5 - 5/18 = 0の余り5を求めます。その商の値をシリンダ番号にします。

したがって、次の質問では、LBA番号を1トラックあたりのセクタ数で割っています - なぜですか?覚えておいて、私たちのLBAは「トラック」を数えます。この値で割るとフロアを取る(個々のトラックがすべての可能な残りの部分を占めているので)、私たちを頭に変換します。この値をシリンダあたりのヘッド数を法とするようにします。たとえば、シリンダあたり6ヘッド、ヘッド値が8の場合、ヘッド数は2と正確に報告されます(シリンダ数は1です。最初の6)。

最後に、セクタ番号は、1トラックあたりのセクタ(ゼロインデックス付けをオフセットする1つの残り)で除算された単純なLBAです。どうして?まあ、それぞれのトラックには、異なるヘッド/トラックが必要となる前に、特定の数のセクタしか含めることができません。

+0

ありがとう! –

+0

私はそれを理解しようと同じ問題を抱えています... WTHは 'head-per-cylinder'と' heads-per-head'です.... 'head-per-platter'、' sectors -per-track'と 'cylinders-per-disk'とは何ですか?私はちょうどこの質問を少し前に尋ねました - http://stackoverflow.com/questions/32642016/chs-to-lba-mapping-disk-storage何か助けていただければ幸いです、ありがとうございます! –