OSは、システムコールという共通インターフェースを備えており、ユーザランドの各アプリケーションは システムコールを介してカーネルの機能 (プロセス生成・メモリ確保・ネットワーク通信・ファイル操作な ど)を実施する ◦ アプリケーションは、プロセス管理やタスクスケジュール、ファイルシステム、各デバイスの詳細 を気にせずに利用することが出来る OS (Linux Kernel) Process A libc (standard library) System Call Hardware User land (ユーザーランド) Kernel
Intel x86 Assembly Language Cheat Sheet ▪ x64(x86-64, 64bit)でなくIntel x86(32bit)時のチートシートだが基本は同じ xor A, B AとBをxorする。Aに結果が入る mov A, B BをAに移す add/sub A, B Aの値にBを足す/Aの値からBを引く push/pop A Aの値をスタック(メモリ上)にpushする/スタックから値をpopする call [memory address] 別関数にジャンプする + 戻りアドレスをスタックにpushする ※関数に入るときに使う leave スタックをrbpと同じアドレスに戻す + pop rbpする (mov esp, ebp ; pop ebp) ret スタックの一番上に詰まれている値(RSP)にジャンプする + スタックの一番上の値をpopする ※元の関数に戻るときに使う syscall システムコールを呼び出す
CPUは仮想メモリという仕組みを持っている。 ◦ 各プロセスは実際の物理アドレスを扱わず、仮想メモリのみ扱う ▪ 複数のプロセスが同じメモリアドレスを使うことが出来る ◦ Kernalはページテーブルを管理しており、仮想アドレスと物理アドレスの対応付けを行っている ◦ CPUは仮想メモリと物理メモリを変換する仕組みを持っている (MMU) Linux Kernel Virtual Memory Physical Memory 0-100 700-800 100-200 200-300 200-300 400-500 Page table Process A Process B Process C Manage