第4回 V7から始めるUNIX講座 復習とまとめ
●復習
・2針クロックアルゴリズム
問題なし。
リファレンスビット(参照ビット)を2つの針でチェックして参照されてないものを
ページ・アウトの対象とする。
→メモリが足らなくなってくると針が動き出す。
VAX(DECの32ビットマシン)はリファレンスビットがなかった。
知らなかった!!ということで調べてみました。
http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=%B2%BE%C1%DB%B5%AD%B2%B1
時計アルゴリズムの実装にはページテーブルエントリに参照ビットが必要であるが,
BSD のターゲットマシンである VAX には存在しなかった.そこで,ダーティ(更新)ビットを利用し,
ソフトウェア的に参照ビットをエミュレートする形で実装された.この方法はページフォールを利用する分,オーバヘッドになった.
・スタックとヒープに関して
問題なし
brk(絶対値)、sbrk(増分)でリミットを変更する。
brk、sbrkで変更したリミットは戻らない
そこからmallocで必要なだけ切り出す。
・タスクスイッチング
基本問題なし
→proc構造体とuser構造体は相互にリンクされている。
上のコードだとr7退避してないような?
→r7(PC)はスタックに保存しています。
レジスタは退避、復元しているようですが、メモリについてはそのままということなんだろうか?
→メモリはそのまま。メモリが足らなくなってきたら、使ってないプロセスを丸ごとスワップ・アウト
スワップ・アウトしてるか分かるので、必要になった時点でスワップ・インする。
第4回目
今後はファイルシステムに行く予定なので
準備も兼ねて今日は2.9BSDをシミュレータ上で実行してみます。
V7はエディタはedしかない。
V7のメンバーがバークレーでビル・ジョイを巻き込んでBSD版チームを設立した。
そこでviを開発した。
BSD2シリーズというのがあるそうです。
http://www.law.co.jp/okamura/OpenSource_Web_Version/chapter03/chapter03.html
によると
ビル・ジョイは、様々なアップデートを反映する形で、"Second Berkeley Software Distribution"を作っている。
そして、すぐに2BSDの略称で呼ばれるようになったこのバージョンのバークレー版UNIXソフトウェアには、
改良強化版のPascalのほかviエディタが含まれていた。
数種類の端末向けのtermcapも用意されていた。
ビル・ジョイは、配布用のテープの作成から、電話の応答、ユーザからのフィードバックの実装まで、全部一人でやってのけた。
だそうです。
BSD2.9はV7+拡張になっているのでV7の勉強を便利なツールを使って行うことが出来る。
V7でedでとかは出来なくはないが、ちょっと辛い(^^;)
●インストール手順
1、BSD2.9のイメージをダウンロード
git clone git://github.com/magoroku15/2.9BSD.git
2、エミュレータのインストール
コマンドラインでpdp11を実行してエラーになるようでしたら、
$ sudo apt-get install simh
を実行してインストールしておきます。
3、起動
BSD2.9をダウンロードしたディレクトリで以下のコマンドを実行します。
$ pdp11 bsd.ini
PDP-11 simulator V3.8-1
Disabling XQ
:boot
70Boot
:
先頭にゴミが入りますが、気にせず以下のコマンドを実行します。
: rl(0,0)rlunix
Berkeley UNIX (Rev. 2.9.1) Sun Nov 20 14:55:50 PST 1983
mem = 1979072
CONFIGURE SYSTEM:
xp 0 csr 176700 vector 254 attached
rk 0 csr 177400 vector 220 attached
hk 0 csr 177440 vector 210 attached
rl 0 csr 174400 vector 160 attached
rp ? csr 176700 vector 254 interrupt vector already in use
ht 0 csr 172440 vector 224 skipped: No CSR
tm 0 csr 172520 vector 224 attached
ts 0 csr 172520 vector 224 interrupt vector already in use
dh ? csr 160020 vector 370 skipped: No CSR
dm ? csr 170500 vector 360 skipped: No autoconfig routines
dz ? csr 160110 vector 320 interrupt vector wrong
dz ? csr 160110 vector 320 interrupt vector wrong
dn 0 csr 175200 vector 300 skipped: No autoconfig routines
vp ? csr 177500 vector 174 skipped: No autoconfig routines
lp 0 csr 177514 vector 200 attached
Erase=^?, kill=^U, intr=^C
#
#はシングルユーザモードなので、コントロール+Dを押します。
# Wed Dec 31 17:16:31 PST 1969
Mounted /usr on /dev/xp0h
Attempt to mount /home on /dev/rl2 FAILED: No such file or directory
init: /dev/tty07: cannot open
init: /dev/tty06: cannot open
init: /dev/tty05: cannot open
init: /dev/tty04: cannot open
init: /dev/tty03: cannot open
init: /dev/tty02: cannot open
init: /dev/tty01: cannot open
init: /dev/tty00: cannot open
Berkeley Unix 2.9BSD
:login:
loginプロンプトが表示されるので、rootでログインします。(パスワードなし)
Welcome to the 2.9BSD (Berkeley) UNIX system.
#
となれば問題なしです。
●sttyの設定
stty all
を実行すれば端末の機能が分かります。
erase kill werase rprnt flush lnext susp intr quit stop eof
# @ ^W ^R ^O ^V ^Z/^Y ^? ^\ ^S/^Q ^D
確か、stty erase '^H'
でバックスペースが効くようになったかと思いますが、うまく行きません?
$ ls
でコントロール+Hを押下すると
# ls\s
となります?
●Man
英語ですがマニュアルも入っています。
manコマンドです。
ただし、コマンドとシステムコールが同じ名前のものは、番号を指定します。
例:write
システムコールを見たければ man 2 write
●コンパイル
コンパイラも入っているので、コンパイルが出来ます。
例:test.cをviで作成
main()
{
printf("Hello World\n");
}
# cc test.c
a.outファイルが出来るので実行
# a.out
Hello World
#
となります。
●予約語のチェックはしない。
int write;
main()
{
printf("Hello World\n");
}
として再コンパイルして実行すると
# a.out
Bus error (core dumped)
となります。なじぇ
実はprintfは内部でwriteシステムコールを使っているそうです。
そのため、int writeがバッティングしているわけです。
チェックしていないので、printfでint writeの領域をシステムコールとして実行するわけですからBus errorになったということですね。
●シンボルの確認
ファイルのシンボルを確認するのに、nmコマンドがあります。
これで、ファイルにどんなシンボルが含まれているか分かります。
●スタートアップルーチン
Cでプログラムルーチンを書くときは、main()と書けば良いと教わります。
でも、mainを呼び出してくれる、あるいはexit()をコールした時に本当の終了処理をしています。
このスタートアップルーチンが最初に実行するコードで、パラメータを設定してmainを呼ぶ。
あるいはexitの後の終了処理を行います。
組み込み系の場合、これらも含めて準備する必要があります。
●ダンプ
od(octal dump)コマンドを使えばファイルやファイルシステムをダンプできる。
まごろくさんは、これでこの辺がi-nodeでとか分かるみたいです。
8進数表示です。
ぴーたーぱーかーさんから、その後-xオプションを付ければ16進数になるよと教えて頂きました。
a(アスキーコード)オプションもあるとのことでしたが、私の環境では表示されませんでした。
ということで、慣れ親しんだ16進表記で学習が出来そうです。
ぴーたーぱーかーさんありがとうございます。(^^)
0 件のコメント:
コメントを投稿