AO diary

2004|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|02|

2010-02-01

Blog migration

このブログは2010年1月から http://geodenx.blogspot.com/ [blogspot.com] に引っ越しました。

RSS reader、Bookmark などに登録している方は、変更お願いします。


2009-12-31

Blog migration

Linode [linode.com] から卒業するためにこの日記は Blogger に移行します。

新しい URL: http://geodenx.blogspot.com/ [blogspot.com]


2009-12-28

OS - Chap9: Developing a Kernel with C

作りながら学ぶOSカーネル』[amazon.co.jp] 9章「C言語で作るカーネル」。最終章でようやくC言語登場!と思ったら、C言語の関数コールの仕組みと、DMAとディスケットドライブの制御方法の説明が殆ど。前者はカーネルをC言語に移植するために必要だけど、教科書なんだからディスケットなど使わずにRAMディスクでいい気もする。

本文通り GCC を使ってもよいが、折角 OpenSolaris 環境なので、Sun Studio 12 Update 1 [sun.com] を導入(Linux 版も出ているようだ)。

$ pfexec pkg install sunstudio12u1
$ cc -V
cc: Sun C 5.10 SunOS_i386 2009/06/03
$ ld -V
ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1652

GCC はインストールしていないのに、man cc や man ld とすると GNU cc や GNU ld の man page が引っかかるので注意。GNU ld も Sun ld もオプションが同じだとヌカ喜びしてしまった。

$ man ld
$ man -l ld
ld (1)	-M /usr/gnu/share/man
ld (1)	-M /usr/share/man
ld (1b)	-M /usr/share/man
$ man -M /usr/share/man ld

しかし結局、man page だけでは足りずマニュアルを探す。リンカーに関しては Sun Studio のドキュメントには含まれていなく Solaris 10 Software Developer Collection [sun.com] からたどれた。参考文献リスト:

Sun Studio には objdump, objcopy がないが似たようなツールでシンボル情報など確認。

$ make
cc -#c exam_C1.c
ld -o exam_C1 -M map.oskernel -e main exam_C1.o -z verbose
$ er_src -func -disasm main exam_C1
$ nm exam_C1
$ ndisasm -b 32 exam_C1
$ dumpstab exam_C1
$ strip exam_C1

2009-12-27

OS - Chap8: Paging

作りながら学ぶOSカーネル』[amazon.co.jp] 8章「ページング」。ページディレクトリとページテーブルを使って論理アドレスから物理アドレスを引く。ローダがないから、ユーザプロセス毎にアセンブル時に論理アドレスを指定する必要がある。通常のOSはよくできてますな。今日は『Linkers & Loaders』[amazon.co.jp]を引っ張り出してくる。

$ make
nasm -f bin -o kernel.img bootA20.asm
$ make
nasm -f bin -o boot.bin boot_paging.asm
nasm -f bin -o setup.bin setup.asm
nasm -f bin -o kernel.bin kernel_paging.asm
nasm -f bin -o user_program1.bin user_program1.asm
nasm -f bin -o user_program2.bin user_program2.asm
nasm -f bin -o user_program3.bin user_program3.asm
nasm -f bin -o user_program4.bin user_program4.asm
nasm -f bin -o user_program5.bin user_program5.asm
cat boot.bin setup.bin kernel.bin \
user_program1.bin user_program2.bin user_program3.bin \
user_program4.bin user_program5.bin > kernel.img

2009-12-26

Introduction to Cloud Business

クラウドの技術』[amazon.co.jp]に続いて、『「クラウド・ビジネス」入門』[amazon.co.jp]を読んでみる。こちらはとてもビジネスよりで、タイトル通りの入門者向け。

OS - Chap7: Task Switching for User Mode Processes

作りながら学ぶOSカーネル』[amazon.co.jp] の7章、「ユーザモードのタスクスイッチング」。ざっくりすぎる理解をすると、関数呼び出しのようなプロシージャー(レジスタ待避など)がタスク間でタイマー割り込みをトリガーに行われる感じ。そして、カーネルモードとユーザモードで保護機能を効かせる。しかし、x86 アセンブラはやっぱり面倒。机に『Interface 2006年2月号』[cqpub.co.jp]が転がっていたので、復習。積読4年越しに使われた(汗)。

$ make
nasm -f bin -o boot.bin boot.asm
nasm -f bin -o kernel.bin kernel.asm -l kernel.lst
cat boot.bin kernel.bin > kernel.img
$ make kernel_5_User_Tasks.img
nasm -f bin -o boot_5_User_Tasks.bin boot_5_User_Tasks.asm
nasm -f bin -o kernel_5_User_Tasks.bin kernel_5_User_Tasks.asm
cat boot_5_User_Tasks.bin kernel_5_User_Tasks.bin \
> kernel_5_User_Tasks.img

