気が向くまで(永久に?)、休止します。いろいろとやりたいことはあるのですが・・・ 2000.12.01

すみません、作成中です。というか、自分用のメモに近い物ですので、あまり期待しないでください。
また、MINIXの使いこなし講座でもありませんし、MINIXのすすめでもありません。念のため。(OSとして使うならLinuxなどを私も活用していますし、お薦めします。)

1.準備運動

1.1なぜMINIXか?

 '98年4月に業務の一環としてソフトウェア関係の研修を受けました。 講義内容はOSについてでは無かったのですが、講師の方は分散オペレーティングシステムの理論から実装までこなす人で、技術に詳しく教え方も上手い方でした。
講義が終わってから、OSの実装について勉強したいのだが、なにを読んだら良いか聞いたところ、「MINIXのソースを読みなさい」とのことでした。
FreeBSDなどではだめか聞いたところ、使うならLinuxを薦めるが、勉強するならMINIXとの事でした。(実際、持っていたノートにはLinuxがインストールされていました!) 「理論を学び、きれいなソースを読まないと自分でコードが書けるようにはならない」とも言っていました。

 尊敬できそうな人に言われると弱いので(笑)、よし、MINIXを勉強してみようと思い立ったのでした。 また、昔から自分でCPUとOSを作ってみたいと思っていたこともあって、FreeBSDのソースを読んでみようかと思った事もあったりするので、しばらくMINIXのソースを勉強することにしました。

目標:自分でOSの設計・実装を行う

1.2 MINIXの入手方法

 とりあえず手元にある雑誌付録のCD-ROMをチェックしてみたが、LinuxやFreeBSDは見つかったものの、MINIXは無い。日本橋でMINIXの入っているCD-ROMが売っていないかチェックしてみたが無い。
これはAST先生の本を買うしかないかなぁと思っていたのですが、インターネットで MINIXのWEBページを調べたら容量は17MB程度であることが判明したのでダウンロードしてしまった。
ライセンス規定について読むと、Prentice-Hall社が著作権を保有し、フリーでもGNUでもないそうです。ただし、教育・研究用には無償で使えるとあります。もちろん私は研究用途。 CD-ROMなどに収録されないのはこういう理由なのかな?
とりあえず本も発注しました。

Title:Operating Systems: Design and Implementation, 2/e
Autors:Andraw S. Tanenbaum, Albart S. Woodhull
Publisher: Prentice-Hall

1.3 インストール

 ドキュメントにあるとおりにFDを9枚作って順にインストールするだけの簡単な手順です。
以下に手順を書きます。

FDの作成。
ダウンロードしたファイルをfdvol.exeを使ってFDに書き込む。以下の9枚になるでしょう。

root+usrディスクをFDDに入れ、PCを起動します。

