ターミナルについて
ターミナルとはコマンド入力に使用するアプリケーション。ターミナルを開くと「Last Login:」という行が表示される。ここには直近のログイン時刻と端末名が続く。初めてのログインであれば「on console」となる。
2行目はプロントが「ホスト名:~ ユーザー名$」という書式で表示される。プロンプトとは”入力を促すもの”という意味で、プロンプトに続いてカーソルが表示される。
ターミナルとシェル
ターミナルで動いているのはシェルと呼ばれるソフトウェア。シェルはコマンドを受け取りOSの機能を呼び出し、実行結果をターミナルに返す。シェル用のスクリプトを「シェルスクリプト」という。
シェルの役割は「カーネル」にコマンド入力を伝えること。「カーネル」とはOSの核となる部分であり、ハードウェアへのアクセスやプロセス管理(メモリ配分やCPU配分など)を行う。MacOSのカーネルは「Mach」(マーク)という。
OSの一般的な仕組み
OSの構成
カーネル
カーネルはソフトウェアとハードウェアの橋渡しをする。コンピュータには様々なハードウェアが搭載されており、それらのリソースをカーネルが一括管理している。ソフトウェアがリソース(CPUやメモリなど)を要求すると、カーネルがリソース側に指令を送りリソースから返ってきた情報をソフトウェアに渡す。
カーネルの基本的な機能
- プロセス管理
- メモリ管理
- ファイル管理
- デバイス管理
- I/O管理
シェル
OSに搭載されたOSを操作するためのソフトウェア。シェルの働きでユーザとシステム(カーネル)が対話的やりとりをして操作を行うことができる。また、コマンドなどの他のプログラムを実行することができる。
ブートローダー
ブート(起動)に関わる機能。コンピュータの起動直後にストレージ(外部記憶装置)からOSを読み出して起動する。起動のプロセスは2段階に分かれている。
デバイスドライバ
コンピュータに接続されたハードウェアをOSが制御するために用意されたソフトウェア。ハードウェアとOSの橋渡し役。
GUI
グラフィックユーザーインターフェイス。グラフィカルな操作画面で直感的な操作が行えるユーザーインターフェイス。
デーモン
メインメモリ上に常駐して特定の機能を提供するプログラム。バックグラウンドプロセスの一種で利用者の操作とは関係なく自律的に処理を実行する。ブート時に一緒に起動され、実行状態となる。
デーモンの種類にはシステムの処理を担うもの(systemdやsyslogdなど)やハードウェア制御、通信ネットワークを通じて届く要求を処理するもの(inetdやtcpd、httpd、smtpd、imapd、sshdなど)や指定された時間にプログラムを起動するcrondなどがある。
プロセス管理
OS上で実行されるプログラムをプロセスをいう。プロセスはカーネルによってPID(プロセスID)とういう番号が与えられる。生成されたプロセスはまず「実行状態」になるが、一度に実行できるプロセスは一つしかないので、スケジューリングとうカーネルの機能で決められた優先順位で実行される。実行が完了するか、ユーザーが終了を実行するとプロセスはなくなる。
プロセスが実行時にリソース(CPUやメモリなど)を必要とした場合、その準備ができるまで「ブロック状態」になる。
プロセスの種類
OSの機能を実現するために実行されるプロセスをシステムプロセスという。initデーモン(プロセスの起動を管理する)やloginデーモン(ログイン、ログアウトの監視)がある。
ユーザーによって実行されたプロセスのことをユーザプロセスという。ユーザーが実行したアプリケーションや入力したコマンドがこれにあたる。
あるプロセスから生成されたプロセスを子プロセスと呼ぶ。元のプロセスを親プロセスと呼ぶ。プロセスは木構造になっている。
マルチタスクとマルチスレッド
マルチタスク
マルチタスクとは同時に複数のプロセス(タスク)を起動させて動作させること。CPUは一度に一つの仕事しかできないが、CPUの利用権を公平に複数のプロセスに割り振ることで、同時に複数のプロセスを行なっているように見える。
OSは一定時間経過したら、CPUの利用権を別のプロセスへと渡す。CPUを独占していたプロセスは一度必要な情報を保存しておいてCPUの利用権を返却する。一定時間が経過し、またCPUの利用権を得た時に復元してプログラムの続きを実行する。人に意識させることなくプロセスを瞬時に切り替えることを並行処理という。
このように、次々とCPUの利用権をプロセスに素早く移していくことで、まるで同時に複数のプロセスを実行しているように見える。
マルチスレッド
スレッドとはプロセスよりも小さな実行単位で、複数のスレッドは一つのプロセスによって所有される。スレッドはプロセス内の同じメモリを共有し、同じコア(プロセス)内のメモリは参照できるが、別のプロセスのメモリは参照できない。マルチスレッドとは一つのプロセスを細分化し、複数スレッドを並行処理し、あたかも同時に処理が実行されてるように見える状態のこと。
マルチタスク(マルチプロセス)とマルチスレッドの違いは、プロセス間では基本的にメモリは共有されないが、スレッド間では同じメモリ(データ)に簡単にアクセスできること。
ターミナルの基本的なコマンド
[ ]は省略可能な変数
grep [オプション] [検索パターン] [ファイル・・・]
文字列の検索。ファイルのうち、検索パターンを含む行を表示。
awk [オプション] [プログラム] [ファイル・・・]
パターン処理によるテキスト操作。ファイルを読み込み、プログラムにしたがって操作した結果を標準出力に出力する。
sed [オプション] [コマンド] [ファイル・・・]
コマンドによるテキスト編集。ファイルを読み込み、コマンドに従って処理した結果を標準出力に出力する。
lsof [オプション] [パス名]
オープンしているファイルを一覧表示する。
curl [オプション] URL・・・
ファイルのダウンロード。URLで指定したファイルをダウンロードする。
wget [オプション] URL・・・
ノンインタラクティブなダウンローダー。指定したURLのファイルをダウンロードする。
tail [オプション] [ファイル・・・]
末尾部分のみ表示。ファイルの末尾部分のみ表示する。
head [オプション] [ファイル・・・]
先頭部分の表示。ファイルの先頭部分を表示する。
less [オプション] [ファイル・・・]
一画面ごとの表示。ファイルを一画面ずつ表示する。
find [オプション] 検索パス [式・・・]
ファイルの検索。検索パス下にあるファイルを式に従って探す。
ssh [オプション][ユーザー名@] 接続先 [コマンド]
接続先で指定したコンピュータにログインする。
kill [オプション] PID
プロセスの終了/再起動。PIDで指定したプロセスに終了シグナルを送る。
参考にしたサイトや書籍
- モーット知りたい|OSの概要
- ネットde カガク|オペレーティングシステムとは?簡単に
- フラミナル|マルチスレッドと並行処理をわかりやすく説明します
- 『macOS コマンド入門』西村めぐみ 著
- 『UNIX基本の知識』後藤大地/佐々木宣文 著