僕とコードとブルーハワイ

omega (@equal_001) の日記

Linux/UNIXの勉強メモ1 カーネル起動するまで追っかける、バスとかPCIまわり

電源入れる→MBRが"/boot"にある「initrd-2.6.18-***.***.img」と「vmlinuz-2.6.18-***.***」を読み込む→カーネルが使えるようにする色々な準備をしてくれる

 

カーネル起動するまで追っかける

/var/dmesg で起動するときバーっと出てくる起動時メッセージを見れる。

一番最初からわかる範囲で書いてみると(大雑把):

 

・/boot のLinux version 2.6.18-398.e15.img(数字はCentOS5.11を意味しているらしい)を読み込む

・「BIOS-provided physical RAM map: ~なんか色々書いてる~」

BIOSが物理メモリのどの住所がudableまたはreservedなのか表示する

・「HIGHMEM 0MB, LOWMEM 503MG available」

カーネルが物理メモリにストレートマップできるのはこの場合は503MGで、それを超えるとHIGHMEMにマップするらしい。でも0MGしかavailableなので、実質unavailableだ。

・「DMI 2.3 present, Dell Inc. **** 」とか「Using APIC(割り込みコントローラの種類)

」とか調べ始めて、

「Memory: ********k/********k available (****k Kernek code, *****k reserved. ***k data, ***k init, 0k highmem)」

とか、メモリの現状について書いてくれる。

とりあえず自分の置かれている環境について調べて表示しまくる。

・「CPU L1 I cache: 32k, L1 D cache: .....」

今はL1,L2,L3まであるのが主流らしい。(→バスとかPCIまわりへ)

・「ACPI:bus type pci registered, PCI: Using ********」

ここからACPIとかPCIのことを羅列し始める。詳しいことはよくわからない。

 

これが終わったら普通はrun level 3 とかになってusernameとpassword聞かれてloginする。

 

 

バスとかPCIまわり(マザーボードみると絶対あるやつ)

・メモリとCPUの間にバスというモノがある。DDRとか規格が色々ある。

本数で32bitとか64bitとか決まる。一本につき1bitだから64bitは64本以上あるらしい。

CPU 2GHzでメモリが1MHzだとメモリが遅くてCPUの待ち時間がもったいないから、CPUにon boardしてるL1 cacheに”よく使う処理”を記録させておくことができる。

CPUの性能 = bit数×クロック周波数(一秒間に計算出来るビット数)

8bit = 1byte

1MHz = 100,000Hz

64bitで1MHzなら、64*10の6乗回を1秒間で振動してることになる。めちゃくちゃ早い。早い分だけ一度に沢山のbitを送れるから、コンピュータの性能をみる時はこの早さをチェックすると良い。

PCI(Peripheral Component Interconnect)という、コンピュータと周辺機器との間の通信をやってくれるバスがある。

PCI以下には入出力装置がくっついてる。USBだったりHDD ControllerやらSound,VideoControllerとかいっぱいある。

例)

HDDから動画を再生するときの順路(大雑把)

HDD Controller→PCI→CPU(ここをすっ飛ばすこともできる:DMA)→メモリ→CPU→PCI→Sound/Video Controller→スピーカーとモニタ

動画再生という処理は、この動作を何億回も超高速でやってるってことだそうだ。

バスの長さや本数、クロック周波数の違いでこの動画再生のスピードが変わってくる。

今ならザックリとだが理由がわかる。

 

次はinitについての勉強。

理由:プロセスの概念がわからないから。