|Hit a key as follows:
|
|    = Start Minix
で = キーを押す。
|Finish the name of device to mount as /usr: /dev/
に対してfd0cを入力。(/dev/fd0c)
|noname login: 
に対してrootでログイン。
#setup
|Keyboard type? [us-std]
に対してキーボードタイプを選択。us-stdかjapaneseになると思います。
|  Select deice        ----first----  --geom/last--  ------sectors-----
|    Device             Cyl Head Sec   Cyl Head Sec      Base      Size        Kb
|    /dev/hd0                         1010    6  55
|                         0    0   0  1009    5  54         0    333300    166650
|Num Sort   Type
| 1* hd1  04 DOS-16       0    1   0   186    5  54        55     61655     30827
| 2  hd2  00 None         0    0   0     0    0  -1         0         0         0
| 3  hd3  00 None         0    0   0     0    0  -1         0         0         0
| 4  hd4  00 None         0    0   0     0    0  -1         0         0         0
|
|at-hd0: WDC AC1170F
|  Select deice        ----first----  --geom/last--  ------sectors-----
|    Device             Cyl Head Sec   Cyl Head Sec      Base      Size        Kb
|    /dev/hd0                         1010    6  55
|                         0    0   0  1009    5  54         0    333300    166650
|Num Sort   Type
| 1  hd1  04 DOS-16       0    1   0   186    5  54        55     61655     30827
| 2* hd2  81 MINIX      187    0   0  1009    5  54     61710    271590    135795
| 3  hd3  00 None         0    0   0     0    0  -1         0         0         0
| 4  hd4  00 None         0    0   0     0    0  -1         0         0         0
|
|at-hd0: WDC AC1170F
w ,yでパーティション情報を書き込み。
|dev/
に対してhd2を入力(/dev/hd2)
|Root subpartition:    /dev/hd2a     1440kb
|/usr subpartition:    /dev/hd2c     rest of hd2
|Scanning /dev/hd2c for bad blocks.
いまどきのハードドライブにエラーが有ることはそう無いと思いますが、念のためチェックをしておいたほうが良いでしょう。
|halt
|
|boot hd2
でHDDからブートするので、rootでログインする。
|noname login:
|# setup /usr |What is the size of the images on the diskettes? [all] [RET] |What floppy drive to use? [0] [RET} i386\usr.taz 1/3, 2/3, 3/3を順に入れる。(各種コマンド) 同様に setup /usrで sys.taz 1/2, 2/2とcmd.taz 1/3,2/3,3/3をインストール。
|# df
|
|Device     Inodes  Inodes  Inodes     Blocks  Blocks  Blocks  Mounted    V Pr
|           total   used    free       total   used    free      on
|           -----   -----   -----      -----   -----   -----   -------    - --
|/dev/hd2a    480     201     279       1440     333    1107   /          2 rw
|/dev/hd2c  16800    2667   14133     134354   20258  114096   /usr       2 rw
ホストネームの設定
|# echo mini > /etc/hostname.file
ブートモニタの設定
ブートモニタ画面で[ESC]を押す
minixとdosを切り替えられるようにする。
|hd2a>minix(=,MINIX){boot}
|hd2a>dos(d,MS-DOS{boot hd1}
|hd2a>main(){trap 3000 minix; menu}
|hd2a>save
|hd2a>menu
rootのパスワード設定と一般ユーザアカウントの作成。
|#passwd

|# adduser atoc other /user/atoc
一般ユーザでログインし、パスワードを設定する。
|# login atoc
|Passwd

|$

|$ passwd
あとはシェルの設定など、好みに応じて設定しましょう。

1.4カーネルのコンパイル

標準状態でコンパイル

|# cd /usr/src/tools
|# make
約11分でコンパイル終了。(real 11:08.00 user 7:25.90 sys 2:30.40)
|# make fdboot

ネットワークサポートを加えてコンパイル

/usr/include/minix/config.hの定数を変更。
ENABLE_NETWORKING 1
NR_PROCS 64
NR_PTYS 8
ブート時のパラメータに
DPETH0=300:10
/etc/rc.netにネットワークアドレス設定を入れる。
ifconfig -h 192.168.1.15 -n 255.255.255.0
/etc/profileにタイムゾーン設定を入れる
TZ='JST-9' export TZ

1.5各種ソフトのコンパイル・インストール

MINIXをインストールして、適当に使ってみたらどうも使いづらい。理由は明らかで、シェルの機能が低いことと、エディタがmuleでないためです。シェルはbashかtcsh、せめてcshぐらいは使いたいものです。
OSの勉強が目的であり、ソフトの移植や操作環境の向上はあまり手をかけたくないのですが、シェルぐらいは準備する必要が有るでしょう。
GNU方面のソフトなら「configureしてmakeすればオッケー」ぐらいに考えていたのですが、MINIXはそうではなかった…。shellの機能が少ないのか、makeが弱いのか、ライブラリの問題なのか、不明です。結局自分でmakefileを作って完成しました。あっさり移植できないとかえって燃えるもので、半分パズル感覚で遊んでしまいました。

ここまでが準備運動ですね

2ソースコードを読む

2.1どこから手を付けるか

UNIX系のOSのソースコードを読む時は、ファイルが多数ありすぎてどこから手を付けたらよいのか良く判りません。データ構造を把握するべきなのか、init.cあたりから読むべきなのか、と考えていたらたOperating Systems: Design and Implementation, Second Editionが到着。ぱらぱらっとめくってみたところ、判りやすい(気がする)。ast教授って優れた教育者なのでは?なんて思うほど。ということで、もっと先に進みたい人はこの本を買いましょう。というのはほとんど本気です。

#しかし、このレートの高い時に買ったのは失敗だったかなぁ…。

'98.5.30に梅田(大阪)の書店でOperating〜の邦訳を発見。うーむ、原書を買った後で訳書がでるとは。安くなかったけれど、ソースコードのコメントまで訳してあったのでそのうち買うかも…。



NG Tech.labトップページへ戻る

Copyright(C)1997,1998 NG Tech./ ATOC. All rights reserved.

このホームページに関してご意見などありましたら
ng-tech@truebits.com
までどうぞ