Skip to content
Naoya Tech
Go back

How User Mode and Kernel Mode Work: A First Look at System Calls

21:35 OS & Low-level

Overview

A single line of code that prints a log message never reaches the display directly: the CPU itself prevents it. This video explains the boundary between user mode and kernel mode, what enforces it in hardware, and how system calls let programs cross it.

Key Points

Chapters

概要

ログを出力する1行のコードも、ディスプレイに直接は届きません。CPU自身がそれを許さないからです。この動画では、ユーザーモードとカーネルモードの境界線と、それをハードウェアで守る仕組み、そしてプログラムがその境界を越えるためのシステムコールを解説します。

ポイント

  • モードが分かれていなければ、ポインターが1つずれるだけで他のアプリやOS本体のメモリを書き換えられてしまいます。ユーザーモードのアプリが落ちてもOSはそのプロセスだけを終了させれば済みますが、カーネルモードで問題が起きるとブルースクリーンやカーネルパニックでシステム全体が止まります。
  • 境界線の正体はCPUの中のたった1ビット、モードビットです。特権命令はこのビットが1のときだけ回路を通ります。ビットを1にできるのは割り込みだけで、飛び先のハンドラーはOSが起動時に配置して守っています。
  • システムコールは、プログラムが自分自身にかける割り込みです。open は標準ライブラリーが用意した包み紙で、システムコール番号(open は2)を rax レジスターに入れてから int 命令を実行します。カーネルはカーネルスタックに切り替えて処理を行い、元に戻ります。現在のCPUには専用の syscall と sysret 命令があります。
  • ファイルを読む1行のコードの裏では、openat、fstat、read、close の4回のシステムコールが呼ばれます。カーネルが返すファイルディスクリプタは、プロセスごとの表を指すただの整数で、ソケットやパイプも同じ仕組みで扱えます。
  • 実務につながる視点として、man 2 のページがシステムコールを説明していること、モードスイッチはコンテキストスイッチより軽いものの関数呼び出しよりずっと重く、ループの中でシステムコールを呼ぶと遅くなること、タイマー割り込みがプリエンプティブなスケジューリングを支えていることを紹介します。さらに、ドライバーやゲームのアンチチートはカーネルモードで動くため、CrowdStrikeの障害のように壊れた更新が何百万台もの端末を止めることがあります。

チャプター

Watch on YouTube

Share this post on:

Previous Video
Making an AI Video with TopView and Seedance 2.5
Next Video
How Processes and Threads Work