コンピュータの仕組み(その2)・ソフトウェアの概要

ハードウェア(CPUとメモリの概要)つづきです

ハードウェアは、物体で目で見えます
ソフトウェアは、情報で目で見えません
ソフトウェアがかわれば、ハードウェアの動作はガラリとかわります

ソフトウェアとは

ソフトウェア(英: software)は、コンピューター分野でハードウェア(物理的な機械)と対比される用語で、何らかの処理を行うコンピュータ・プログラムや、更には関連する文書などを指す。ソフトウェアは、一般的にはワープロソフトなど特定の作業や業務を目的としたアプリケーションソフトウェア(応用ソフトウェア、アプリ)と、ハードウェアの管理や基本的な処理をアプリケーションソフトウェアやユーザーに提供するオペレーティングシステム (OS) などのシステムソフトウェアに分類される。

wikipedia

ソフトウェアとは、ハードウェアの状態を変化させるための処理手順を指示する「一連の命令の集まり」です
ソフトウェアというの概念が生まれる前のコンピュータは、プログラムを変更する場合はハードウェア自体を作り直す必要がありました

ソフトウェアを大別すると「システムソフトウェア」と「アプリケーションソフトウェア」にわかれます

ソフトウェアが処理される流れ

ソフトウェアは、一般的に補助記憶装置(ハードディスクなどのストレージ)の中に機械語(0と1の2進数)として記録されます

ソフトウェアを利用するときに、機械語が「メインメモリ」に読み込まれ、「CPU」がデータを制御して計算や移動処理が実行されます

アプリケーションソフトウェア

アプリケーションソフトウェアとは

OS(オペレーティングシステム)上で動作する、特定の用途や目的のために作られたソフトウェアです(アプリケーションやアプリと呼ばれます)
ワープロソフト・メールソフト・ウェブブラウザなど、さまざまなアプリケーションがあります
*これからアプリケーションと呼びます

OS(オペレーティングシステム)とは、コンピュータ上で基本的な機能を担当するソフトウェアです

OS(オペレーティングシステム)と、アプリケーションの関係

ソフトウェアの階層図

OSはアプリケーションとハードウェアの間の橋渡しをします
アプリケーションは、OSのおかげで「ハードウェア製造元ごとの個別対応」を気にする必要がありません
*同じアプリケーションでもOSが異なると、アプリケーションは動作しません

OS以外のシステムソフトウェア

システムソフトウェアとは、コンピュータのハードウェアの管理や制御などをおこなうソフトウェアです

ファームウェア
ハードウェアの内部にあり、そのハードウェア自身を動かすためのソフトウェア
パソコンのBIOSはファームウェアの一種です
デバイスドライバ
OSがハードウェアを動かすために必要なソフトウェア
ほとんどのハードウェアは、OS内部にドライバが含まれていますが、それ以外のハードウェアは製造元が、CD-ROMなどを製品に添付するか、インターネット上で配布しています
言語処理系(広義にはOSに含まれる)
プログラミング言語で記述されたプログラムをCPUが理解できる機械語に変換するソフトウェア
大別するとインタプリタ(プログラムを実行しながら1行ずつ変換)
とコンパイラ(全体を一度に変換)に分かれます
ミドルウェア
OSとアプリケーションの中間で、補佐する役割のソフトウェア
アプリケーション開発では、ミドルウェアのAPIを利用するメリットは大きいです
マルチプラットフォームに対応したミドルウェア(複数のOS対応しているミドルウェア)を使用すると、異なるOSでも同じように動作します

余談APIとは
アプリケーションプログラミングインターフェース(Application Programming Interface)の略で、「ハードウェア」「OS」「ミドルウェア」「Webサービス」などが、操作方法(インターフェース)を提供することです

APIは、詳しい構造や仕組は見えなくして、裏側で勝手にしてくれます
複雑の仕組みは知る必要なく、利用できます

OS(オペレーションシステム)

OS(オペレーションシステム)は、システム全体を管理します

OSの概要

オペレーティングシステムの主な目的は、ハードウェアの抽象化、リソースの管理、そしてコンピュータ利用効率の向上である

wikipedia

OSの目的は、「人間にとって使いやすくすること(仮想マシンの提供)」と「性能を最大限に発揮すること(リソース管理機能)」です

*アプリケーションとハードウェアの間に存在して、インターフェースとなるものが「OS」です

