ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2012/03/25

シグナルと割り込み

Linuxカーネルは、予期せぬ問題が起こったときに、プロセスに伝える機能を持っています

これを「シグナル」と呼びます

例えば、メモリーに不正なアクセスがあった、他のプロセスによって処理を中断された、といった場合です。

 

シグナルはプログラムの実行状況に関係なく発生し、プロセスに伝えられます

プロセスはシグナルを受け取ったとき、何か処理を実行したり無視したりします

シグナルには種類があり、中にプロセスの中断や強制終了など、処理内容が決められていて無視できないシグナルもあります

 

急な問題に対処するために、プログラムの実行に関係なく、処理を実行できる機構もあります

これを「割り込み」と呼びます

IMG_3498

プロセスのメモリー管理

カーネルはプロセス生成時にメモリーを割り当てるわけですが、カーネルや他のプロセスが使用するメモリーを意識しなくても良いように連続した領域を確保します。

 

メモリーには”番地(アドレス)”が割り振られて、その番地で管理しています

つまり、100番地から300番地まで、プロセスAが使えるところ、といった形です

使える番地の幅は、CPUやOSが32ビットか64ビットかで異なります

 

CPUが32ビット対応の場合、プロセスに割り当てるメモリーは4GBになります

最近のPCには、4GBや16GBといった大きな容量のメモリーが搭載されていますが、複数のプロセスを同時実行するので1つのプロセスに4GBのメモリーを割り当てません。

そこでカーネルは4GB分の仮番地をプロセスに割り当て、メモリーが必要になったときに実際のメモリーの番地と仮番地を対応つけます(「デマンドページング」と呼びます)

IMG_3497

プロセスとスレッドの違い

実行しているアプリケーションはLinuxカーネルの中では「プロセス」または「スレッド」という単位で管理されます。

アプリケーションを起動すると、カーネルはプロセスを生成します。

プロセスには、番号が振られ、同じアプリケーションの処理でも起動するたびに別の番号になります(プロセスID)

 

カーネルはプロセスごとに、必要なメモリーを割り当てます

そこにアプリケーションの実態であるプログラムを読み込みます

そのメモリー上のプログラムをCPUで実行し、アプリケーションが動作しています

 

Linuxでは、プロセスとスレッドの違いはメモリーを共有しているかどうかだけです。

プロセスは一つのメモリー空間を使用し、スレッドは複数のスレッドで一つのメモリー空間を使用しています

基本的には同じように扱われます

2012/03/23

Linuxの起動の仕組み・起動順番プロセス

普段Windowsメインですが、Linuxの知識も多少ないしあると時々Windowsのブラックボックスが想像できたりします。
なので機会があればLinuxの勉強や使用もしたいなとは思っていますが・・・やはり世の中のWindowsシェアはすごいものです

LinuxのOS起動順序と起動の仕組み

ブートローダーの読み込みからカーネルの起動までの流れ

  1. BIOSがブートローダーの読み込みを実行
    (BIOSが複数ある広大なディスクのどこを読むかはディスクのアクティブとMBR等が関係しています)
  2. ブートローダーが起動
  3. ブートローダーがvmlinuzの読み込みを実行
vmlinuz というのが、Linuxのカーネルそのものになります
IMG_3138
次に、