2.1. コンピューターの構成#

コンピューターには、キーボードやマウス、モニター、プリンターといった入出力装置のほか、データを保存するストレージやメモリー、計算処理を担う中央演算処理装置など、さまざまな物理的な部品が組み込まれています。このように、実際に手で触れることのできる物理的な構成要素のことを、ハードウェアhardware)あるいはデバイスdevice)と呼びます。コンピューターでデータを処理したり、作業を行ったりするためには、これらのハードウェアが互いに連携し、適切に動作する必要があります。その連携を可能にするのが、ソフトウェアsoftware)やプログラムprogram)と呼ばれる仕組みです。これらは、ユーザーからの指示を受け取り、ハードウェアを制御しながら目的の処理を実行します。本節では、ハードウェアとソフトウェアについて、簡単に紹介します。

2.1.1. ハードウェア#

コンピューターのハードウェアの中で特に重要なのは、プログラムやデータを記録する記憶媒体storage media)と、さまざまな計算を行う中央演算処理装置central processing unit; CPU)です。記憶媒体には、データを長期的に保存するストレージと、データを一時的に保存するメモリーとがあります。

2.1.1.1. ストレージ#

ストレージには、ハードディスクドライブhard disk drive; HDD)やソリッドステートドライブsolid state drive; SSD)があります。

HDD は古くから広く利用されてきたストレージです。金属製のディスクを高速で回転させ、その表面の磁気の向きをヘッドで変化させることでデータを記録・読み出します(Fig. 2.1)。仕組み上、ディスクの回転速度やヘッドの位置移動に処理速度が影響されます。また、ヘッドとディスクの距離はわずか 10 nm 程度と非常に近いため、動作中に衝撃を与えるとディスクが損傷しやすいという欠点があります。

../_images/hdd.jpg

Fig. 2.1 ハードディスクドライブ#

SSD は半導体素子に電子を閉じ込めることでデータを保存します。電気的にデータを記録・読み出すため、HDD に比べて圧倒的に高速で、可動部品がないため衝撃にも強いのが特徴です。ただし、製造コストが高く、同じ容量であればHDDより高価になる傾向があります。

現在のノートパソコンの多くは SSD を搭載しており、起動時間の短縮やアプリケーションの高速な動作を実現しています。一方で、スーパーコンピュータや大規模データ解析用のシステムでは、容量あたりのコストが安い HDD を組み合わせて利用する場合が多いです。例えば、頻繁に利用するデータは SSD に保存し、大容量であまり使わないデータは HDD に保管する、といった使い分けが行われています。

2.1.1.2. メモリー#

メモリーは、RAMrandom access memory)とも呼ばれ、コンピュータが動作中に必要なデータを一時的に保存する装置です。処理速度が非常に速いため、高速演算を行う CPU と直接やりとりし、効率的にデータ処理を進められます。また、メモリーには電源を切ると内容が消えてしまう揮発性という特徴があります。これは、メモリーが保存用ではなく、あくまで作業中のデータを扱うための仕組みだからです。

CPU を利用してデータを高速処理するには、メモリーの存在が欠かせません。SSD は HDD よりもはるかに高速ですが、それでも CPU から見るとメモリーに比べて数百から数千倍遅いといわれます。もし CPU が直接 SSD からデータを読み書きすると、処理に時間がかかりすぎてしまい、CPU の性能を十分に活かせません。そのため、CPU とストレージの間に「作業用の超高速な一時保管場所」としてメモリーが欠かせません。

例えるならば、ストレージは倉庫、メモリーは作業台、そして CPU は止まることを許されない社畜です。社畜が効率的に働くには、よく使う工具や材料を作業台に並べておくのが一番です。毎回倉庫に取りに行かされるようでは、仕事が進まないどころか、生産性が低いと怒鳴られて早々と淘汰されてしまいます。コンピューターの世界、意外とブラックなのです。

メモリーの方式には DRAM と SRAM があります。一般的なパソコンで使われるのは DRAM を改良した SDRAM で、現在は DDR4 や DDR5 といった世代の規格が主流です。メモリーを増設の際には、世代の対応を確認する必要があります。

2.1.1.3. CPU#

CPU はコンピューターの頭脳にあたり、あらゆる計算を担います。簡単な処理なら CPU 内部にあるキャッシュメモリーにデータを保存して演算を行いますが、より大規模な計算ではメモリーとやり取りをしながら処理します。

2.1.2. ソフトウェア#

