LINUX2.5における変更点

# mcrash

## LINUX2.5における変更点

linux2.5におけるカーネル変更のうち、 mcrashに関係しているものを書きます。

### 一覧

- task_structとカーネルスタックの分離
- ジェネリックinodeとファイルシステム依存部の分離
- pageのハッシュ削除
- buffer_headとbio
- namespaceとvfsmount
- dev_tとkdev_t

このドキュメントの他のページは、Linux2.4向けに記載しています。

### task_structとカーネルスタックの分離

従来task_structとカーネルスタックは連続した8KBに割り当てられていましたが、 Linux2.5では

- task_structはスラブキャッシュから取る。
- カーネルスタックは2ページ分の連続メモリに取る。 スタックボトムにtask_structへのポインタを置く。

のようになっています。
このため、currentマクロも変更になっています。 また、従来のinit_task_unionがinit_taskとinit_thread_unionになっています。

> linux/include/asm-i386/thread_info.h
> linux/include/asm-i386/current.h

### ジェネリックinodeとファイルシステム依存部の分離

従来 struct inode の中ににext2やnfsやその他諸々のファイルシステム用の 情報がunionとして含まれていましたが、 それらはすべて無くなり `void *generic_ip` だけ残りました。

> linux/include/linux/fs.h

### pageのハッシュ削除

struct page のハッシュテーブル (`page_hash_table`) が無くなりました。 その他、virtualが無くなるなど struct page のサイズをできるだけ小さくする試みが行なわれているようです。

> linux/include/linux/mm.h

### buffer_headとbio

block層のインターフェースが従来の buffer_head から bio に変更になりました。 これについてはネット上でもいろいろ資料があるようですね。 ただしmcrashまだ対応していません。

> linux/include/linux/bio.h
> linux/include/linux/buffer_head.h

### namespaceとvfsmount

struct vfsmountのリストであるグローバル変数`vfsmntlist`が無くなりました。 代わりに struct namespace からリストされているようです。 また namespace は task_struct からポイントされています。
これはlinux-2.4.19にもbackportされるようです。

> linux/include/linux/fs.h
> linux/include/linux/namespace.h
> linux/include/linux/sched.h

### dev_tとkdev_t

kdev_tは メジャー12ビット、マイナ20ビットになるはず(?)ですが、 結局linux2.5.29ではまだ 8+8ビット のようです。

> linux/include/linux/kdev_t.h

mcrash, Copyright (C) 2002 ASANO Masahiro