UNIX 7th code reading - data block mapping
はじめに
「itrunc( )が7thと6thではかなり変わっているよ」というコメントを頂きました。
そんなわけで7thのitrunc( )を眺めてみたところ、ある思いが頭によぎりました。続いてbmap( )も眺めてみて、それが確信に変わりました。
「inodeからdata blockへのマッピングの仕様が6thと7thで変わっているな」
というわけで、今回は7thのinodeからdata blockへのマッピングの仕様を解説します。
6thでは
まずは6thのおさらい。6thについては以前書いたのでそちらを参照。
inodeからdatablockへのマッピングの絵を再掲します。
簡単にまとめると、こんな感じです。
7th
続いて7th。
マニュアル
inodeからdata blockへのマッピングの仕様はユーザマニュアルに載っていました。
- http://plan9.bell-labs.com/7thEdMan/bswv7.html
- v7vol2a.pdf
- IV. IMPLEMENTATION OF THE FILE SYSTEM
- v7vol2b.pdf
- 4. THE FILE SYSTEM
- v7vol2a.pdf
inodeからdata blockへのマッピング
絵に描くとこんな感じです。
ILARGフラグによる直接・間接参照の区別はなく、i_addr[n]のnで直接参照か間接参照かが決まります。
- n = 0 - 9(max : 5,120bytes = 512 bytes x 10)
- direct map(直接参照)
- n = 10(max : 70,656 bytes = 512 bytes x 128 blocks + 5,120 bytes)
- indirect map(間接参照)
- n = 11(max : 8,459,264 bytes = 512 bytes x 128 blocks^2 + 70,656 bytes)
- double indirect map(二重間接参照)
- n = 12(max : 1,082,201,088 bytes = 512 bytes x 128 blocks^3 + 8,459,264 bytes)
- triple indirect map(三重間接参照)
これにより、ソースコードがかなりシンプルになった感があります。
- itrunc
- bmap
また、この仕様変更がitrunc( ), bmap( )にしか影響が出ていないという事実も興味深い点です。モジュール性が高いと言えるでしょう。(他にもこの仕様変更で影響のでている箇所がありましたらご指摘ください)
終わりに
7thのdata blockマッピングについて、このようなコメントをいただきました。
以前紹介した「UNIXカーネルの設計」に載っていたのも7thの方式でした。
- 作者: MauriceJ. Bach,坂本文,村井純,多田好克
- 出版社/メーカー: 共立出版
- 発売日: 1991/06/01
- メディア: 単行本
- 購入: 8人 クリック: 107回
- この商品を含むブログ (23件) を見る
別の見方をすると、6thのdata blockマッピングについてまとめたエントリは、なかなか貴重なものなのかもしれません。(UNIX 6thのユーザマニュアルに載っている話ですけどね)
次回のエントリでは、さらにファイルシステム周りを見ていこうと思います。