見出し画像

【図解】コンピュータ、どんな構造になっているの?(ソフトウェア編)

こんにちは!たこ助だよ🐙
今日は、前回に引き続き「コンピュータがどんな構造になっているか」について説明していくよ。

前回は「ハードウェアの側面」についてお話したから、今回は「ソフトウェアの側面」からコンピュータの構造を説明していくね!

補足:ハードウェアとハードウェア
ハードウェア:キーボードなど物理的な実体があるもの
ソフトウェア:アプリケーションなど物理的な実体がないデータの集まり

できるだけ分かりやすくするから、ぜひ最後まで読んでいってね〜!

[ コンピュータの全体像 ]

コンピュータにおけるソフトウェア的な要素は、次の4つから構成されるよ。
- ①応用ソフトウェア(アプリケーションソフトウェアと呼ぶことも)
- ②基本ソフトウェア(オペレーティングシステムと呼ぶことも)
- ③ミドルウェア
- ④ファームウェア

聞き馴染みのない言葉もあると思うけど、順に説明していくから安心してね。初めに、それぞれの要素がどのように関わっているかを図に示しておくね↓

ダイアグラム1

コンピュータのソフトウェア的な要素

[ 応用ソフトウェア ]

まずは応用ソフトウェアからだ。
応用ソフトウェアは「Application software(アプリケーションソフトウェア)」という英語の訳語だよ。長ったらしい名前だけど、スマホ"アプリ"とか表計算"ソフト"とか言う時に使っている「アプリ」や「ソフト」という言葉は、実はこの言葉を略したものなんだ。

「応用ソフトウェア」とは、コンピュータの能力を"応用"することで特定の目的を達成するソフトウェアのことだよ。これに対して、次に説明する「基本ソフトウェア」は、様々なプログラムを実行する時に共通して必要になる"基本"的な機能を提供するソフトウェアのことを指している。

例えば、応用ソフトウェアの一例であるメモアプリには「メモしたい」、出前アプリには「出前をとりたい」といった特定の目的が存在している。一方で、これらのアプリを動作させるためには、メモリ管理やネットワーク管理といった基本的な機能も必要になってくる。こうした多くのアプリで共通する基本的な機能は、アプリに記述・アプリで直接実行せずに、基本ソフトウェアに記述・アプリからの依頼に基づいて基本ソフトウェアで実行することになっているんだ。

ダイアグラム2

[ 基本ソフトウェア ]

次は基本ソフトウェアだ。
基本ソフトウェアは「Operating System(オペレーティングシステム)」という英語の訳語だよ。よく「OS(オーエス)」と略して呼ぶことが多いから、このnoteでもOSと表現するね。

OSという言葉に聞き馴染みがなくても、次に示したものは知っていると思う。
- MicrosoftのWindows
- AppleのMac OSiOS
- GoogleのAndroid OS
- その他UnixLinuxなどなど...

これらOSの目的は様々なプログラムを実行する時に共通して必要になる基本的な機能を提供することであり、応用ソフトウェアとハードウェアを橋渡しする役割を担っているよ。

具体的には、次に挙げたことを行ってくれているんだ。
- 外部との通信を行うためのネットワーク管理
- 正しく効率のよい処理を行うためのメモリ管理
- 複数の処理を一度に行うためのプロセス管理
- 応用ソフトウェアがコンピュータの核となる機能(ex. ハードウェアの操作、ネットワークの利用)を安全に使用するための仕組み(=システムコール)の提供
- ハードウェアが接続されたときに、そのハードウェアを動かすために必要なソフトウェア(=デバイスドライバ)をロードする仕組みの提供
などなど...

補足:デバイスドライバ
普段何気なく、マウスやキーボードをPCに接続して利用しているけど、実はこれとても凄いことなんだ。というのは、多種多様な会社が作成する様々なデバイスは、それぞれの仕様(命令の出し方や用いるデータの種類)がまったく異なっているからだ。

通常新しいデバイスを接続した時には、デバイスの仕様をOSに読み込まるためのソフトウェア(これをデバイスドライバと呼ぶ)を、CD-ROMやインターネット経由でインストールしないといけない。冒頭に述べたように、デバイスドライバの存在を意識せずに様々なデバイスを使用できているのは、標準的なデバイスに関しては、あらかじめOSにデバイスドライバをインストールしておき、接続時に自動的に読み込むような仕組みがOSに備わっているからなんだ!

ダイアグラム3

[ ミドルウェア ]

次はミドルウェアだ。
ミドルウェアは「Middleware」という英語をそのまま読んだものだよ。middleは「中間の」という意味の形容詞。では何と何の中間かというと、先に説明した「応用ソフトウェア」や「基本ソフトウェア」の中間なんだ。

役割としては、応用ソフトウェアほど特定の目的に特化していないけれど、基本ソフトウェアほど良く使われるわけではない、そんな機能を提供しているよ。

例えば一つのコンピュータの中に、データベースを利用するアプリAとアプリBが存在しているとする。もしアプリAとアプリBが同じデータベースを利用しているとすると、それぞれのアプリで個別にデータベースを用意するのは効率が悪いよね。だけどOSにデータベースの機能は存在しない。そこでOSではないけれど、複数のアプリで共通して利用できるデータベースというソフトウェアを用意しよう!と考える。この時のデータベースのような例がミドルウェアだよ。

ダイアグラム4

[ ファームウェア ]

最後はファームウェアだ。
ファームウェアは「firmware」という英語をそのまま読んだものだ。firmは「かたい」という意味の形容詞で、柔らかいけど簡単には形が変わらない硬さ(ex. マットやクッションの硬さ)を表現する言葉だ。つまりファームウェアは、ハードウェア(hard: 硬い)にとても近いソフトウェア(soft: 柔らかい)なんだ。

実際、ファームウェアはハードウェアを直接制御するためのソフトウェアだよ。こういうと先に説明した「デバイスドライバ」に似ているけど、
- ファームウェアは電源さえあればプログラムを実行できる
- デバイスドライバはOSが起動していないとプログラムを実行できない
という点で、これらは大きく異なるんだ。

例えばPCの内部には、電源を切ってもデータが消えない特殊なメモリがあり、そこには「BIOS(バイオス, Basic Input / Output Systemの略)」というファームウェアが記述されている。BIOSには起動直後に実行すべき処理が書かれていて、PCの電源を入れると、各部分に異常が無いかの確認などを行った上でOSを起動する。OSが起動すれば、それ以降のハードウェアとのやりとりは、デバイスドライバの仕事だよ。

ダイアグラム5

--------------------

最後まで記事を読んでくれてありがとう!

今回は「コンピュータはどんな構造になっているか」をソフトウェアの側面から説明したよ。分かりやすかった!と思ってくれたら嬉しいな。ハードウェアの側面から説明した記事もあるから、こちらもぜひ読んでみてね!

たこ助の学習日記では、プログラミングに関する知識を分かりやすく紹介しているよ。スキやフォロー、Twitter( @takosuke_diary )の応援がとても励みになるよ。ぜひよろしくね!🐙

--------------------

※このnoteは、難しいプログラミングの知識を「誰にとっても分かりやすく紹介すること」を目的としています。専門性・厳密さに欠ける場合がございますので、そうした情報をお求めの方はごめんなさい🙇‍♂️

この記事が参加している募集

よろしければサポートお願いします!