2009-12-25

OS - Chap5, 6: Task Switching, Protections

作りながら学ぶOSカーネル』5章、6章。だんだん付いていくのが難しくなってきたぞ…。『はじめて読む486』を併読して復習した方がよさそう。

$ make
nasm -f bin -o boot.bin boot.asm
nasm -f bin -o kernel.bin kernel.asm -l kernel.lst
cat boot.bin kernel.bin > kernel.img
$ make kernel_task_call.img
nasm -f bin -o kernel_task_call.bin kernel_task_call.asm
cat boot.bin kernel_task_call.bin > kernel_task_call.img

2009-12-24

OS - Chap4: Interupts and Exceptions

作りながら学ぶOSカーネル』4章「割り込みと例外」をやってみる。x86 はセグメントとかディスクリプターとか面倒くさいなぁ。必ずしも美しいものが市場を支配するわけではない。 美しい ISA といえば DEC Alpha。先日古本屋で『超エクセレントカンパニーDEC』を発見したので読んでみた。1980年代前半のコンピュータ業界は第5世代コンピュータとか夢があったんだなぁ。

$ make
nasm -f bin -o boot.bin boot.asm
nasm -f bin -o kernel.bin kernel.asm -l kernel.lst
cat boot.bin kernel.bin > kernel.img
$ make kernel2.img
nasm -f bin -o boot2.bin boot2.asm
nasm -f bin -o kernel2.bin kernel2.asm
cat boot2.bin kernel2.bin > kernel2.img
$ make kernel3.img
nasm -f bin -o kernel3.bin kernel3.asm
cat boot2.bin kernel3.bin > kernel3.img
$ make kernel4.img
nasm -f bin -o boot3.bin boot3.asm
nasm -f bin -o kernel4.bin kernel4.asm
cat boot3.bin kernel4.bin  > kernel4.img

2009-12-23

OS - Chap3: Potected Mode

作りながら学ぶOSカーネル』3章をやってみる。たまに何の解説もなく略語が出てくるので、『はじめて読む486』を併読すると便利。

$ make
nasm -f bin -o boot.bin boot.asm
nasm -f bin -o kernel.bin kernel.asm -l kernel.lst
cat boot.bin kernel.bin > kernel.img
$ make kernel2.img
nasm -f bin -o boot2.bin boot2.asm
nasm -f bin -o kernel2.bin kernel2.asm
cat boot2.bin kernel2.bin > kernel2.img

2009-12-22

OS - Chap2: Boot Loader

作りながら学ぶOSカーネル』の2章。始めてみると x86 のレジスタの使い方を忘れていたので、昔々お世話になったアセンブラ入門 [biglobe.ne.jp] で復習。また、作りながら学ぶOSカーネル 保護モードプログラミングの基本と実践|サポート|秀和システム [shuwasystem.co.jp] でサンプルコードをダウンロードできることを発見。自分で入力した方が手が覚えて勉強になるのだろうけど…。

$ make
nasm -f bin -o boot.bin boot.asm
nasm -f bin -o kernel.bin kernel.asm
cat boot.bin kernel.bin > kernel.img
$ vi bochsrc.bxrc
megs: 32
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/bochs/VGABIOS-lgpl-latest
floppya: 1_44=kernel.img, status=inserted
boot: a
log: bochsout.txt
$ bochs -q -f bochsrc.bxrc

2009-12-21

Bochs and NASM for OpenSolaris

作りながら学ぶOSカーネル』を OpenSolaris でやるための環境構築。環境構築しただけで疲れて満足するといういつもの罠。と思ったが、OpenSolaris の pending repository に Bochs も NASM もあったので、pkg install するだけだった。

$ uname -a
SunOS ryo4217 5.11 snv_111b i86pc i386 i86pc Solaris

bochs

$ pfexec pkg install bochs
$ bochs --help 2>&1 | head -3
========================================================================
Bochs x86 Emulator 2.3.6
Build from CVS snapshot, on December 24, 2007
========================================================================

NASM

$ pfexec pkg install nasm
$ nasm -v
NASM version 0.98.39 compiled on Nov 24 2008
$ make
nasm -f bin -o boot.bin boot.s
$ vi bochsrc.bxrc
megs: 32
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/bochs/VGABIOS-lgpl-latest
floppya: 1_44=boot.bin, status=inserted
boot: a
log: bochsout.txt
$ bochs -q -f bochsrc.bxrc
本日のツッコミ(全2件) [ツッコミを入れる]

なななべ [bochs!!なつかしいなぁ。速度はどんな感じですか?]

okazaki [お。ど〜も。お久しぶり。 動かしてるのが今のところ軽いプログラムだからストレス無く使えてます。マシンは7年前のPe..]