2008-10-18から1日間の記事一覧

ltrをやった瞬間にqemuがすっ飛んだ件について

shiitakeにて、空のTSSを作ってそれを指すTSSディスクリプタを作り、ltrで読み込んであげたら、読み込んだ瞬間に qemu: fatal: triple fault ですっとんだ。ltrって、最初のタスクスイッチ時にカレントTSSが無いとコンテキストの保存が出来ないからカレントT…

Omicron コンテキストスイッチ

x86

http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=%A5%B3%A5%F3%A5%C6%A5%AD... ここにTSSが何故使えないのかについての話が載っている。 が、イマイチピンとこない。 スレッドサポートがなくて遅いって事? 他の理由は何をいってるのかよく分からない。 何が…

Omicron ContOS

x86

http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=ContOS grubを使ったOSの開発例。

GRUB解析 続き

やっぱりどう調べてもTSSは設定されてない。 docs/kernel.cのmain()に unsigned tr; asm volatile ("str %0" : "=m"(tr)); printf("tr: %x\n", tr); と書いてTRレジスタをダンプして見たところ、結果は tr: 0 だった。どうも、プロテクトモードを走らせるだ…

グローバルディスクリプタテーブル

x86

グローバルディスクリプタテーブルは、以下の用途に使われている: 全プログラム共通のセグメントの定義(グローバルセグメントディスクリ プタ) コールゲートの定義(ゲートディスクリプタ) TSSディスクリプタの定義 タスクゲートディスクリプタの定義 ロ…

システムコールの実装とsysenter命令

x86

システムコールは一般的には割り込みによって実現する。 x86の場合は、これに加えコールゲートやsysenter命令を使うなどの方法も存在する。 Solarisや古いFreeBSDではコールゲートを使っているようである。 sysenter命令についてはここのサイトが非常に参考…

疑問

x86

タスクゲートを用いた割り込みハンドラで、タスクスイッチと同時にcpu側で割り込み禁止を設定する方法があるか? →出来そう。 TSSにEFLAGS変数がある。 ここで予めフラグを外しとけば良さそう。

信州大学

x86

信州大学の授業の資料が参考になりそう。 http://kaiya.cs.shinshu-u.ac.jp/2005/os/ レベルを抑えて学部生にもわかるようにしつつ、一応x86固有な話とかしっかりやってそげ。 こういう授業ばかりだったら大学も楽しいんだけどねぇ。

リングプロテクションとコールゲートとシステムコール

OS

ウィキペディアの http://ja.wikipedia.org/wiki/リングプロテクション を読んでいて思ったんだけれど、システムプロテクションの為にリングプロテクションにおいて他の特権レベルへの切り替えに発案されたコールゲートって考え方がシステムコールというOS構…

OS作りに関わる諸問題への回答

OS

主にユーザランド周りの話が書いてある: http://nowsmartsoft.or.tv/nws/Japanese/HowToCreateOS.htm

BIOSへの割り込み

x86

BIOSの機能を使うには、通常INT15hを呼び出したりする訳だが、この場合、仮想86モードでの割り込みディスクリプタテーブルとか、リアルモードで0番地に存在するテーブルとかってどうなってんのかな? 15hのエントリだけ無視される? それとも適切な飛び先を…

コーリングコンベンション

x86

http://en.wikipedia.org/wiki/X86_calling_conventions ここにきちんとまとめてありました。 アーギュメントレジスタはないんですねぇ。

コンテキスト切り替えの実装方法検討

現状では特にTSSが機能的に不足する事は考えにくい為、これをうまく利用したコンテキスト切り替えを考える。 利用方法としては、単にコンテキスト切り替えだけでなく、タスクゲートを利用した割り込みハンドラでの自動的なコンテキスト切り替えが考えられる。…

割り込み機構

割り込みはcliで禁止され、stiで許可される。 割り込みに対する処理はIDTで定義される。 構造はグローバルディスクリプタテーブルに類似しており、割り込みゲート、トラップゲート、タスクゲートの三種類のゲートディスクリプタが割り込み番号順に並べられる…

TSSの構造、タスク管理機構

以下、タスク管理機構のまとめ。 一つのタスクに対し、一つのTSSとTSSディスクリプタを定義する。 TSSはメモリの任意の場所に設定され、TSSディスクリプタはディスクリプタテーブルの上に設定される。 TSSはレジスタ保存部、OS用領域、IO許可マップの三部か…

セグメントの仕組み

x86

GDTについては少し調べたけれど、実際の所セグメントの仕組みがどのように動くのか正確に理解してなかったので、もう一度確認してまとめてみた。 ■セグメント方式 x86 CPUではメモリ管理方式としてセグメント方式を使用している。 セグメント方式では、メモ…

Windows 95の仕組み

x86

http://itpro.nikkeibp.co.jp/article/COLUMN/20080929/315586/?ST=win&P=1 正直、WindowsについてはNTカーネルの基本構造についてちょっとかじった位にしか知らんかったー。 Windowsってとっても難しい事考えて作ってるよねぇ。 この場合の”難しい”と良い設…

80386以降のリアルモードでメモリ空間 4 G をフルに使う裏技

x86

http://alohakun.blog7.fc2.com/blog-entry-787.html アンリアルモード(w 何に使うのか一切不明だけどすごい(ww

ファストパスとBSD

IPパケットフォワーディングの高速化手法として、ファストパスというものがあるらしい。 どこで始まったのか知らないが、少なくともYAMAHAのルータの機能として日本語での資料が存在している: http://www.rtpro.yamaha.co.jp/RT/docs/fastpath/要するに、パ…

NetBSD-current ip_flowを通らない場合のNetBSD-currentのIPパケット受信処理

NetBSD-currentのip_flowに関して調査している。まずは、ip_flowを通らない場合のNetBSD-currentのIPパケット受信処理を調べて みた。個々のイーサネットデバイスドライバは、デバイスからパケットデータを取り出 してmbufに詰め、最後に (*ifp->if_input)(i…

coLinuxにやっぱりdebianをインストール

どうもプレインストールイメージからのアップグレードでUbuntuをいじくるのが気に食わなかったので、Debianのクリーンインストールを試すことにした: http://www.aglabo.com/agl/proevo/Linux/coLinux/debian/etch-01_installer.html CDブートは出来ないが…