インタフェースとは、「接点」「接続口」「橋渡し」などのイメージで、「プログラム間でやり取りする規約」だったり「コネクタなどの規格」だったり「表示方法・入力方式」だったりします
リソースとは、資源のことです
この場合は「CPUの処理能力」「メモリ量」「入出力装置」などです

OSがあることで、
例えば、「ユーザー」や「アプリケーションの開発者」は、「ハードウェア製造元の違い」「同時に利用するアプリケーション」を意識する必要がありません
また、「データのある物理的な場所」は知らなくても「ファイル名」でアクセスできます

リソースを「ユーザーごとに割り当てたり」「物理的な容量を超えたメインメモリを使用したり」「複数のプロセス(実行中のプログラム)を並行したり」などができます

余談抽象化と仮想化について

仮想化は、物理的な特性を隠して、論理的な特性を提供する
「物理的に存在しないもの」を「プログラムからは存在するもの」として利用するイメージです

抽象化は、具体性を捨て、本質的な部分だけを抜き出すイメージです
(例えば、抽象化されたものがコンセントだとすると、コンセントの先の複雑な構造は知らなくても、コンセントを使えば電気が使えます)

例えば、コンピュータにOSがなくても成立しますが、「OSという階層」をはさみ「ハードウェアを抽象化」することで格段に便利で効率的な「アプリケーションの開発」や「アプリケーションの利用」ができます

代表的なOS

パソコンのOS

Windows
マイクロソフトが開発・販売するOSです
macOS
Appleが開発し、Macシリーズのコンピュータにのみ導入されているOSです
Linux
Unix系のOSで、無料で利用できます
さまざまなLinuxディストリビューションがあります
ディストリビューションとは、簡単に利用できるようにパッケージ化したもので、企業や団体から、商用または無償で配布されていますす
Chrome OS
Google社が提供しているLinuxをベースにしたOSで、Chromebookに搭載されています

スマートフォン・タブレットのOS

iOS / iPadOS
AppleのiPhoneに導入されてるOSです(iPadOSは、iPadに導入されてるOS)
Android
Google社が開発したスマートホン・タブレット向けのOSで、無料で利用できます

「UNIX」について

「UNIX」は、もっとも古いOSの一種で、初めて高水準言語で書かれました
さまざまなOSが、「UNIX」を土台にしています

「UNIX」は、AT&T社ベル研究所で開発されました(ベル研究所の起源はグラハム・ベルがボルタ賞の賞金で設立した研究所にさかのぼります)

「UNIX」 は商業的な側面が強く、ライセンス契約したOSだけが正式に「UNIX」を名乗れます(代表的なOSはmacOSです)
それ以外は、ほぼ同じ機能でも「UNIXライク」などと呼ばれています(代表的なOSはLinuxです)

Windowの前身のである「MS-DOS」というOSが「UNIX」の影響を受ています
Windowsの「コマンドプロンプト(キーボードだけで操作する画面)」は「MS-DOS」を操作するために使います

参考

組み込みオペレーティングシステム(くみこみオペレーティングシステム)は、組み込みシステムのオペレーティングシステムである。リアルタイムオペレーティングシステムでもあることが多い。
代表的なものにITRON、VxWorks、LynxOS、QNX、Enea OSEなどがある。近年はLinuxカーネルなど汎用のOSのカスタマイズ版を使うことも多い。

wikipedia

家電製品・自動車・産業機械に搭載されるマイコンを制御する(組み込みシステム)のための「OS」

カーネルとは

カーネル(英: kernel)は、階層型に設計されたオペレーティングシステム (OS) の中核となる部分で、アプリケーションとハードウェアの架け橋である。具体的には、システムのリソースや、ハードウェアとソフトウェアの連携を管理する。その他、通信制御も行う事が多い
オペレーティングシステムの基本コンポーネントとして、カーネルはメモリ、CPU、入出力を中心としたハードウェアを抽象化し、ハードウェアとソフトウェアがやり取りできるようにする。また、ユーザープログラムのための機能として、プロセスの抽象化、プロセス間通信、システムコールなどを提供する

wikipedia

カーネルは、OSの本質そのもの(中核)で、ハードウェアと直接やりとりする唯一のソフトウェアです
ハードウェアを管理し、プログラムがそれらのハードウェアを使って動作できるように呼び出します

システムコールについて