ソフトウェアは大きく分けて二つの種類があります(Fig. 2.2)。ひとつは、特定の目的や作業を実行するための応用ソフトウェアapplication software[1]です。もうひとつは、ハードウェアの管理や、応用ソフトウェアとの連携を担うシステムソフトウェアsystem software)です。応用ソフトウェアには、文書作成ソフトや表計算ソフト、ウェブブラウザ、ゲームなど、ユーザーが直接操作するソフトウェアが含まれます。一方、システムソフトウェアはコンピューターの基盤として動作しており、アプリケーションがハードウェアを安全かつ効率的に利用できるように調整する役割を果たしています。Windows や macOS、Linux などが代表的なシステムソフトウェアの一例です。

../_images/software_layers_desc.jpg

Fig. 2.2 システムソフトウェアは、ハードウェアと応用ソフトウェアの橋渡しとして機能し、アプリケーションがハードウェアを安全かつ効率的に利用できるように調整する役割を果たします。#

応用ソフトウェアとシステムソフトウェアの関係を、具体的な場面で見てみましょう。たとえば、ウェブブラウザを使ってウェブサイトにアクセスする場面を考えてみます。ユーザーがブラウザのアドレスバーに URL を入力すると、そのキーボード入力はシステムソフトウェアによって検知され、ブラウザに伝えられます。ブラウザはその入力を受け取り、文字を画面上に表示します。次に、ユーザーが「Enter」キーを押すと、この操作もシステムソフトウェアを介してブラウザに通知され、ブラウザはその指示に基づいてウェブサイトへのアクセスを開始します。この一連の処理の中で、システムソフトウェアは、ブラウザがメモリーや CPU、ネットワークといったリソースを使用できるように管理し、必要な情報がインターネットから届いた際には、そのデータを最初に処理してからブラウザに渡します。

このように、私たちが目にする操作の裏側では、システムソフトウェアがハードウェアと応用ソフトウェアの間に立ち、両者の円滑な連携を支えています。

ソフトウェアは大きくシステムソフトウェアと応用ソフトウェアに分類されますが、より詳しく見ると、作用対象や役割に応じて複数の階層構造を形成しています。おおまかに、ハードウェアに近い側から順にファームウェア、システムソフトウェア、応用ソフトウェア の層に分けられます(Fig. 2.3)。

../_images/software_layers.png

Fig. 2.3 ソフトウェアは複数の階層から構成され、各層が連携しながら、ハードウェアとデータ処理を制御しています。#

最もハードウェアに近い層がファームウェアfirmware)です。これは、ハードウェアを直接制御するソフトウェアで、通常はハードウェア本体に組み込まれています。たとえば、冷蔵庫や電子レンジなどの家電製品は、電源を入れるだけで動作しますが、これは内部にファームウェアがあらかじめ搭載されているためです。コンピューターの場合、起動時に動作する BIOS(Basic Input/Output System)や UEFI(Unified Extensible Firmware Interface)がファームウェアにあたります。これらは OS よりも前に動作し、システムの初期化やハードウェアの検出を行います。

ファームウェアの上にあるのがシステムソフトウェアです。この層はさらに、基本ソフトウェアまたはオペレーティングシステムoperating system; OS)と、ミドルウェアに分けられます。OS は、アプリケーションとハードウェアの間を取り持つ中核的なソフトウェアで、CPU やメモリー、ストレージなどのハードウェア資源を適切に制御・管理します。アプリケーションが安全かつ効率的に動作できるよう、共通のインターフェースを提供する役割を担っています。代表的な OS には、Windows、macOS、Linux などがあります。

ミドルウェアmiddleware)は、OS と応用ソフトウェアの中間に位置するソフトウェア群で、必須ではありませんが、特定の処理を補助する目的で導入されます。たとえば、データベース管理システム、通信ライブラリ、仮想マシンはミドルウェアの代表例です。これらは複数のアプリケーションに共通の機能を提供し、開発や実行を支援します。

そして最上位に位置するのが、ユーザーが直接操作する応用ソフトウェアです。文書作成、データ解析、ウェブ閲覧、ゲームプレイなど、私たちが日常的に利用しているソフトウェアの多くはこの層に属しています。

ユーザーが操作しているのはこの応用ソフトウェアだけであっても、その背後では、ファームウェアからシステムソフトウェア、ミドルウェアに至るまで、複数の層が密接に連携しながら、ハードウェアを動かし、目的の処理を実現しているのです。

2.1.3. オペレーティングシステム#

オペレーティングシステムoperating system; OS)は、応用ソフトウェアとハードウェアの間に位置し、両者のやり取りを仲介する役割を担っています。コンピューターの OS には、Windows、macOS、Linux などが広く利用されています。また、スマートフォンやタブレットでは、Android や iOS が主流です。

