LINUX, OSの知見
OSとはコンピュータのハードウェアリソースを管理して、プログラムが動作する環境を提供するソフトウェア(カーネル)と定義
カーネルは一番ハードウェアに近いソフトウェア
ユーザー⇆シェル⇄カーネル の関係
コンピュータアーキテクチャとcpuファミリは同義
- x86アーキテクチャ:x64, x86_64はIntel64bit、x86はIntel32bit
- ARMアーキテクチャ
カーネルの主なコンポーネントは以下の5つ
- プロセス管理
- メモリ管理
- ネットワーク
- ファイルシステム
- デバイスドライバ
tty:制御ターミナル
セッションにはセッションID(SID)
プロセスグループにはプロセスグループID(PGID)
プロセスにはプロセスID(PID)
スレッド、タスク
セッションには1つ以上のプロセスグループを持つ
プロセスの状態は以下の5つのうちのいずれかに該当する。
- 作成
- 実行待機
- 待ち状態
- 実行中
- 終了
仮想メモリ:実際にシステムに搭載されている物理メモリ以上のメモリを持っているように見せる機能
物理メモリと仮想メモリは共にページと呼ばれる固定長のチャンク(塊)に分割されている。1ページは4KB(ただし、環境によって異なる?)
ソケット:通信を抽象化するためのもの
KernelNewbies : カーネル初心者向けのサイト。カーネルのchangelogの情報やパッチ投稿、カーネルハッキングについてなど、より実践的な案内がある。
CLIの観点からLinuxと対話する方法は以下の2つ
- 手動でターミナルから操作
- シェルスクリプト実行
XKCDの自動化
引用元:https://xkcd.com/1319/
ターミナル内でシェルが起動する
infocmpコマンドでターミナルでサポートされている出力を表示することができる
現在の環境でどのシェルを使用しているかを確認するコマンドは以下の3つ
- file -h /bin/sh
- echo $0
- echo $SHELL
ビルトイン関数、外部関数
which {ビルトイン関数}
で何も返ってこない
which {外部関数(外部プログラム)}
でその実行ファイルの場所がわかる
type {コマンド}
でそのコマンドがビルトインか外部かわかる
モノリシックカーネルの教育用OS:xv6
マルチスレッドプログラミングでは複数のスレッドが同時にデータにアクセスしないようでロックをかける必要がある。偶発的なバグに遭遇し、デバッグが困難である。