「プログラムが他のプログラムに悪影響を与えないため」「ハードウェアを守るため」に、信頼できるシステムソフトウェアだけが「カーネルモード(特権モード)」で動作することが許されます
アプリケーションは「ユーザーモード」で動作するため、ハードウェアにアクセスできません
「アプリケーションプログラム」がハードウェアとやりとりするは「システムコール」によってのみ可能です

シェルについて

「ユーザー」と「カーネル」のやりとりは「シェル」によってのみ可能です
「シェル」がプログラムを呼び出すときは、他のアプリケーションと同じく「システムコール」を使って カーネルに依頼します

「シェル」は「GUI」と「CUI」に分かれます

Macアプリの一覧画面GUIの例え画像

グラフィカルなシェル(GUI
X Window Systemはウィンドウシステムのためのソフトウェアです

ターミナルの画面CUIの画像

コマンドを入力するシェル(CUI

通常、「コマンドを入力するシェル(CUI)」のことをシェルと呼びます
「Macはターミナル」「Windowsはコマンドプロンプト」がシェルを操作するための入出力の画面だけを提供するソフトウェアです

プロセスについて

コンピュータで作業をするときは、最初に作業に必要なプログラムがメインメモリ上に読み込まれます
メインメモリ上に読みこまれているプログラムのひとつひとつが「プロセス」です

「プロセス」が発生すると、プロセスを管理する台帳(プロセス制御ブロック)に名前(プロセスID)などが記録され、終了すると消去されます

ジョブ・タスク・プロセスについて

ジョブ・タスク・プロセスについて
  • ジョブ」は人間にとって意味のある一塊の処理(仕事の単位)
    ちなみに「ジョブ」をまとめて一括処理することを、「バッチ処理」といいます
  • タスク」はコンピュータから見た仕事の単位
  • プロセス」と「タスク」はほぼ同じ、メインメモリ上にアップされてから解放されるまでが1プロセスです(実行中のプログラムです)
    「1つのプロセス(実行中のプログラム)」が複数のスレッドをもつ場合もあります(マルチスレッド

マルチタスク(マルチプログラミング・マルチプロセスなどとも呼ばれます)について
*マルチスレッドの場合は、マルチプロセスと呼ぶよりマルチタスクと呼ぶ方が適切です

マルチタスクに対応したOSでは、OSが制御して複数のジョブが並列で実行されます
ユーザーは、複数のソフトウェアを起動や終了することなく、切り替えて操作できます
実際には、入出力の待ち時間などに別のプログラムを実行しています
(入出力などの時間のかかる処理を待っている間に別の処理をして、CPUを効率的に利用します)

*ちなみに、マルチコア(物理的にCPUが複数あるコンピュータ)では、CPUの数だけ同時に実行できます

余談コンピュータの「入出力」は「I/O」と呼ばれることが多く、「ファイルへのデータの読み書き」「ネットワーク通信」「周辺機器とのやりとり」などは、「I/O」処理が発生しています 
(「I/O」は、input「I」とoutput「O」です)

プロセスには、3つの状態があります。

プロセスの3つの状態

プロセスが生成されると、実行可能状態となります
CPUを割付けることをディスパッチといい、ディスパッチされるとプロセスは実行状態になります
一定時間が経過すると、再度実行可能状態となり、ディスパッチされるのを待ちます
実行状態にあるプロセスが、例えば入出力要求を行った場合には、待ち状態となり、入出力完了すると、再び実行可能状態となります
*ディスパッチでは、実行可能状態にあるプロセスの中で最も優先度の高いプロセスが選択されます

IPC(プロセス間通信)とは

基本的に、各プロセスは独立して動作します(互いに影響を与えません)が
実行中のプログラムの間でデータをやり取りすることも可能です
プロセス間通信には、共有メモリ・メッセージ交換・ソケット・パイプなどがあります

デーモン・サービスについて

デーモン」とは、UNIX系( Linux・MacOSなど)のOSのメインメモリ上に常駐し、常に稼働しているプロセスです
(バックグラウンドプロセス)
多くのプログラムで共通する処理(systemd・syslogdなど)通信ネットワークを処理するもの(httpd・ftpd・smtpd・sshdなど)指定された時間にプログラムを起動する(crond)など
ファイル名の末尾に「d」を付ける習慣があります

Windowsでは「サービス」と呼びます

メモリ管理

実行中のプログラム(プロセス)は、すべてメインメモリ上に読み込まれます

メインメモリには、「物理的な容量の上値があり」「通常、メインメモリ上には複数のアプリケーションプログラムが混在します」
「メインメモリが満タンで使えなかったり」「プログラムを間違えて書き換えたり」すると大変です

メモリ管理」は、カーネルがアプリケーションの要求に応じて「安全なメモリ領域」「必要なメモリ容量」を提供するために必要です

仮想メモリとは

仮想メモリとは、OSによるメモリ管理の方式の一つで、物理的なアドレス(番地)とは別の仮想アドレスを割り当てて管理します

メインメモリを超える作業が発生した場合には、一時的に現在使用していないデータを「スワップ領域」に移すことで、メインメモリの容量を空けます
「スワップ領域」とは、補助記憶装置(ハードディスクなどのストレージ)に作られた「データを一時退避するための専用領域」です

大きく分けてセグメント方式(データ領域の単位が可変)とページング方式(データ領域の単位が一定)の二種類があり、一般にページング方式が使われています(多くのシステムが4KB単位で領域を分割しています)

仮想アドレスについて

仮想アドレスとは、仮想記憶が採用されている場合にメモリ空間に割り振られた相対アドレスのことです
アプリケーションからは物理アドレス(メインメモリ上の場所)を知ることができないため、仮想アドレスが用意されます

仮想メモリ

デバイス管理

コンピュータで作業をするときは、「周辺機器(マウス・キーボード・プリンターなど)」を使います
周辺機器は、製造元が周辺機器ごとに用意する「デバイスドライバ」を通して制御されます

「デバイスドライバ」は、「OS」がハードウェアとやりとりするためのプログラムで、ハードウェアを制御・通信するための情報を提供します

「アプリケーションがカーネルに要求」→「カーネルが要求をデバイスドライバに送る」

カーネルは「どのデバイスドライバが担当するか」検索し、デバイスドライバを制御します
言い換えると「デバイスドライバ」はカーネルの機能を拡張するものです

カーネルが「周辺機器」と「アプリケーション」の橋渡しをすることは
「周辺機器の製造元の違いを吸収する」以外にも、「アプリケーションのバグ」「悪意のある攻撃」などが「システム全体」におよばないよう貢献しています

余談コンピュータに接続した周辺機器をOSなどのソフトウェアに認識させて、利用可能な状態にすることを「マウント」といいます

ファイルシステム

デバイス管理」機能の1つに「ファイルシステム」があります
ファイルシステムのおかげで、データを「ファイル」として扱え、仕分けなどができます

ファイルシステムの概要

ファイルシステムとは

ファイルシステムとは、OSの「デバイス管理する機能」の1つで、補助記憶装置(ハードディスク・SSD・USBメモリ・SDカード等など)にデータを書き込むときの管理方式です
ファイルシステムのおかげで、「ファイル単位」でデータを取り扱え、データを効率よく保存できます

ファイルシステムの仕組み

データはストレージ上の「空いている領域」にファイル単位で記録されます
*ストレージ領域をむだなく使うため、保存場所を分散することもあります

「任意のファイル名」を付けると「作成日や最終更新日(タイムスタンプ)」「ファイルシステム上での位置(どのディレクトリに含まれるか)」などの情報が 「管理領域」に記録されます

「管理領域を参照し読み込みや書き込みを行なったり」「管理領域から削除されたファイルの領域を解放したり」「管理領域に新しいファイル用の領域を追加したり」します

ディレクトリについて(ディレクトリはフォルダとも呼ばれます)

ディレクトリ

ディレクトリとは、ファイルを格納する入れ物です
一般的にファイルシステムは、ツリー構造(木を逆さにした構造)になっていて、一番上を「ルートディレクトリ」と呼びます

「ルートディレクトリ」からファイルを保存したディレクトリまでの名前をスラッシュ「/」などでつないぎ、最後にファイル名を付けたものを「パス(path)」といいます
パス(path)はストレージ内の位置情報です(ファイルの場所を一意に特定できます)

*Windowsは階層の区切りを「¥または\」で、LinuxやMacは「/」でつなぎます

リンク(ファイルシステム上の別のファイルへの参照)

ハードリンク
1つの実体に対してファイルを複数作ることができます
コピーとの違いは、コピーは内容が同じ実体が2つになるが、ハードリンクはあくまでも実体は1つです
リンク元のファイルが削除されても、ファイルの実体にアクセスできる
異なるファイルシステムの「ファイル・ディレクトリ」にリンクできない
ショートカット(エイリアス・シンボリックリンクとも呼ばれる)
ファイルまでのパスを含んだ小さなファイルだけ作り、そのファイルから実体を参照できるようにする仕組みです
リンク元のファイルが削除されると、ファイルの実体にアクセスできない
異なるファイルシステムの「ファイル・ディレクトリ」にリンクできる

「さまざまな機能」をそなえるファイルシステムがあります
機能の一例です

アクセス権限の設定
「ファイル・ディレクトリ」に対して「読み取り」「実行」「書き込み」などの権限を設定、権限はユーザーごとや管理グループごとに設定する場合がほとんどです
暗号化
ディスク盗難時のセキュリティ対策など
データ圧縮
内容を圧縮してディスク領域を節約します
*あくまでも保存領域を節約するためで、拡張子が「.zip」の圧縮とは別です
チェックサム
「ファイルをコピーしたとき」や「ダウンロードしたとき」に、「ファイルの同一性」確認ができます
スナップショット
「ある時点の瞬間の全体像」を丸ごと写し取ったもので、「ある時点に復旧したり」「ある時点の状態確認を確認したり」などに用いられます
ジャーナリング
「ログ(更新の記録)」を残すことで、突然電源が切た場合でもデータに不整合が起こらないよう、ジャーナルと呼ばれる領域に一旦時系列で保存して、いつでも参照できるようにしています

拡張子について

拡張子とは、ファイル名末尾に、「.」(ドット/ピリオド)で区切られた右側の文字列部分です
拡張子を元に、関連付けられたアプリケーションが起動する仕組みの場合があります

テキストファイルとバイナリファイル

テキストファイルは「文字コードで定められた文字」だけが格納されているファイル(文字列だけのファイル)

バイナリファイルは、テキストファイル以外のファイルで「文字コード以外の数値も含む」ファイル(画像・音声・実行ファイルなど)

*実行ファイルとは、ファイルの内容がプログラムで、拡張子が「.exe」の場合が多い

余談プログラミング言語で書かれたテキストファイルのことをソースコード(テキストファイル)といい、
コンピュータが理解できるようにコンパイラで機械語に翻訳してしたものは、実行ファイル(バイナリファイル)です

隠し「ファイル・ディレクトリ」について

保存されている「ファイル・ディレクトリ」のうち、一覧に表示しないよう設定された「ファイル・ディレクトリ」があります
システムが利用する「ファイル・ディレクトリ」などは、誤って変更や削除をしないように標準設定では非表示になっています

  • 「MacやLinux」は、フォルダ名の先頭に「.(ドット)」を付けると隠し「ファイル・ディレクトリ」になります
  • 「Windows」は、フォルダを右クリックして「プロパティ」を選び「隠しファイル」にチェックをつければ隠し「ファイル・ディレクトリ」になります

フォーマットについて

フォーマットとはデータを記録する形式(テンプレート)のことです

物理フォーマットと論理フォーマット

物理フォーマット
工場で作ったばかりの補助記憶装置には、データを書き込むための区切りがありません
区切り(セクタ)を書き出す作業が物理フォーマットです
物理フォーマットは、工場で出荷時にされます
論理フォーマット
物理フォーマットされた補助記憶装置を利用するには、ファイルシステムに対応する必要があります
ファイルシステムに対応するために、パーティションなどの必要な情報の初期値を記録する作業が論理フォーマットです
パーティションとは、補助記憶装置の内部を複数に分割してできた「独立した区画」のことです
補助記憶装置が使える実容量は「記録した情報分」を引いた残りの容量です
OSは、標準で一つ以上のファイルシステムに対応しています
OSが対応していないファイルシステムの補助記憶装置を使用するには、フォーマットが必要です
Windowsのファイルシステムは「NTFS」など
Macは「HFS+(古い)」「APFS」など
Linuxは「ext4」や「XFS」など

データを完全に消去し、復元できないようにするには、物理フォーマットが必要です

パソコンでフォーマットをしても、ファイルシステムなどの情報を書き直しただけです(簡単に見つけられないだけで、復元は可能です)
データが上書きされるまで、以前のデータは残っています