応用ソフトウェアとハードウェアの間に OS が介在することで、両者が直接やり取りする必要がなくなり、開発や運用の負担が大幅に軽減されます。もしアプリケーションが直接ハードウェアを制御する必要があると、機器ごとの命令や仕様に対応するため、多大な労力やコストが発生します。新しいデバイスや規格が登場するたびに、すべてのアプリケーションを更新するのは現実的ではありません。OS は、こうしたハードウェアごとの違いを吸収し、統一された仕様をアプリケーションに提供しています。これにより、開発者は個々のハードウェアを意識せずに、OS が用意した仕様に基づいてアプリケーションを開発できます。たとえ新しいデバイスが追加されても、OS 側が対応すればアプリケーションはそのまま動作可能です。

OS は、キーボードやマウスのような一般的なハードウェアを標準でサポートしており、接続するだけで利用できます。一方、特殊なハードウェアには、製造元が提供するドライバーdriver)と呼ばれるソフトウェアを OS に追加することで対応可能です。ドライバーは OS とハードウェアの橋渡しを担い、OS がその機器を制御できるようにしています。このように、OS とドライバーによってハードウェアとのやり取りが統一されることで、ハードウェアメーカーとアプリケーション開発者は互いに独立して開発を進めることができ、ソフトウェアの互換性や開発効率が大きく向上します。

言ってみれば、開発者はガス配管や電気工事といった厨房の裏方作業から解放されたシェフで、料理づくりに集中できるようになったのです。ただ、オーブンがうんともすんとも言わないときは、だいたい配電工事されていない……つまり、ドライバーがまだインストールされていないだけだったりします。高機能な調理器具を買うときは、配線工事もセットでついてくるか、よく確認しておきましょう。

OS も、いくつかの層から構成されています(Fig. 2.4)。ハードウェアに最も近い層はカーネルkernel)で、CPU、メモリー、ストレージなどのハードウェア資源の管理や、ソフトウェアとのやりとりを仲介する中核的なプログラム群です。その上の層には、シェルshell)と呼ばれるソフトウェアがあります。シェルはユーザーからの入力を受け取り、それを解釈してカーネルに処理を依頼する役割を果たします。さらにその上には、ユーティリティutilities)と呼ばれる、小規模で特定の機能を果たすプログラム群が存在します。たとえば、フォルダ内のファイルを一覧表示する、ファイルをコピーする、テキストを検索するといった処理を実行するのがユーティリティです。これらのユーティリティは、シェルを通じて実行されるため、一般にはコマンドcommand)と呼ばれることもあります。ただし厳密には、ユーティリティはプログラムそのものを、コマンドはそれを実行するための命令や操作を指します。

../_images/linux_systemsoftware_layers.png

Fig. 2.4 Linux の OS はユーティリティ、シェル、カーネルなどの層から構成されています。#

Linux 上で応用ソフトウェアを実行する際、操作は通常、ユーティリティやシェルを通じてカーネルに伝えられ、最終的にハードウェアにアクセスして処理が行われます。Linux には、ターミナルterminal)と呼ばれる応用ソフトウェアが標準で備わっており、ユーザーはユーティリティやシェルを直接操作することも可能です。これらの機能を直接操作できることで、プログラム開発やビッグデータ解析の効率が向上します。そのため、Linux はこれらの分野で高く評価されています。また、Linux と同様の歴史的背景をもつ macOS も、同じ理由から、プログラム開発やビッグデータ解析の分野で多くの開発者に利用されています。

このように、ソフトウェアの仕組みは、層の上にさらに層、その中にもまた層。とにかく階層だらけの構造です。各層はそれぞれ独立していて、自分の役割だけをきっちりこなすよう設計されています。そのおかげで、開発は効率的に進められるわけです。でも、どこかの層が動かなくなると、全体が止まってしまうこともあります。「それ、うちの担当じゃないんで」や「その件については把握しておりません」は、何も役所だけのセリフではありません。システムも同じなんです。

Note

Linux は、ハードウェア間の通信など基本的な機能を提供するカーネルと呼ばれるソフトウェアです。実際に OS として機能させるためには、このカーネルに加え、さまざまな補助的なソフトウェア(シェル、ユーティリティ、インターフェース、パッケージ管理システムなど)を組み合わせる必要があります。このようにして構成された OS を、正確には Linux ディストリビューション と呼びます。 ただし、現在では「Linux」と言う場合、多くの文脈でこの Linux ディストリビューション全体を指すことが一般的です。代表的な Linux ディストリビューションには、Debian、Ubuntu、Fedora などがあります。