2009-09-01から1ヶ月間の記事一覧
MINIX2のsmp実装を見ていく上で出てくる用語の一つがfps。 仕様書だとfpsと略してないですが、smp実装のソースコードで使っているのでそれに合わせます。fpsとはMP Floating Pointer Structureの略で、以下の2つの情報を保持しているテーブル。 1.MP Configu…
こちらも基本的に詳細はコメントに書かれているのでわかりやすい! !*===========================================================================* !* trampoline_pm * !*===========================================================================*…
ap_main()はmp.cにいて、アセンブラで書かれた処理(_trampoline_pm)から呼ばれる。 void ap_main(void) { /* This is the main routine for AP's. This is the entry point before the CPU has been started and jumped to protected mode */ /* Tell BSP …
調べているのはここにあるソース。http://gsd.unex.es/projects/minixsmp/ソースにコメントがちゃんと書いてあるのでこれを読めば良いのでうれしい。 trampolineは4段階のステップで行われていますよ。 !*=================================================…
調べているのはここにあるソース。 http://gsd.unex.es/projects/minixsmp/こいつは直接使うというか、ラップ関数の中から使われる。 void phys_copy_dword (unsigned long source, unsigned long destination); 例えばこんな感じで・・ void LOCAL_APIC_WRI…
IPIの初期化が終わったらsend_startup_ipi()をコール。 引数のtrampoline_addrは初期化の時と同じくトランポリンのアドレス、2個目の引数はどのcpuをスタートさせるかを表す。 void send_startup_ipi(u32_t trampoline_addr, int which_cpu) { /* Send START…
fn+f1:サスペンドかハイバネート fn+f2:? fn+f3:? fn+f4:モニタの輝度− fn+f5:モニタの輝度+ fn+f6:ミュートのON/OFF切り替え fn+f7:音量− fn+f8:音量+ fn+f9:? fn+f10:? fn+f11:? fn+f12:?
調べているのはここにあるソース。 http://gsd.unex.es/projects/minixsmp/そんでは、関数を見ていくと、引数の1番目(trampoline_addr)はfind_trampoline()で見つけたトランポリンコードのアドレス。 まず分かるのはcmosのデータを読んだり、書いたりして…
まだ、enable_cpu()で必要な処理を実装しているだけでBSPしか見えてないです。 qemuの画面が小さいからアレですが、画面の上のほうにkprintf()でデバッグ用のメッセージ出力させてます。 ハックに使ってるminixのバージョンは3.1.0ですが、smp対応ということ…
調べているのはここにあるソース。 http://gsd.unex.es/projects/minixsmp/ u32_t find_trampoline(void) { /* Find a memory zone suitable for allocating trampoline code. It will be a 0's zone, suposing this is free. */ u32_t addr8; u32_t addr; u…
void process_mp_configuration(void) { /* Scan MP table and find some information about MP configuration */ u32_t next; int cpu_count, bus_count, apic_count, ioint_count, lint_count; int i=mph.mpch_entry_count; u8_t this_entry; struct io_ap…
int load_mph(void) { /* Find and load a valid MP config header struct. Return noncero on success */ unsigned addr; phys_copy ( fps.fp_mp_table , vir2phys(&mph) , sizeof(mph) ); if (test_mptable_checksum()) return 1; ADDS_MP_STATUS("MP conf…
調べているのはここにあるソース。 http://gsd.unex.es/projects/minixsmp/ void mp_start() { /* Load MP configuraton and wake up each CPU in the system */ u32_t trampoline_addr; int cpu; /* Start messaging to console */ MP_STATUS[0]=0; ADDS_MP…
minixsmpの実装勉強はmp.cに入っていく。まず最初は、enable_cpu()。 PUBLIC void enable_cpu(int cpu, int echo) { /* Mark a CPU as usable, enables it, and open interrupts. If echo is nonzero, print a message of successfully enabling */ if (cpu_…
miniz2.0.0でsmpを実装した人がいるので、その人の資料を参考に読み進める。 #minix3.1.0に適用できそうなのか知りたいのでこちらの実装も合わせて見ていく。 もともとminixはmp対応してないので、APICとかの仕様も調べないといけない。minix2.0.0との変更点…
先週届いたJames Whittakerの本を読みつつtwitterにつぶやいているので、今まで書いた分のまとめを貼っ付けておく。 # Exploratory Software Testing 2章もうちょいで読み終わり。9:48 PM Sep 17th from web # Manual TestingとScripted Manual Testingの違…
久々にoopsが出たので貼り付け。 多分下のコマンド実行中でのoops発生と思う。 sudo dd if=/dev/zero of=/dev/sdf bs=1M [287041.483833] INFO: task hald-addon-stor:19153 blocked for more than 120 seconds. [287041.483841] "echo 0 > /proc/sys/kernel…