高校「情報Ⅰ」単語帳 - 日本文教「情報Ⅰ」 - コンピュータの仕組み
ハードウェア ⭐⭐⭐
コンピュータ本体や内部の装置、周辺機器などの物理的な実体を伴う装置や機器、およびその部品、部材のこと。それ自体には形がないソフトウェアと対比される。
コンピュータの場合、処理装置や記憶装置、入出力装置、電子基板、ケーブル類、筐体などの部品や部材、およびその総体として物理的実体としてのコンピュータのことをハードウェアという。「ハード」と略されることも多く、「HW」「H/W」などの略号で示されることもある。
これに対し、コンピュータプログラムやデータなど、それ自体は物理的な実体を伴わない要素のことを「ソフトウェア」(software)と総称する。ソフトウェアの記録や伝送、表示や実行には必ず何らかのハードウェアが必要となる。
コンピュータ以外の分野でも、施設や設備、機器、部品、資材といった物理的実体をハードウェアと呼ぶことがあり、付随する非物理的な要素と対比する文脈で用いられる。例えば、劇場の建物や設備をハードウェア、そこで催される公演をソフトウェアと呼んだり、教育機関の校舎や備品をハードウェア、提供される教育プログラムをソフトウェアと呼んだりすることがある。
英語の “hardware” の原義は金物、金属製品という意味で、機械や生活用品などについて、木製のものなどと対比して金属製であることを表す言葉だった。現代では金属製かどうかはあまり重視されず、工具や冶具、装置、設備、資材、軍用装備品などを広く総称する言葉として用いられることが多い。
制御装置 ⭐⭐⭐
機械やシステムの構成要素のうち、主に他の要素の動作の制御などの機能を担うもの。コンピュータの場合はCPUの機能の一部として内蔵されている。
コンピュータの制御装置
コンピュータを構成する装置のうち、他の装置の制御を行うものを制御装置と呼ぶ。演算装置、記憶装置、入力装置、出力装置と合わせてコンピュータの五大装置という。
現代のコンピュータではほとんどの場合、演算装置と共に中央処理装置(CPU:Central Processing Unit)という装置の一部として実装される。また、CPUはマイクロプロセッサ(MPU:Micro-Processing Unit)と呼ばれる単一の半導体集積回路(ICチップ)の形で提供されている。
制御装置は演算装置やレジスタ(CPU内部の記憶回路)を操作して命令の実行制御を行ったり、メインメモリ(RAM)などの記憶装置とプロセッサ間のデータや命令の読み出しや書き込みの制御、外部の装置との信号の入出力制御などを行う。
初期のコンピュータの設計では演算装置とは独立・分離していたが、現代のプロセッサにおいては両者が統合されて一体的に設計されるため、両者の区別にはほとんど意味がなくなり、「実行ユニット」「プロセッサコア」のような用語で呼ばれることも多い。
ALU 【Arithmetic and Logic Unit】 ⭐⭐⭐
コンピュータを構成する基本的な装置の一つで、算術演算(四則演算)や論理演算などの計算を行う装置。現代のコンピュータでは制御装置とともにマイクロプロセッサ(CPU/MPU)などの論理回路の一部として実装されている。
加算器や論理演算器などの演算回路を持ち、整数の加減算、論理否定(NOT)、論理和(OR)、論理積(AND)、排他的論理和(XOR)などの基本的な演算を行うことができる。
これらの回路を組み合わせて、乗算や除算、余剰、実数(浮動小数点数)演算、否定論理和(NOR)、否定論理積(NAND)などの演算ができるようになっているものもある。
記憶装置 ⭐
コンピュータの構成要素の一つで、データやプログラムの保存・記憶を行うための装置。レジスタやキャッシュメモリなどCPU内部の半導体メモリ、メインメモリ(主記憶装置/RAM)、ストレージ(外部記憶装置/補助記憶装置)などに分類される。
用途や実装方式、性能、コストなどにより様々な種類の装置があり、これらを組み合わせてコンピュータシステムを構成する。一般に、より高速に読み書き可能な装置ほどコストが高かったり永続的な記憶ができない(電源を落とすと内容が失われる)という特性があるため、小容量の高速な装置、中容量の中速の装置、大容量の低速で永続記憶可能な装置を組み合わせ、状況や使用頻度などに応じて使い分ける。このような階層型の構造を「記憶階層」(memory hierarchy)という。
プロセッサ内部の記憶装置
最も高速だが大きな容量を取ることができないのはCPU(MPU/マイクロプロセッサ)の半導体チップ上に設けられた記憶素子の集合で、中でも、論理回路が処理や演算に直接用いる「レジスタ」(register)は一般的なプロセッサで数十バイトしかないが最も高速に動作する。
また、直近に使用したデータや使用頻度の高いデータをチップ内に保持しておいて、すぐ参照できるようにするための記憶素子を「キャッシュメモリ」(cache memory)という。プロセッサによっては搭載しないこともあるが、数KB(キロバイト)から数百KB程度であることが多い。キャッシュメモリ内部にも記憶階層がある場合があり、より高速だが容量の少ない順に1次キャッシュ、2次キャッシュ、3次キャッシュ、と2~3段階で構成される。
メインメモリ
メインメモリは主記憶装置とも呼ばれ、現代のコンピュータの大半では半導体メモリ素子の一種であるRAM(Random Access Memory)が用いられる。現代のパソコンなどでは数GB(ギガバイト)程度の容量であることが多い。
CPUはストレージに直接アクセスできないため、実行中のソフトウェアが当座必要なデータやプログラムはメインメモリに置いておく必要がある。内容は起動時や必要になった時点でストレージから読み込まれ、CPUが処理した結果なども一旦メインメモリに置かれる。電源を落とすと内容が失われるため、永続的に保管しておきたいものはストレージに書き込む必要がある。
RAMのメモリチップそのものを主基板(マザーボード/メインボード)などに直に実装する場合もあるが、パソコンなど汎用的なコンピュータの多くは、メモリチップをいくつか実装した小さな基板であるメモリモジュールを主基板上の専用の差込口(メモリスロット)に差し込んで装着する。
ストレージ
ストレージはコンピュータの電源が切れても内容が失われない装置で、永続的に必要なデータやプログラムの保存に用いられる。RAMなどに比べ動作が低速な装置が大半で、また、CPUから直に読み書きできないため、コントローラICなどを通じて内容をメインメモリとの間でやり取りする必要がある。駆動装置(ドライブ)と記憶媒体(メディア)が一体化している装置と、取り外して交換できる装置があり、後者はメディアを追加することで全体の容量を増やすことができる。
パソコンなどで主要な記憶装置としてよく用いられるのは磁気ディスクを装置内に固定したハードディスク(HDD:Hard Disk Drive)で、現代では数百GBから数TB(テラバイト)の製品がよく用いられる。ハードディスクに代わって台頭しているのが不揮発の半導体メモリの一種であるフラッシュメモリを用いたSSD(Solid State Drive)で、フラッシュメモリを用いたストレージには他にUSBメモリやメモリーカードなどもある。
データやプログラムの運搬や配布などによく用いられるのがレーザーで内容の読み書きを行う光学ディスクで、登場順にCD、DVD、Blu-ray Disc(ブルーレイディスク/BD)などがあり、この順に容量が大きく読み書きも高速である。CDは音楽・音声の記録や販売に、DVDやBDは映像ソフトの記録や販売に特によく用いられる。
入力装置 【入力機器】 ⭐⭐⭐
コンピュータなどの機器本体にデータや情報、指示などを与えるための装置。一般的には人間が操作して入力を行う装置のことを指し、手指の動きや打鍵を電気信号に変換して伝達するキーボードやマウス、タッチパネルなどが該当する。
コンピュータの登場以前から、ボタンやレバー、ツマミ、ペダルなどの入力装置が機械の操作に用いられてきたが、情報機器ではこれらに加えてより複雑で汎用的な情報入力を実現するため、多数の操作要素や高度な機構を持つ装置が発明された。
例えば、文字が刻印された小さな鍵盤が敷き詰められたキーボード、手で位置や移動を入力するためのマウスなどのポインティングデバイス、画面表示と位置入力を兼用するタッチパネルなどが発達した。特殊なゴーグルなどを利用して視線の方向を検知し、画面上の位置を指示して入力する装置なども開発されている。
ビデオゲームでは、数種類のボタンやスティック、加速度センサーなどを手のひらサイズに収めたゲームコントローラ(ジョイパッド/ジョイスティック)が最も一般的な入力装置として用いられるほか、カメラやセンサーなどを組みわせて四肢の動きを検知するシステムが用いられたり、実在の機械を模した専用の装置(ハンドルやレバー、フットペダルを組み合わせたレースゲーム用筐体など)が用いられることもある。
広義には、人間の動作に限らず外界から情報を取り込んで電気信号やデジタルデータとしてコンピュータに伝達する機器全般が含まれる。マイクやイメージスキャナ、ビデオカメラ、デジタルカメラ、バーコードリーダー、指紋センサー、X線撮影装置、超音波診断装置、光学式読み取り装置(OCRやOMR)などである。
出力装置 【アウトプットデバイス】 ⭐⭐⭐
コンピュータが扱う情報を利用者に認識できる形式で提示する装置。ディスプレイやプリンタ、スピーカーなどが含まれる。
コンピュータシステムを構成する主要な装置の一つで、データを人間に認識できる形で外部に物理的に出力する装置である。光の像を投影して画面を映し出すディスプレイ(モニタ)やプロジェクタ、紙などに印字・印刷を行うプリンタやプロッタ、音声を発するスピーカーやイヤフォンなどが該当する。
主に人間の視覚や聴覚に働きかける原理の機器が多いが、振動で情報を知らせるバイブレーターや、ゲームコントローラなどで操作感(押しやすさ、回しやすさなど)を状況に応じて変化させるフォースフィードバック機構など、触覚を利用する装置もある。
映画館や体験型アミューズメント施設などに見られる、映像に合わせて霧や風を吹き出す装置なども広義には出力装置の一種と言える。未だ研究段階ながら、香り(触覚)や味(味覚)を動的に合成してコンピュータからの出力とする装置も構想されている。
これに対し、人間や環境、外部の機器から情報を取り込んでデータとしてコンピュータ本体に伝える装置を「入力装置」(input device:インプットデバイス)といい、キーボードやマウス、タッチパネル、ゲームコントローラ、マイク、イメージスキャナ、各種センサーなどが含まれる。
出力装置と入力装置を合わせて「入出力装置」(I/O device)と総称することもある。イヤホンマイクやプリンタ複合機(イメージスキャナとしても利用できるプリンタ)、振動機能付きコントローラなど、入出力の両方の機能を一体的に提供する装置もある。
メインメモリ 【主記憶装置】 ⭐⭐⭐
コンピュータ内部でデータやプログラムを記憶する記憶装置のうち、中央処理装置(CPU)と基板上の電気配線などを通じて直に接続されたもの。「メモリ」「RAM」とも呼ばれる。
CPUの命令によって直に読み書きが可能な記憶装置で、実行中のプログラムコードや当座の処理に必要なデータなどが保存される。外部記憶装置(ストレージ)に比べ読み書き動作は桁違いに高速だが、単価が高いため機器に搭載できる容量は何桁か少ないのが一般的である。
現代のコンピュータでメインメモリとして用いられるのは半導体記憶装置(半導体メモリ)のRAM(Random Access Memory)の一種であるDRAM(Dynamic RAM)がほとんどで、機器の電源を切るなどして装置への通電を止めると記憶内容が失われるという特性がある。
このため、データやプログラムの永続的な保管にはストレージを用い、コンピュータの起動時にメインメモリに必要なプログラムなどを読み込んで実行するという動作が基本となっている。
また、現代のCPU製品の多くは内部にDRAMよりも高速な「キャッシュメモリ」と呼ばれる記憶回路を内蔵しているが、これはDRAMとのやり取りを高速化する一時的な保管場所としてのみ用いられ、プログラムから明示的に動作を制御することはできないようになっている。
メモリセル 【メモリーセル】
半導体メモリにおいて情報を記憶、読み書きする最小単位となる回路構成のこと。メモリチップは半導体基板上に微細な大量のメモリセルと配線を敷き詰めた構造となっている。
コンピュータはデータをすべて“0”と“1”を組み合わせた2進数の値として扱うが、メモリセルではこれを電荷の有無など何らかの電気的あるいは磁気的な状態に対応付けて記憶する。外部から配線を通じて供給される電力と電気信号によって記憶の保持や読み込み、書き換え、消去などを行うことができる。
数センチ角の半導体チップの内部に数百万から数十億にも及ぶメモリセルを配線とともに形成したものがメモリチップで、このチップを電子基板にいくつか並べて実装したメモリモジュールを一つの単位としてコンピュータのメモリ装置やストレージ装置の記憶媒体として用いる。
多くのメモリ装置では、一つのメモリセルが0と1に相当する2状態のいずれかを取ることができる構造となっており、1ビットの情報を記録することができる。フラッシュメモリなどでは蓄える電荷などに複数の段階を設け、一つのメモリセルが3つ以上の異なる状態を取ることができるものもあり、1ビットを超える情報を記録することができる。
このような多値を取ることができるセルをMLC(Multi-Level Cell)と呼び、4値ならば2ビット、8値ならば3ビットをまとめて記録できる。これと対比する文脈では2状態1ビット記録のセルをSLC(Single-Level Cell)と呼ぶことある。
メインフレーム 【大型汎用機】 ⭐
大企業や官公庁などの基幹情報システムなどに用いられる大型のコンピュータ製品。最も古くから普及している製品カテゴリーで、多数の利用者や業務で共有し、大量の重要なデータや処理を扱うため、極めて高い性能や信頼性を実現している。
建物の一室やワンフロアを占めるほどの大型の本体(ホスト)と、通信回線や構内ネットワークで接続された操作用の端末(ターミナル)で構成され、日常的な操作は端末を通じて行われる。電源や処理装置、記憶装置などほとんどの構成要素が多重化され、処理性能や耐障害性の向上が図られている。
CPU(処理装置)などの部品やオペレーティングシステム(OS)などのソフトウェアの多くは各社が自社で開発・製造する独自仕様の製品で、顧客は一社からすべての要素をパッケージしたシステムとして購入する形となる。
コンピュータ上で実行される業務システム(アプリケーションソフト)は顧客の事業や業務に合わせてゼロから設計・開発されることが多く、メーカーがソフトウェア開発まで請け負ってハードウェアと一括で納品する場合と、開発受託企業(インテグレータ)がメーカーから仕入れたコンピュータにソフトウェアを導入して納品する場合がある。
ミニコンやオフコン、パソコンなど安価で小型な汎用コンピュータ製品が登場する1980年代頃までは、コンピュータといえばメインフレームのことであったため、「メインフレーム」という呼称は比較的新しいものである(単に「コンピュータ」と呼ばれていた)。
日本語で「汎用」と呼ばれるのは、それ以前のコンピュータは特定の用途ごとに特注で製造されるのが一般的だったからで、ソフトウェアや機器構成を柔軟に変更し、異なる種類の業務や用途に対応・共有できることは画期的なことだった。
メインフレームを製造・販売できるメーカーは大手コンピュータメーカーに限られ、現在では米IBM社、米ユニシス(Unisys)社、仏アトス(Atos/旧Bull)社、富士通、NEC、日立の6社が残るのみとなっている。世界的にはIBMのシェアが高いが、日本では国産の人気が高い。
近年では、一部のシステムではパソコンや小型サーバコンピュータをネットワークを通じて相互に接続した分散型のシステムがメインフレームに取って代わるようになり、最盛期に比べ市場規模は大きく落ち込んでいるものの、過去のシステムとの互換性や高い堅牢性などから、伝統的大企業や官公庁を中心に一定の地位を維持している。
スーパーコンピュータ 【スパコン】
大規模な科学技術計算などを行うために構築された超高性能コンピュータシステム。その時点での最先端の技術や製品を結集して開発され、価格も性能も他のコンピュータとは比べ物にならないほど高い。
科学研究や技術開発、軍事研究、気象予測などにおける数値解析やシミュレーションなどの大規模計算を行うことを主目的に開発・運用されるもので、各国の大学や国立研究所、国防研究機関、大企業の研究開発部門などに設置されることが多い。
スーパーコンピュータを構成するハードウェアや、大規模計算や並列処理のためのソフトウェア、アルゴリズムなどを包括する技術分野を「HPC」(High Performance Computing:ハイパフォーマンスコンピューティング)という。
性能や構造などの外形的な特徴により何を満たしていればスーパーコンピュータと言えるかを明確に定義することはできないが、その時代に業務用に量産される大型コンピュータの最上位機種よりも数十倍から数百倍、あるいはそれを超えるような性能・規模のものが該当することが多い。
スーパーコンピュータの中でも最も性能の高い部類に入る機種は、一基ごとに特注で設計・開発・製造されるものが多い。これをスケールダウンしてパッケージ化した、相対的に小規模な量産品が開発されることもあり、企業の研究部門などに向けて販売される。
性能指標
スーパーコンピュータの性能は様々な指標により計測・比較されるが、科学技術計算などでの利用が多いことから、最も単純な指標として毎秒実行できる浮動小数点演算の回数である「FLOPS」(FLoating-point Operations Per Second)が用いられる。
しかし、スーパーコンピュータは構成が複雑で様々な用途や処理方式が用いられるため、連続して計算を行う回数だけで総合的な性能を測ることは難しく、特定の応用分野における模擬的な処理を実装したプログラムを実行して性能を実測する「ベンチマーク」がよく用いられる。
中でも有名な「LINPACK」を用いて世界中のスーパーコンピュータの性能を計測・比較し発表する「TOP500 Supercomputer Sites」と呼ばれるプロジェクトがあり、そのランキングが総合的な性能評価としてよく引用される。ランキングは半年に一回更新され、日本からは「地球シミュレーター」(2002~2004)や「京」(2011)、「富岳」(2020~2021)などがトップを獲得したことがある。
量子コンピュータ
量子力学の原理を計算に応用したコンピュータ。極微細な素粒子の世界で見られる状態の重ね合わせを利用して、従来の電子回路などでは不可能な超並列的な処理を行うことができる。
原子の内部構造のような極めて微細なスケールの世界は、物体に働く古典力学とは原理の異なる量子力学が支配している。素粒子の状態を表す属性は、複数の状態が同時に実現している「重ね合わせ」という状態にある。これを「量子ビット」(qubit:quantum bit)と呼ばれる情報の表現として利用することにより、並列的な計算を実現するというのが量子コンピュータの基本的な原理である。
汎用的な方式として、従来の半導体チップの論理回路のように量子的な回路を用いる「量子ゲート」(quantum gate)方式が古くから研究され、当初は量子コンピュータといえばこの方式を指していた。2000年代になり「量子アニーリング」(quantum annealing:量子焼きなまし法)と呼ばれる原理を応用した方式が新たに考案され、最適化問題を解く専用コンピュータとして実証実験が行われている。
量子ゲート方式ではどのような素子や装置で計算を行うかについて様々な方式が提案されている。核磁気共鳴や電子スピン共鳴を用いる方法、光子を用いる方法(光量子コンピュータ)、真空中のイオントラップを用いる方法、超伝導素子の磁束や電荷、位相を用いる方法、半導体の微細構造中に電子を捕捉する量子ドットを用いる方法、結晶に不純物を注入してできる格子欠陥(ダイヤモンド中の窒素空孔中心など)に電子を閉じ込める方法などが研究されている。
量子コンピュータは従来型コンピュータのように振る舞うこともできるため、従来型で解ける問題ならば量子コンピュータでも解けることは分かっているが、古典的なアルゴリズム(計算手順)では量子的な効果を活かすことはできない。量子的な原理を利用したアルゴリズムの研究・開発はこれからの課題であり、従来型と根本的に異なる性能を発揮できる分野や問題がどれくらいあるのかはよく分かっていない。
歴史
量子的な系を用いて計算を行うアイデアは1980年に米物理学者のポール・ベニオフ(Paul Benioff)氏が提唱したが、当初は実現の困難さや有効な適用分野の欠如などからあまり活発には研究されてこなかった。
1994年、米AT&Tベル研究所(当時)のピーター・ショア(Peter Shor)氏が量子コンピュータを用いて整数の素因数分解を高速に行うアルゴリズム(Shorのアルゴリズム)を発表した。巨大な整数の素因数分解は従来のコンピュータでは計算が困難で、RSA暗号の安全性の根拠ともなってきたが、量子コンピュータが実現すればこうした問題を高速に解ける可能性が示され、注目が集まった。
2001年には米IBM社のアルマデン研究所が7キュービットの量子コンピュータを試作し、Shorのアルゴリズムにより実際に素因数分解を行うことに成功した。2011年、カナダのD-Wave Systems社が量子アニーリング方式の「D-Wave」を発表し、初の実用的な量子コンピュータとして注目された。
周辺機器 【ペリフェラル】 ⭐
コンピュータなど中心となる機器に繋いで使用する装置のこと。本体に何らかの機能を提供するために用いられ、単体では使用できないものが多い。
通常は機器本体の外部に設置してケーブルや無線などで接続・通信するものを指し、筐体内に据え付ける部品(パーツ)とは区別されるが、一部の記憶装置のように同じ機能でも内蔵型と外付型が両方存在する場合もあり、厳密に区別できるわけではない。
パソコンの主な周辺機器は入出力装置や外部記憶装置で、キーボードやマウス、ディスプレイ(モニター)、プリンタ、イメージスキャナ、スピーカー、ヘッドフォン、外付型のストレージやドライブ(ハードディスク、SSD、光学ドライブなど)、USBメモリなどがよく知られる。
ブロードバンドルータやWi-Fiアクセスポイント、NAS(Network Attached Storage)などのようにネットワーク上で複数の機器で共用するものや、デジタルカメラやデジタルオーディオプレーヤーのようにデータ管理はパソコンで行うが使用自体は単体で行うものも含める場合もある。
また、スマートフォンやタブレット端末、携帯ゲーム機、デジタルカメラなど携帯機器の場合はメモリーカードなどの電子機器だけでなくストラップやケース、液晶保護シート、タッチペンなどの器具も含まれるため、周辺機器と呼ばずに「アクセサリー」と呼称することが多い。
ストレージ 【外部記憶装置】 ⭐⭐⭐
コンピュータの主要な構成要素の一つで、データを永続的に記憶する装置。磁気ディスク(ハードディスクなど)や光学ディスク(CD/DVD/Blu-ray Discなど)、フラッシュメモリ装置(USBメモリ/メモリカード/SSDなど)、磁気テープなどがこれにあたる。
一般的には通電しなくても記憶内容が維持される記憶装置を指し、コンピュータが利用するプログラムやデータなどを長期間に渡って固定的に保存したり、他の機器へのデータの運搬や複製、配布などのために用いられる。
コンピュータ内には補助記憶装置とは別に、半導体記憶素子などでデータの記憶を行う主記憶装置(メインメモリ)が内蔵されており、利用者がプログラムを起動してデータの処理を行う際には補助記憶装置から必要なものをメモリに呼び出して使う。
同じコンピュータに搭載される装置同士で比較すると、補助記憶装置はメモリに比べて記憶容量が数桁(数十~数千倍)大きく、容量あたりのコストが数桁小さいが、読み書きに要する時間が数桁大きい。一般的な構成のコンピュータではメインメモリ容量の百倍から千倍程度の容量の固定内蔵ストレージを用意することが多い。
記録原理による分類
補助記憶装置装置は駆動装置(ドライブ)が記憶媒体(メディア)を操作して、記憶素子の物理状態に信号を対応付けて記録する。様々な動作原理の装置があり、主に磁気を利用するもの、レーザー光を利用するもの、電荷(半導体素子)を利用するものに分けられる。
磁気記録方式の補助記憶装置には磁気テープやハードディスク、フロッピーディスクなどがある。平たい媒体表面の磁性体の磁化状態を変化させて信号を記録する装置で、媒体を薄いテープ状にしてリールに巻き取った「磁気テープ」と、平たい円盤(ディスク)状にして中心軸(スピンドル)で高速に回転させる「磁気ディスク」に分かれる。
一昔前まで補助記憶装置の大半を占めていた方式で、現在でもパソコンに内蔵される固定補助記憶装置としてハードディスクがよく用いられる。磁気テープは容量あたりの単価が極めて安いという特徴から、現在でも企業や官公庁などの大規模なデータ保管に用いられることがある。
光学記録方式の補助記憶装置はCDやDVD、Blu-ray Discなどの光学ディスクで、信号を媒体表面の細かな凹凸や化学的な状態の変化として記録し、高速で回転させながらレーザー光を照射して反射光の変化を読み取る。
製造時にデータを記録する読み出し専用ディスクと利用時にデータの書き込みや上書きができる追記型や書き換え型のディスクがあり、前者は映像やソフトウェアなどのコンテンツの販売で、後者は映像の録画やデータのバックアップ、機器間のデータの運搬などでよく利用される。
近年では、読み出し専用メモリ(ROM)から発展した書き換え可能な不揮発メモリ(電源を落としても内容が消えない半導体メモリ)であるフラッシュメモリの大容量化、低価格化が進み、補助記憶装置装置として広く普及している。ハードディスクの代わりに固定内蔵ストレージとして用いられる「SSD」(Solid State Drive)、携帯機器の内蔵ストレージ、データの運搬に用いられるUSBメモリやメモリーカードなどがフラッシュメモリを応用した補助記憶装置である。
<$Fig:storagecomparison|center|true>インターフェース 【I/F】 ⭐
接点、境界面、接触面、接合面、仲立ち、橋渡しなどの意味を持つ英単語。IT分野では、二つの主体が接続・接触する箇所や、両者の間で情報や信号などをやりとりするための形式や手順などを定めた決まりごとを意味する。
例えば、パソコンと周辺機器はコネクタ(端子)およびケーブルによって接続されるが、端子の形状や電気信号の形式が製品ごとにバラバラでは互いに接続することができない。そこで、「USB」などの標準規格を定めてこれに沿って設計することで、製品の種類やメーカーによらず相互に接続できるようになる。このような複数の対象を繋ぐ接点のことをインターフェースという。
機器(ハードウェア)やソフトウェア、人間(利用者)などが互いに繋がりを持ち情報を伝達する接点のことをインターフェースという。機器間、ソフトウェア間、機器-ソフトウェア間、人間-機器間、人間-ソフトウェア間など様々な類型がある。
機器や装置、回路などの物理的な接続部を「ハードウェアインターフェース」、コンピュータプログラム間の連携仕様を「ソフトウェアインターフェース」、システムと利用者の間で情報をやり取りする仕組みを「ユーザーインターフェース」(主にソフトウェアの場合)あるいは「マンマシンインターフェース」(主に機械の場合)という。
人工物間のインターフェースは、接点の仕様や情報の表現形式、信号の伝送手順などがばらばらでは繋げることができないため、双方が共通の仕様に基づいて設計されていることが重要となる。各分野で様々なインターフェース規格が策定・公開されている。
ハードウェアインターフェース
ハードウェアインターフェースとは、複数の機器や装置、回路などを接続して通信する際の仕様で、コネクタ(端子)の寸法や形状、ケーブルや信号線の数や特性、信号の表現形式や伝送手順などで構成される。無線接続の場合は電波の周波数や信号の形式などが含まれる。
機器内部の部品間の信号伝送、機器本体と周辺装置のデータ伝送、機器間のデータ通信など、目的や用途に合わせて様々なインターフェースが存在する。例として「USB」「SATA」「IEEE 1394」「PCI Express」「HDMI」などの規格、およびこれらの標準コネクタ、ケーブル類などが挙げられる。
また、接続先がコンピュータネットワーク(LAN)の場合は特に「ネットワークインターフェース」と呼ばれることもあり、「イーサネット」(Ethernet)や「Wi-Fi」(無線LAN)などの通信規格、およびコネクタや差込口(ポート)、拡張カード、通信チップなどを指す。
ソフトウェアインターフェース
ソフトウェアインターフェースは、プログラム間でデータや処理依頼などをやり取りする手順や形式を定めた仕様である。代表的なものとして、オペレーティングシステム(OS)やミドルウェア、ライブラリなどの機能を外部から呼び出して利用するため規約である「API」(Application Programming Interface)がある。
他にも、アプリケーションとシステム(OS)を繋ぐ「ABI」(Application Binary Interface)や、実行中のプログラム間で通信するための「プロセス間通信」の仕様なども含まれる。さらに広義には、ネットワークを介してソフトウェア間で連携するためのプロトコル(通信規約)やデータ形式、複数のソフトウェアで共通して利用される汎用的なファイル形式などを含む場合がある。
ユーザーインターフェース
<$Img:Interface2.jpg|right|Edar|https://pixabay.com/photos/touch-screen-mobile-phone-ipad-1023966/>ユーザーインターフェース(UI:User Interface)は、コンピュータなどの機器が利用者に対して情報を伝達する方式や、逆に、利用者が情報を入力するための仕組みを指す。
古くから使われている方式として、コンピュータが画面(古くはプリンタ)に文字で情報を提示し、利用者がキーボードなどから文字で指示を入力する「CUI」(Character User Interface/キャラクタユーザーインターフェース)あるいは「CLI」(Command Line Interface/コマンドラインインターフェース)がある。現在でも業務システムや技術者向けのシステムなどで広く利用されている。
一方、画面に図形や画像を多用した表示を行い、マウス操作やタッチ操作などで画面上の位置を指示する操作方法を基本とする方式を「GUI」(GUI:Graphical User Interface/グラフィカルユーザインターフェース)という。パソコンやスマートフォンなど一般消費者向けのコンピュータ製品で広く普及している。
「ユーザーインターフェース」は主にコンピュータやソフトウェアと利用者(ユーザー)の間の情報のやり取りに着目した用語だが、より広義に、機械と人間のやり取り、およびその接点となる装置や仕組みなどを表す用語として「マンマシンインターフェース」(HMI:Human Machine Interface)がある。自動車におけるハンドルやペダル、レバー、ボタン類などが該当する。
USB 【Universal Serial Bus】 ⭐
主にコンピュータと周辺機器を繋ぐのに用いられるコネクタおよびデータ伝送方式の標準規格。キーボードやマウス、プリンタ、外部ストレージ装置などの接続方式として広く普及しており、スマートフォンなどモバイル機器の充電や外部との通信でも標準的な接続方式となっている。
金属線ケーブルで機器間を結び、データ通信や電力供給を行うことができる。シリアル伝送方式を採用したバス型(信号線共有型)の接続規格で、一つの伝送路を最大127台までの機器で共有することができる。
コンピュータ側には通常1~4つ程度のポート(差込口)が用意されており、これで足りない場合は「USBハブ」と呼ばれる集線装置を介してポートを増やすことができる。機器本体の電源を落とさずにコネクタを着脱する「ホットプラグ」に対応している。
初期に普及した規格(USB 1.1)では12Mbps(メガビット毎秒)、最新の規格(USB4)では80Gbps(ギガビット毎秒)までの通信速度に対応する。当初はキーボードやマウスなどの入出力装置から普及が始まったが、通信速度が向上するに連れて、ネットワークアダプタ(EthernetアダプタやWi-Fiアダプタ)や外部接続の光学ドライブ、ハードディスクなどに利用が広がっていった。
フラッシュメモリを内蔵した親指大のストレージ装置である「USBメモリ」もよく使われており、以前のフロッピーディスクや書き込み型光学ディスク(CD-R/DVD-Rなど)に代わって手軽なデータの受け渡し手段として普及している。日常的にはこれを指して「USB」と呼ぶことも多い。
コネクタ形状
<$Img:USB-Connector.jpg|right|USB-Type Aコネクタ[PD]|https://commons.wikimedia.org/wiki/File:USB-Connector-Standard.jpg>コンピュータ側を想定した大きなコネクタ形状と、周辺機器側を想定した小さなコネクタ形状が規定されている。当初はコンピュータ側は長方形の「USB Type-A」、プリンタなどケーブルが別になっている周辺機器では正方形に近い「USB Type-B」が用いられた。
USB 2.0ではデジタルカメラなど小型の機器向けに、小さな台形に近い形状の「ミニUSB」(Mini-A/Mini-B/Mini-AB)が規定された。Aはコンピュータ側、Bは携帯機器側、ABは携帯機器同士の接続(USB On-The-Go)用だったが、B以外は廃止になり、Type-AとMini-Bを両端に持つケーブルが一般的となった。Miniよりもさらに小型化された「マイクロUSB」(Mirco-A/Micro-B)も規定され、スマートフォンやタブレット端末などでよく利用されている。
USB 3.0ではType-BとMicro-Bの形状が変更になり、従来と互換性のない形になった。新たな小型のコネクタ仕様として「USB Type-C」が規定され、これまでのすべてのコネクタを置き換える新世代の標準として普及が進められている。USB4以降はType-Cのみが標準とされ、過去のコネクタ形状は廃止となった。
給電機能
<$Img:USB-Bus-Power.png|right|>USBにはデータ通信だけでなくケーブルの金属線を利用した送電(電力供給)についての仕様も定めており、装置を駆動するのに必要な電力の供給やバッテリー充電などに用いられている。小さな電力であれば電源ケーブルをコンセントから別に引いてくる必要がなく、利便性が大きく向上した。
初期の規格から存在する「USBバスパワー」では、電圧5V、電流500mA、電力2.5Wまでの給電が可能で、キーボードなどの大きな電力を必要としない装置の駆動に用いられる。プリンタやハードディスクなど消費電力の大きな機器には足りないため、電源ケーブルで別途給電する必要がある。スマートフォンなど小型の機器や携帯機器ではUSBバスパワーが標準の充電方式になっていることも多い。
USB 3.1では従来より大電力の「USBパワーデリバリー」(USB PD:Power Delivery)が導入され、USB Type-Cケーブルを用いて100Wまでの電力供給が可能となった。液晶ディスプレイやコンピュータ本体などの電源ケーブルを代用できるほか、給電方向の切り替え、数珠繋ぎに他の機器を経由しての給電にも対応している。
USBデバイスクラス (USB device class)
<$Img:USB-Icon.png|right|>USBでは機器の種類ごとに標準の動作仕様と対応するドライバ仕様を「USBデバイスクラス」として規定しており、この範囲内の動作についてはオペレーティングシステム(OS)に付属する汎用ドライバだけで利用することができる。USBメモリを別のコンピュータに挿してすぐにデータが移せるのもこの仕組みを利用している。
以前の接続規格では個別の製品ごとに必ず製造元が提供するドライバソフトを導入しなければ通信できなかったが、デバイスクラスで規定された一般的な機能は個別のドライバ不要で動作する。機器に固有の機能を利用したい場合などには、これまで通り付属のドライバを導入して利用する形となる。
CPU 【Central Processing Unit】 ⭐⭐⭐
コンピュータの主要な構成要素の一つで、他の装置・回路の制御やデータの演算などを行う装置。演算装置と制御装置を統合したもので、現代では一枚のICチップに集積されたマイクロプロセッサ(MPU:Micro-Processing Unit)を用いる。
CPUはメインメモリ(RAM)に格納された機械語(マシン語)のプログラムを、バスを通じて一命令ずつ順番に読み出し(フェッチ)、その内容を解釈して行うべき動作を決定(デコード)し、内部の回路を駆動して実際に処理を実行する。現代のCPUの多くはマイクロプログラム制御方式を採用しており、機械語の一命令は、より細かな動作(マイクロコード)の組み合わせに分解されてから実行される。
命令セット
CPUは実行可能な命令の体系が決まっており、これを命令セット(instruction set)あるいは命令セットアーキテクチャ(ISA:Instruction Set Architecture)という。記憶装置から読み出されたどのようなビット列がどのような動作に対応するかを定めたもので、機械語のプログラムはこれを用いて記述される。
命令セットは各CPUの機種ごとに固有だが、同じメーカーの同じ系列の製品では同じ命令セットが採用されることが多く、その場合は異なる製品が同じプログラムを実行することができる。同じ命令セットでも製品の世代が下るに連れて新しい命令が追加されることが多く、新しいCPUは古いCPU向けのプログラムも実行できる一方、古いCPUは新しい命令セットのプログラムは実行できないという関係になる(後方互換性)。
有力なメーカーの製品には、別のメーカーが同じ命令セットを採用した互換CPU製品を開発・販売することもある。例えば、米インテル(Intel)社のx86命令セットは広く普及しており対応ソフトウェアが豊富なため、これをそのまま実行できる互換CPUを米AMD社などが製造している。
構造
一般的なCPUの内部は、命令の解釈や他の回路への動作の指示などを行う制御ユニット、論理演算や算術演算を行う演算ユニット(ALU:Arithmetic and Logic Unit)、データの一時的な記憶を行うレジスタ、外部との通信を行うインターフェース回路などで構成される。
また、レジスタとメインメモリのあまりに大きな速度差、容量差を埋めるため、両者の中間の速度と容量を併せ持つキャッシュメモリが内蔵されることが多く、浮動小数点演算に特化した演算ユニット(FPU:Floating-Point Unit)なども標準搭載されることが多い。
以前はマザーボード上のチップセットや単体のICチップとして提供されてきた、メモリコントローラやI/Oコントローラ、グラフィックス処理(GPU)などの機能が統合された製品も数多く登場している。コンピュータに必要な機能のほとんどをCPUの内部に統合した製品はSoC(System-on-a-Chip)と呼ばれる。
性能
内部の演算回路やレジスタが一回の動作でまとめて伝送、保存、処理できるビット数が決まっており、この値が大きいほど一度に多くのデータを処理でき、また、広大なメモリ空間を一元的に管理できる。
一度にnビットのデータを処理できるCPUをnビットCPUというように呼び、CPUが発明された当初は4ビットであったが、8ビット、16ビット、32ビットと拡張されてゆき、現代では64ビットCPUが広く普及している。
また、ほとんどのCPUはコンピュータ内部の特殊な回路から一定周期で発信されるクロック信号に合わせて動作するようにできている。より高い周波数の信号で動作するものほど、単位時間あたりに多くの動作を行うことができ、性能が高い。例えば、2GHz(ギガヘルツ:毎秒10億回)で動作するCPUと1GHzのCPUならば、他の仕様が同じなら約2倍の速度差がある。
並行処理
単純な構造のCPUは一つの命令列から一つずつ順番に命令を取り出し実行していくが、現在のCPU製品の多くは、何らかの形で複数の命令、あるいは複数の命令列を同時並行に処理できる機能を内蔵しており、クロックあたりの性能を引き上げている。
よく用いられるのはパイプライン処理で、一つの命令を複数の段階に分割してそれぞれを別の回路で実行することにより、いくつかの命令の実行を並行して進めることができる。ある命令が実行段階にあるとき、次の命令がデコードを、その次の命令がフェッチを行うといったように、前の命令の完了を待たずに空いた回路に先行して次の命令を投入する方式である。
また、大抵の命令は限られた回路しか利用しないという性質を利用して、空いている回路で実行できる別の命令を同時に投入する方式を同時マルチスレッディング(SMT:Simultaneous Multithreading)という。擬似的に二つのプログラムを並行に実行することができ、最良の場合で数割の性能向上が果たせる。Intel社のCPUに内蔵されるハイパースレッディング(Hyper-Threading)機能が有名である。
一つの半導体チップの内部に、命令の解釈・実行を行うユニット(CPUコア)自体を複数搭載するという手法も広まっており、マルチコアプロセッサ(multi-core processor)という。それぞれが独立して別のプログラムを並列に実行でき、複数のCPUを搭載するのとほとんど同じ効果を得ることができる。ちなみに、一台のコンピュータに複数のCPUを内蔵する方式はマルチプロセッサ(multiprocessor)という。
クロック 【クロック信号】 ⭐
掛け時計、置き時計、速度計などの意味を持つ英単語。IT分野では、電子回路の動作タイミングを合わせるための高周波の周期的な信号を指すことが多い。
電子基板や半導体チップなどの内部で、複数の電子回路が信号を送受信するタイミングを揃えるために、規則正しく刻まれる電気信号を「クロック信号」(clock signal)という。そのような信号によって各回路の動作を同期させる方式を「クロック同期設計」(同期回路)という。
信号の形式にはいくつかの種類があるが、最も単純なクロック信号は一定の時間ごとに高電圧と低電圧が切り替わるもので、電圧が上がってから次に上がるまでの時間(または下がってから次に下がるまでの時間)のことを「クロック周期」(clock cycle)あるいは「クロックサイクル」という。
また、その逆数である、単位時間あたりの周期の数を「クロック周波数」(clock frequency)という。周波数が高いほど同じ時間に実行できる計算や伝送の回数が増えるため、処理や通信を高速化することができる。半導体チップやコンピュータの性能指標としてよく用いられる。
クロック信号は水晶やセラミックの振動子を内蔵したクロック発振回路によって発信され、専用の信号線を伝わって各回路に供給される。基板上のチップや回路は単一のクロックに従って動作するが、CPUなど特定のチップの内部だけ、外部からの信号の数倍のクロック信号で高速に動作させる場合もある。
クロック周波数 【動作周波数】 ⭐
電子基板や半導体チップなどの内部で、複数の電子回路が信号を送受信するタイミングを揃えるための周期的な電気信号を、単位時間あたり何回発振するかを表す値のこと。単位は「Hz」(ヘルツ)。
クロック信号には様々な形式があるが、最も基本的なものは一定時間ごとに高電圧と低電圧が切り替わる信号で、基板内や回路内に設けられた発振器により生成され、各装置や回路に供給される。
クロック信号を毎秒何回発するかを表すのがクロック周波数で、この値が大きいほど、1秒を短い間隔で区切って信号の処理や伝送を実行するため、他の条件が同じなら装置をより高速に動作させることができる。
クロック信号を毎秒1回発振するのが1Hzで、毎秒1000回を1kHz(キロヘルツ)、毎秒100万回を1MHz(メガヘルツ)、毎秒10億回を1GHz(ギガヘルツ)という。現代のコンピュータのクロック周波数は数百MHzから数GHzが多い。
原則として基板上のチップや回路は単一(同一)のクロック周波数で動作するが、近年ではCPUなど特定のチップの内部だけ、外部からの信号の数倍の周波数を用いて高速に動作させる場合もあり、「CPUクロック」「メモリクロック」「ベースクロック」などのように呼び分ける。
クロック周期 (clock cycle/クロックサイクル)
クロック信号の繰り返し周期一回分にかかる時間の長さをクロック周期(クロックサイクル)という。クロック信号の始まり(電圧の立ち上がりなど)から、次のクロックの始まりまでの時間で、クロック周波数の逆数となる。
例えば、クロック周波数1MHzの信号は毎秒100万回の発振を繰り返すため、一回あたりのクロック周期は100万分の1秒(1マイクロ秒)となり、1GHzならば10億分の1秒(1ナノ秒)となる。
レジスタ ⭐⭐
マイクロプロセッサ(MPU/CPU)内部にある、演算や実行状態の保持に用いる記憶素子。最も高速な記憶装置だが、一般的なCPU製品で数個から数十個(容量に換算して数十バイト程度)と数が限られる。GPUなど特殊なプロセッサでは数万個(数百キロバイト)のレジスタを内蔵するものもある。
演算などの処理を行うためのデータをメインメモリ(RAM)やキャッシュメモリから読み出して置いたり、計算結果や途中経過などを保持したり、読み込みや書き出しを行うメモリ上のアドレス(番地)などを指し示したりするために用いられる。メモリ内の記憶素子のように番地によって識別されるのではなく、それぞれ個別の識別名が与えられている。
命令によって役割が決まっているものを専用レジスタ、特定の役割が割り当てられておらずプログラムの都合で様々な用途に使い回せるものを汎用レジスタという。プログラムからアクセスできずプロセッサ自身が内部的に使用するための特殊なレジスタ(内部レジスタ)を持つ製品もある。
専用レジスタの種類や役割はプロセッサの仕様により異なるが、多くの製品に共通するものとして、アキュムレータ、データレジスタ、アドレスレジスタ、インデックスレジスタ、ベースレジスタ、スタックポインタ、ステータスレジスタ(フラグレジスタ)、プログラムカウンタなどがある。
マルチコアCPU 【multi-core CPU】 ⭐
2つ以上のプロセッサコアを単一のICチップに集積したマイクロプロセッサ(MPU/CPU)。コアの数に応じて複数のコンピュータプログラムを並列に実行することができる。
一般的なCPUでは、命令の解釈や演算、他の装置の制御などを行う回路を組み合わせた「プロセッサコア」(processor core)が1セット入っている。マルチコアCPUにはこのコアが複数内蔵されており、ちょうどCPUを複数個搭載しているような状態になる。
マルチコアCPUでは、各コアは単体で機能が完結していて独立しているため、それぞれのコアは他のコアに影響されることなく動作できる。一台のコンピュータに複数のプロセッサを搭載するマルチプロセッサと同じように、処理を複数のコアで分散して並列に実行することで性能を向上させる。
コアの数を増やしていけば同時に実行できるプログラムの数も増え、複数台のコンピュータを用意したのと同じように全体として性能を向上させることができる。ただし、単体のプログラムの実行性能(シングルスレッド性能)はこの方法で向上させることはできない。
演算回路などはコアごとに独立しているが、一部のキャッシュメモリ(2次キャッシュなど)や外部とのデータ伝送路などは複数のコアで共有される。キャッシュの共有は、あるコアが読み込んだデータを別のコアが流用できるなど性能面でのメリットもある。
一方、マルチコアCPUのデメリットとして、1個のプロセッサ製品にほぼフルセットのコアを複数個詰め込むという性質上、どうしてもプロセッサのサイズ(面積やトランジスタ数)は大きくなり、製造コストは高くつく。
マルチコアCPUはOSからは独立した複数のマイクロプロセッサとして扱われ、動作感もマルチプロセッサ構成とほとんど変わらないため、利用者やソフトウェア開発者はマルチコアCPU上での動作を特に意識する必要はない。
内蔵するコア数によって呼び方が変わり、2コアは「デュアルコア」、4コアは「クアッドコア」、6コアは「ヘキサコア」、8コアは「オクタコア」と呼ばれる。10コアや12コアの製品も開発されているが、これらは単に「数字+コア」と呼称されることが多い。
ヘテロジニアスマルチコア (heterogeneous multicore)
異なる種類(heterogeneous)のプロセッサコアを一つのICチップに集積して一体的にどうさせる方式をヘテロジニアスマルチコアという。
機能や得意分野の異なる複数の種類のコアを統合することにより、様々な場面で総合的に高い性能を発揮できるように設計されている。ただし、性能を引き出すためには複雑なプログラミングが必要とされるため、対応ソフトの開発コストは高くなりがちになる。
ヘテロジニアス方式は組み込みシステム向けのプロセッサなどで採用例があり、ソニーのプレイステーション3のCPUである「Cell/Broadband Engine」プロセッサなどが有名。一方、パソコンやサーバ向けの汎用CPU製品では同じコアを複数搭載するホモジニアスマルチコアが主流となっている。
ホモジニアスマルチコア (homogeneous multicore)
同じプロセッサコアを複数集積したマルチコアプロセッサのことをホモジニアスマルチコアという。通常、単にマルチコアと言えばこの方式のため、あえて明示することは少なく、異なる種類のコアを組み合わせるヘテロジニアスマルチコアと対比する文脈で主に用いられる用語である。x86/x64系プロセッサなど、一般に広く流通する汎用的なCPU製品の多くがこの方式である。
論理回路 ⭐⭐
デジタル信号を処理して論理演算や記憶などを行うための電子回路。単純な論理演算を行う回路を膨大な数組み合わせればCPU(MPU/マイクロプロセッサ)のような複雑な装置を作ることができる。
二状態のいずれかを取るデジタル信号を入力および出力とする論理素子を配線で結び、様々な論理演算や記憶を行う回路を構成する。信号の状態は論理的には2進数の「0」と「1」、あるいは真偽値(真理値/ブール値)の「真」と「偽」に対応し、物理的には電圧の高低で表すことが多い。高電圧を「真」や「1」に対応付ける方式を「正論理」、逆を「負論理」という。
論理素子は「論理ゲート」(logic gate)とも呼ばれ、何らかの論理演算を行う機能を持った単体の素子である。一つ以上の入力を取り、所定の演算を行って一つの信号を出力する。実際の電子回路上では抵抗やトランジスタなど複数の電子部品を組み合わせて実装される。図で表す際の記号には標準規格があり、MIL記号やJIS記号などがよく用いられる。
基本的なゲートとして、否定(NOT)演算を行う「NOTゲート」、論理和(OR)演算を行う「ORゲート」、論理積(AND)演算を行う「ANDゲート」、排他的論理和(XOR)演算を行う「XORゲート」、否定論理和(NOR)演算を行う「NORゲート」、否定論理積(NAND)演算を行う「NANDゲート」などがある。複雑な挙動の論理回路もほとんどがこれらの組み合わせで構成されている。
<$Fig:logic|center|false>現在の入力のみから出力を決定する回路を「組み合わせ回路」(combinational logic)と呼び、加算を行う加算器のように演算を行う回路などが該当する。一方、内部に状態を持ち、過去の入力で変更された現在の内部状態と入力を組み合わせて出力を決定する回路を「順序回路」(sequential logic)という。フリップフロップ回路(ラッチ回路)やカウンタ回路などが該当する。
真理値表 【真偽表】 ⭐⭐
ある論理回路や論理式について、考えられるすべての入力の組み合わせと、対応する出力を一つの表に書き表したもの。
真理値(ブール値/真偽値)は論理演算などで用いられる値で、「真」(true)と「偽」(false)の2値のいずれかを取る値である。コンピュータ上ではすべての情報を「1」と「0」を並べた2進数で表すため、真と1を、偽と0を対応付けて論理回路で様々な処理を行う。
真理値表は論理演算の入力値と出力値の対応関係を図に表したもので、一般的な形式では表の左側の列に入力を、右側の列に出力をそれぞれ並べる。各行に入力の組み合わせと、その時の出力を記入していく。各項には「1」(あるいは「真」「Truth」「T」)か「0」(あるいは「偽」「False」「F」)のどちらかを記入する。
行数
<$Fig:truthtable|right|true>入力が1つ(NOT演算)の場合は入力「0」と「1」の2行で表され、入力が2つの場合は「0-0」「0-1」「1-0」「1-1」の4行となる。同様に、3入力では8行、4入力では16行というように、2の入力数乗が表の行数となる。
列数
ある特定の論理演算の結果を示す場合は出力は1列となるが、複数の異なる演算について結果を比較するために、それぞれの演算ごとに列を用意する(列名部分に演算内容を記述する)場合もある。論理回路の動作を示す表の場合には、出力の数だけ列を用意し、それぞれの演算結果を書き込んでいく。
ベン図 【Venn diagram】
集合間の関係を表す図法の一つ。集合の範囲を円などの図形で表し、図形の重なりによって共通部分を表現するもの。概ね3つ程度までの集合の関係を表すのに用いられる。
19世紀の終わり頃、イギリスの数学者ジョン・ベン(John Venn)によって考案された図法である。まず大きな長方形などで描画範囲を設定し、これをすべての要素が含まれる全体集合とする(この領域は設定しない場合もある)。個々の集合は円や楕円などの図形で表される。集合間に共通の要素がある場合、図形の一部を重ねて表現する。
集合Aを円で表すとき、Aの外側はAの補集合(A、Ac)を表す。集合Bも円で表すと、両者の重なった領域が共通部分(A∩B)、重なりも含め両者を合わせた領域が和集合(A∪B)を表す。BがAに完全に含まれる場合、BはAの部分集合(A⊃B)となる。
3つ以上の集合の関係も図示できるが、4つ以上は重なり方の組み合わせを漏らさず図示するのが難しくなるため、あまり用いられない。説明のために集合ごとに色や模様で塗り分けたり、現在着目している領域のみを着色することが多い。黒で塗られた領域は元が存在しないことを表すため、塗り分けで黒を用いることは控える。
集合演算の結果を視覚的に分かりやすく表すことができるため、これを論理演算の図示に応用することもある。変数を円に対応付け、円の内部を真(true)または1、外側を偽(false)または0に対応付ける。例えば、2変数PとQの場合、円Pの外側がPの論理否定(not P/¬P)、円の重なりが論理積(P and Q/P∧Q)、両円を合わせた領域が論理和(P or Q/P∨Q)に対応する。
ゲート
門、門扉、出入り口、通路、開閉する、などの意味を持つ英単語。
半導体の分野では、電界効果トランジスタ(FET:Field Emission Transistor)において、ソースとドレインの間の絶縁体の上に置かれた電極のことを論理ゲートという。ここに電圧を加えることでソース-ドレイン間の電流を遮断したり通したりすることができ、開閉できる門のような役割を果たすためこのように呼ばれる。
論理ゲート (logic gate)
半導体集積回路(ICチップ/LSIチップ)を構成する、最も基本的な論理演算を実行する論理回路の最小単位を「論理論理ゲート」(logic gate)あるいは単に論理ゲートという。
論理演算の種類に対応してNOT論理ゲート、AND論理ゲート、OR論理ゲート、XOR論理ゲート、NAND論理ゲート、NOR論理ゲート、XNOR論理ゲートなどの種類があり、複雑・大規模な論理回路はこれら基本的な論理論理ゲートを組み合わせて構成されている。
ICチップの規模(集積度)を計る単位として、いくつの論理論理ゲートを繋ぎ合わせて作られたかを表す「論理ゲート数」(単位:論理ゲート)が用いられることもある。
AND回路 【AND gate】 ⭐⭐
基本的な論理回路の一つで、二つの入力と一つの出力を持ち、入力がいずれも「H」(Hight:高電圧)のときのみ出力が「H」となり、それ以外の場合は出力が「L」(Low:低電圧)となるもの。論理積(AND)演算を行う回路である。
正論理の場合、入力の両方が「H」のとき出力が「H」となり、片方あるいは両方が「L」のとき出力が「L」となる(負論理の場合はこの逆)。「H」と「L」を2進数の「1」と「0」に対応付ければビット論理積(ビットAND)演算を、真理値の「真」(true)と「偽」(false)に対応付ければ論理演算のAND演算を行うことができる。
現在の入力のみから出力が決まる組み合わせ回路の一つで、最も基本的な論理ゲートの一つである。回路図に用いる記号をIEC、MIL/ANSI、DINの各規格がそれぞれ定めており、JIS規格はIEC記号に準拠している。AND回路が用意されていない場合でも、NAND回路あるいはNOR回路(のみ)の組み合わせでAND回路を構成することができる。
OR回路 【OR gate】 ⭐⭐
基本的な論理回路の一つで、二つの入力と一つの出力を持ち、入力のいずれもが「L」(Low:低電圧)のときに出力が「L」となり、それ以外の場合は出力が「H」(High:高電圧)となるもの。論理和(OR)演算を行う回路である。
正論理の場合、入力の片方あるいは両方が「H」のとき出力が「H」となり、両方「L」のときのみ出力が「L」となる(負論理の場合はこの逆)。「H」と「L」を2進数の「1」と「0」に対応付ければビット論理和(ビットOR)演算を、真理値の「真」(true)と「偽」(false)に対応付ければ論理演算のOR演算を行うことができる。
現在の入力のみから出力が決まる組み合わせ回路の一つで、最も基本的な論理ゲートの一つである。回路図に用いる記号をIEC、MIL/ANSI、DINの各規格がそれぞれ定めており、JIS規格はIEC記号に準拠している。OR回路が用意されていない場合でも、NAND回路あるいはNOR回路(のみ)の組み合わせでOR回路を構成することができる。
NOT回路 【NOT gate】 ⭐⭐
基本的な論理回路の一つで、一つの入力と一つの出力を持ち、入力の逆の状態を出力するもの。論理否定(NOT)演算を行う回路である。
入力が「H」(High:高電圧)なら出力は「L」(Low:低電圧)、入力が「L」なら出力は「H」となる。「H」と「L」を2進数の「1」と「0」に対応付ければビット否定(ビットNOT)演算を、真理値の「真」(true)と「偽」(false)に対応付ければ論理演算のNOT演算を行うことができる。
最も基本的な論理ゲートの一つで、様々なデジタル回路の構成部品として用いられる。回路図に用いる記号をIEC、MIL/ANSI、DINの各規格がそれぞれ定めており、JIS規格はIEC記号に準拠している。NOT回路が用意されていない場合でも、NAND回路あるいはNOR回路を用いてNOT回路を構成することができる。
XOR回路 【XOR gate】 ⭐
基本的な論理回路の一つで、二つの入力と一つの出力を持ち、二つの入力が一致する時に「L」(Low:低電圧)となり、不一致のとき「H」(High:高電圧)となるもの。排他的論理和(XOR)演算を行う回路である。
正論理の場合、入力の片方が「H」、もう片方が「L」のとき出力が「H」となり、両方「H」または「L」のとき出力が「L」となる(負論理の場合はこの逆)。「H」と「L」を2進数の「1」と「0」に対応付ければビットXOR演算を、真理値の「真」(true)と「偽」(false)に対応付ければ論理演算のXOR演算を行うことができる。
現在の入力のみから出力が決まる組み合わせ回路の一つで、最も基本的な論理ゲートの一つである。回路図に用いる記号をIEC、MIL/ANSI、DINの各規格がそれぞれ定めており、JIS規格はIEC記号に準拠している。XOR回路が用意されていない場合でも、NAND回路あるいはNOR回路(のみ)の組み合わせでXOR回路を構成することができる。
NAND回路 【NAND gate】 ⭐
基本的な論理回路の一つで、二つの入力と一つの出力を持ち、入力が両方「H」(High:高電圧)のときのみ出力が「「L」(Low:低電圧)となり、それ以外の場合は出力が「H」となるもの。論理積(AND)の結果を反転(NOT)した否定論理積(NAND)演算を行う回路である。
正論理の場合、入力の片方あるいは両方が「L」のときに出力が「H」となり、両方「H」のとき「L」となる(負論理の場合はこの逆)。「H」と「L」を2進数の「1」と「0」に対応付ければビットNAND演算を、真理値の「真」(true)と「偽」(false)に対応付ければ論理演算のNAND演算を行うことができる。
現在の入力のみから出力が決まる組み合わせ回路の一つで、最も基本的な論理ゲートの一つである。回路図に用いる記号をIEC、MIL/ANSI、DINの各規格がそれぞれ定めており、JIS規格はIEC記号に準拠している。
「機能的完全性」(functional completeness)を備え、AND回路やOR回路、NOT回路などの基本的な論理ゲート、あるいは加算器などのより複雑な回路を含め、任意の論理回路はNAND回路のみの組み合わせで実装できることが知られている。また、他の論理ゲートより少ない半導体素子(トランジスタなど)で実装できるため実用上もよく利用される。
NOR回路 【NOR gate】 ⭐
基本的な論理回路の一つで、二つの入力と一つの出力を持ち、入力が両方「L」(Low:低電圧)のときのみ出力が「H」(High:高電圧)となり、それ以外の場合は出力が「L」となるもの。論理和(OR)の結果を反転(NOT)した否定論理和(NOR)演算を行う回路である。
正論理の場合、入力の片方あるいは両方が「H」のときに出力が「L」となり、両方「L」のとき「H」となる(負論理の場合はこの逆)。「H」と「L」を2進数の「1」と「0」に対応付ければビットNOR演算を、真理値の「真」(true)と「偽」(false)に対応付ければ論理演算のNOR演算を行うことができる。
現在の入力のみから出力が決まる組み合わせ回路の一つで、最も基本的な論理ゲートの一つである。回路図に用いる記号をIEC、MIL/ANSI、DINの各規格がそれぞれ定めており、JIS規格はIEC記号に準拠している。
「機能的完全性」(functional completeness)を備え、AND回路やOR回路、NOT回路などの基本的な論理ゲート、あるいは加算器などのより複雑な回路を含め、任意の論理回路はNOR回路のみの組み合わせで実装できることが知られている。
半加算器 【ハーフアダー】 ⭐⭐
2進数の加算(足し算)を行う論理回路(加算器)のうち、下の桁からの繰り上がりを考慮せず、単純に二数の和のみを求める回路のこと。より複雑な加算器の構成要素となる。
加算を行う回路を加算器というが、半加算器は2つのビット列の同じ桁の値同士を加算し、その桁の加算後の値と、上位桁への繰り上がりの有無を表す「キャリー」(carry out)の2つを出力する。キャリー出力は繰り上がりがなければ「0」、あれば「1」となる。
2つのビットが両方「0」ならその桁の値として「0」(0+0=0)を、片方が「1」なら「1」(0+1=1, 1+0=0)を出力するが、両方「1」ならば結果は「10」(1+1=10)と2桁の値になるため、その桁の値として「0」を、キャリーとして「1」を出力する。キャリーは隣の上位桁の全加算器に入力される。
半加算器は基本的な論理回路の組み合わせで構成でき、AND回路2つ、OR回路1つ、NOT回路1つで作ることができる。XOR回路が利用可能であれば、XOR回路1つとAND回路1つで構成することもできる。
半加算器は下の桁からの繰り上がりを考慮しないため、そのままでは最下位桁の加算にしか使えない。下の桁からの繰り上がりを入力として受け付けるものは「全加算器」(full adder:フルアダー)と呼ばれ、2つの半加算器とOR回路により構成することができる。最下位桁以外の加算には全加算器が用いられる。
全加算器 【フルアダー】 ⭐
2進数の加算(足し算)を行う論理回路(加算器)のうち、下の桁からの繰り上がりを考慮し、3つの数の和を求める回路のこと。複数桁の加算機の構成要素となる。
加算を行う回路を加算器というが、全加算器は2つのビット列の同じ桁の値と、隣の下位桁からの繰り上がりを加算し、その桁の加算後の値と、上位桁への繰り上がりの有無を表す「キャリー」(carry out)の2つを出力する。キャリー出力は繰り上がりがなければ「0」、あれば「1」となる。
加算する3つの値の「0」と「1」の組み合わせにより「00」から「11」までの8種類の和が得られるが、下位ビットがその桁の値として、上位ビットが上位桁へのキャリーとして出力される。キャリーは隣の上位桁の全加算器に入力される。
一方、下位桁からの繰り上がりを考慮せず、単純に2つの値の和を求める回路を「半加算器」(half adder:ハーフアダー)という。繰り上がりのない最下位桁の和を求めるのに使われる。全加算器は半加算器2つとOR回路1つを組み合わせて構成することができる。
最下位桁に半加算器を置き、各桁についての全加算器を桁の数だけ並べて連結すると、複数桁の2進数の加算を行う論理回路を構成することができる。例えば、半加算器1つと全加算器7つを並べれば8ビットの全加算器となる。
ビット ⭐⭐⭐
情報量の最小単位で、二つの選択肢から一つを特定する情報の量。コンピュータなどでは0と1のいずれかを取る二進数の一桁として表される。
語源は “binary digit” (二進法の数字)を繋げて省略した表現と言われる。情報をすべてビット列に置き換えて扱うことを「デジタル」(digital)という。1ビットのデータが表す情報量は、投げたコインの表裏のように、二つの状態のいずれであるかを示すことができる。
複数のビットを連ねて一つのデータとすることで、2ビットなら4状態(22)、3ビットなら8状態(23)といったように、より多い選択肢を識別できる。一般に、nビットのデータは2のn乗個までの選択肢からなる情報を表現することができる。
例えば、大文字のラテンアルファベットは「A」から「Z」の26文字であるため、これを識別するのには4ビット(16値)では足りず、5ビット(32値)が必要となる。小文字を加えると52文字であるため、6ビット(64値)が必要となる。
派生単位
データの読み書きや伝送を行う場合、その速さを表す単位として1秒あたりの伝送ビット数であるビット毎秒(bps:bit per second)という派生単位が用いられる。
また、実用上はビットでは値が大きくなりすぎて不便なことも多いため、8ビットをまとめて一つのデータとした「バイト」(byte)という単位を用いる場面も多い。かつて何ビットを1バイトとするか機種により様々に分かれていた(7ビットバイトや9ビットバイトなどが存在した)名残りで、8ビットの集まりを「オクテット」(octet)とも呼ぶ。
倍量単位
大きな量を表す際には、SI単位系に則って接頭辞を付した倍量単位を用いる場合がある。
- 1000ビットを「キロビット」(kbit:kilobit)
- 100万ビットを「メガビット」(Mbit:megabit)
- 10億ビットを「ギガビット」(Gbit:gigabit)
- 1兆ビットを「テラビット」(Tbit:terabit)
- 1000兆ビットを「ペタビット」(Pbit:petabit)
- 100京ビットを「エクサビット」(Ebit:exabit)
という。また、コンピュータでは2の冪乗を区切りとするのが都合が良いことが多いため、独自の接頭辞を付した倍量単位が用いられることもある。
- 210(1024)ビットを「キビビット」(Kibit:kibibit)
- 220(約104万)ビットを「メビビット」あるいは「ミービビット」(Mibit:mebibit)
- 230(約10億7千万)ビットを「ギビビット」(Gibit:gibibit)
- 240(約1兆1千億)ビットを「テビビット」あるいは「ティービビット」(Tibit:tebibit)
- 250(約1126兆)ビットを「ペビビット」あるいは「ピービビット」(Pibit:pebibit)
- 260(約115京)ビットを「エクスビビット」あるいは「イクシビビット」(Eibit:exibibit)
という。この2進専用の接頭辞はIEC(国際電気標準会議)が標準化しており、一般にはあまり馴染みがないが記憶容量の表記などで用いられることがある。
補数 【余数】 ⭐⭐
ある自然数をn進数(n進法)で表現した時に、足し合わせるとちょうど「nのべき乗」か「nのべき乗-1」になる自然数のうち、最小のもの。前者は「足すとちょうど桁が一つ増える数」で「基数の補数」と呼ばれる。後者は「足しても桁が増えない最大の数」で「減基数の補数」と呼ばれる。
例えば、10進数の65という数に足し合わせるとちょうど一つ桁上りする自然数は、足すと100になる35であり、(10進数における)「65に対する10の補数」という。また、足しても桁が増えない最大の数は、足すと99になる34であり、(10進数における)「65に対する9の補数」という。
1の補数 (one's complement)
ある自然数を2進数(2進法)で表現したときに、足し合わせるとすべての桁が1になる最大の数のことを「1の補数」という。足してもギリギリ桁が増えない最も大きな数である。
たとえば、「10010110」に対する1の補数は「1101001」であり、両者を足し合わせると「11111111」(8桁すべてが1)となる。コンピュータで取り扱う際には、各桁の0を1に、1を0にするビット反転によって求めることができ、それに1を加えたものは2の補数となる。
2の補数 (two's complement)
ある自然数を2進数(2進法)で表現した時に、足し合わせると桁が増える最小の数を「2の補数」という。足すと一桁増えて先頭の桁が1、残りの桁が0となる数である。
例えば、「10010110」に対する2の補数は「1101010」であり、両者を足し合わせると「100000000」(桁が一つ増えて既存の8桁がすべて0)となる。コンピュータで取り扱う際には元の数のビット反転によって求められる1の補数に1を足せば2の補数となる。コンピュータ上での負の整数の表現や減算の実装などによく用いられる。
浮動小数点数 ⭐⭐
コンピュータにおける数値の表現形式の一つで、数値を桁の並びを表す仮数部と小数点の位置を表す指数部に分割して表現する方式。小数点以下の値を含む数値の表現法として最も広く利用されている。
一つの数値を符号部(正負)、仮数部、指数部の3つのデータの組み合わせで表現(データ形式としては符号-指数-仮数の順に格納することが多い)する。仮数に基数(通常は2)を指数乗した値を乗じ、符号を付け加えたものが表現する数値となる。
例えば、「-4.375」は2進数では「-100.011」であり、仮数と指数に分離すると「-1.00011×1010」(値はすべて2進表記)となる。符号は正を0、負を1とすることが多いため、符号部の値は「1」、仮数部の値は「100011」、指数部の値は「10」となる。数値が0の場合は符号と指数は不定となるが、便宜上各部をすべて0としたもの(+0.0×100)を0の表現として扱うことが多い。
IEEE 754形式
浮動小数点数は全体のデータ長や仮数部と指数部のビット数の配分などで様々な形式が存在するが、広く普及している標準規格としてIEEE 754形式が知られる。
全体で16ビット(符号1+指数5+仮数10)の「半精度浮動小数点数」、32ビット(符号1+指数8+仮数23)の「単精度浮動小数点数」、64ビット(符号1+指数11+仮数52)の「倍精度浮動小数点数」、128ビット(符号1+指数15+仮数112)の「四倍精度浮動小数点数」の4つの形式が定められており、それぞれ表現できる数値の幅の異なる。実用上は単精度と倍精度がよく用いられ、プログラミング言語や論理回路などでもこの2つに標準で対応しているものが多い。
仮数の2進数表現は先頭が必ず1になる(2以上の数字は使わない)ため、これを省略して代わりに下位の桁の表現に回す手法(俗にケチ表現という)が用いられる。また、指数部を符号なし整数とするため、本来の値に最大値の半分-1を足した表現(俗にゲタ履き表現という)を用いる。例えば指数部が8ビットの場合は127を加え、128が1を、126が-1を表す。
単精度浮動小数点数 (single precision floating point number)
数値を仮数部と指数部に分けて表現する浮動小数点数の形式の一つで、一つの数値を32ビットのデータで表現する方式のこと。多くのプログラミング言語などでは単に浮動小数点といえば単精度を意味し、“float” などの名称で表されるデータ型が用意されている。
IEEE 754標準で規定された形式では32ビットのうち先頭1ビットが正負の符号部(0が正、1が負)、続く7ビットが指数部(基数は2)、残り24ビットが仮数部となる。表現できる値の大きさの範囲は十進表記で約1.2×10-38~約3.4×1038であり、精度は十進7桁程度となる。
倍精度浮動小数点数 (double precision floating point number)
数値を仮数部と指数部に分けて表現する浮動小数点数の形式の一つで、一つの数値を64ビットのデータで表現する方式のこと。多くのプログラミング言語などが高精度な数値計算のために組み込みデータ型として用意しており、 “double” などの名称で表される。
IEEE 754標準で規定された形式では64ビットのうち先頭1ビットが正負の符号部(0が正、1が負)、続く11ビットが指数部(基数は2)、残り52ビットが仮数部となる。表現できる値の大きさの範囲は十進表記で約2.2×10-308~約1.8×10308であり、精度は十進16桁程度となる。
符号部 ⭐
数値をコンピュータ上で浮動小数点型のデータとして表現したときに、正負の符号を表す部分のこと。ほとんどの場合、先頭1ビットが0なら正、1なら負とする。
コンピュータ上では実数を表す数値表現として浮動小数点をよく用いる。これは数を「仮数×基数指数」という形式で表現するが、コンピュータ上ではすべての情報を「0」と「1」を組み合わせたデジタルデータとして表すため、仮数や指数は2進数で表し、基数は2となる。
浮動小数点数をビット列として表したとき、正負を表す符号の部分を「符号部」、仮数の桁の並びを格納した部分を「仮数部」、仮数に2の何乗をかけるかを表す指数を格納した部分を「指数部」という。データ型ごとに決められたビット数の中にこの3つを規定の長さずつ並べる。
例えば、標準規格のIEEE 754形式の場合、32ビット長の単精度浮動小数点数型では符号部1ビット、指数部8ビット、符号部23ビットがこの順に並んでいる。64ビット長の倍精度浮動小数点数型ではそれぞれ1ビット、11ビット、52ビットであり、16ビット長の半精度浮動小数点数型では1ビット、5ビット、10ビットとなる。いずれの場合も符号部が「0」なら正の数、「1」なら負の数を表す。
仮数部 ⭐
数値をコンピュータ上で浮動小数点型のデータとして表現したときに、各桁の数字の並びを表す部分のこと。その数の有効数字を表している。
コンピュータ上では実数を表す数値表現として浮動小数点をよく用いる。これは数を「仮数×基数指数」という形式で表現するが、コンピュータ上ではすべての情報を「0」と「1」を組み合わせたデジタルデータとして表すため、仮数や指数は2進数で表し、基数は2となる。
浮動小数点数をビット列として表したとき、正負を表す符号の部分を「符号部」、仮数の桁の並びを格納した部分を「仮数部」、仮数に2の何乗をかけるかを表す指数を格納した部分を「指数部」という。データ型ごとに決められたビット数の中にこの3つを規定の長さずつ並べる。
例えば、標準規格のIEEE 754形式の場合、32ビット長の単精度浮動小数点数型では符号部1ビット、指数部8ビット、仮数部23ビットがこの順に並んでいる。64ビット長の倍精度浮動小数点数型ではそれぞれ1ビット、11ビット、52ビットであり、16ビット長の半精度浮動小数点数型では1ビット、5ビット、10ビットとなる。
なお、同じ数値でも仮数と指数の組み合わせには様々なパターンがあり得るが、通常は仮数が必ず「1.01101…」のように実数部分が「1」になるよう指数を調整する。実数は常に1であるため省略することができ、小数点以下の「01101…」の部分だけを記録すればよい。これを「けち表現」(hidden bit)と呼び、仮数のすべての桁を記録する場合より精度を1ビット向上させることができる。
指数部 ⭐
数値をコンピュータ上で浮動小数点型のデータとして表現したときに、小数点の位置を指し示す部分のこと。その数のスケールを表している。
コンピュータ上で実数を表す数値表現として浮動小数点をよく用いる。これは数を「仮数×基数指数」という形式で表現する方式で、コンピュータではすべての情報を「0」と「1」を組み合わせたデジタルデータとして表すため、仮数や指数は2進数で表し、基数は2となる。
浮動小数点数をビット列として表したとき、正負を表す部分を「符号部」、仮数の桁の並びを格納した部分を「仮数部」、仮数に2の何乗をかけるかを表す指数を格納した部分を「指数部」という。データ型ごとに決められたビット数の中にこの3つを規定の長さずつ並べる。
例えば、標準規格のIEEE 754形式の場合、32ビット長の単精度浮動小数点数型では符号部1ビット、指数部8ビット、仮数部23ビットがこの順に並んでいる。64ビット長の倍精度浮動小数点数型ではそれぞれ1ビット、11ビット、52ビットであり、16ビット長の半精度浮動小数点数型では1ビット、5ビット、10ビットとなる。
なお、例えば指数部が8ビットの場合、指数は-128~127の値をとり得るが、指数部の整数表現として符号付き整数は用いず、0から255までの符号なし整数で表すことが多い。これを「イクセス表現」(excess notation/excess-N)「下駄履き表現」「バイアス表現」「オフセットバイナリ」等と呼ぶ。格納された値から127を引いたものが実際の値であり、「0」なら-127を、「127」なら0を、「255」なら128をそれぞれ表す。
指数部は特殊な値を表現するのに用いられることもある。例えば、IEEE 754形式では、指数部の値が最大値(8ビットなら255、実際の値は128)のとき、仮数部が0以外なら非数(NaN:Not a Number)を、仮数部が0の場合は無限大(正負は符号部で指定)を表す。また、指数部が最小値(8ビットなら0、実際の値は-127)のとき、仮数部が0なら「0」を、仮数部が0以外の場合は非正規化数(正規化できない絶対値が極端に小さな値)を表す。
桁落ち ⭐
丸め誤差を含む非常に近い大きさの小数同士で減算を行ったときに、有効数字が減る現象のこと。コンピュータでは浮動小数点数の数値計算において生じる。
長い桁の小数や無限小数を数値計算する場合には、ある桁以降の値を四捨五入するなどして有限桁で表す(丸める)ことがあるが、丸めた後の値が非常に近い値同士で減算を行うと差が非常に小さい値となり、計算前の値より有効な桁が大きく減少してしまうことがある。
例えば、√100001-√100000 という計算を有効数字8桁で行うと 0.31622935×103-0.31622777×103 = 0.158×10-2 となってしまい、得られた結果の有効な桁は3桁に減少してしまう。
コンピュータの浮動小数点形式では便宜上、計算の結果失われた下位の桁を0で埋めて 0.15800000×10-2 のように扱うため、これに大きな数を掛けるなど続けて計算していくことで、途中で生じた桁の欠落が最終的に大きな誤差を生じさせてしまうことがある。
オーバーフロー 【桁あふれ】
あふれ(る)、あふれ出たもの、という意味の英単語。ITの分野では、数値の計算結果がその格納領域に収まる範囲を超えること(算術オーバーフロー/桁あふれ)や、与えられたデータが多すぎて指定の領域に収まりきらないこと(バッファオーバーフローなど)を指す。
算術オーバーフロー
コンピュータ内部で一般的な数値データを格納するメインメモリ上の領域やCPU内部のレジスタは、一つの数値を決まったデータ量で表すようにできており、取り扱える数値の大きさや桁数に上限がある。
数値を計算した結果がこの上限を超え、正しく格納・表現できなくなってしまうことを「桁あふれ」という。例えば、1バイトの符号なし整数型は0から255までの整数を表現できるため、「150×2」という計算の結果を格納しようとすると上限を超えてしまい桁あふれとなる。
桁あふれが発生した際の対処方法として、例外を引き起こして例外処理ルーチンによって何らかの対処を行う場合、実行時エラーを出力してプログラムを停止する場合、表現可能な上限値を設定する場合、上限を超えたことを示す特殊な値を格納する場合、単に無視する場合などがある。
桁あふれを無視してそのまま処理を続行した場合、あふれた上位の桁が消滅して奇妙な値が計算結果となったり、メモリ領域上の隣接する無関係の区画にあふれた数値データの一部を書き込んで内容を破損させてしまうといった事象が起きる場合もある。
負数や浮動小数点数の場合
桁あふれが起きるかどうかは桁の大きさの問題であるため、符号付き整数の場合には負数の値が下限を超えた場合(絶対値の桁数が上限を超えた場合)にも発生する。また、浮動小数点の場合には指数部の大きさが上限値よりも大きくなった場合にそれ以上大きな値を表すことができず桁あふれとなる。
アンダーフロー(underflow)
浮動小数点数において、値の絶対値が小さくなりすぎ(小数点以下の0の桁数が長くなりすぎ)て正しく値を表現できなくなる現象を「アンダーフロー」(underflow)という。指数部が下限値より小さくなることで発生し、0に置き換えられてしまうことで除算や乗算の結果が大きく狂うといったことが起きる。
メモリ領域のオーバーフロー
外部からデータを受け取ってメモリ上の領域に保存するようなプログラムで、指定された領域のサイズを超えてデータを受け取ってしまい、隣接する別の区画にデータをあふれさせてしまうことを「桁あふれ」あるいは「オーバーラン」(overrun)ということがある。
無関係の領域にデータを書き込んでしまうことにより、処理が停止したり、予期しない動作が発生することがある。バッファ領域について発生するものを「バッファ桁あふれ」、スタック領域について発生するものを「スタック桁あふれ」という。
ネットワークを通じて外部からコンピュータを乗っ取る攻撃手法の一つとして、不正なデータを送りつけて受信プログラムにわざと桁あふれを発生させ、攻撃用のプログラムコードを実行するよう仕向ける手法があり、「バッファ桁あふれ攻撃」と呼ばれる。
丸め誤差 ⭐⭐
長い桁や無限桁の小数を扱う際に、これを有限桁で表すためにある桁以降の値を捨ててしまうことにより生じる誤差のこと。コンピュータでは浮動小数点型の数値計算などで現れる。
循環小数や無理数、長い桁の小数などを計算する場合に、浮動小数点型や整数型の数値として表すため、これらのデータ型で表現可能な桁数より後ろの値を切り上げや切り捨て、四捨五入などによって捨て去ることがある。このような下位桁を削る処理を「丸める」(丸め処理)と呼び、このとき捨てた値によって本来の値との間に生じるズレを丸め誤差という。
コンピュータは数値を2進法を用いて限られた桁数で表現するため、丸め誤差は整数と実数の間だけでなく、仮数部の桁数の異なる浮動小数点型(float型とdouble型など)の間や、十進数では有限桁の小数値を2進数で表現しようとすると循環小数になってしまう場合(十進数の0.1を2進数で表すと0.00011001100110011…となる)などでも生じることがある。
丸め誤差は取り扱える桁数の制約から仕方なく生じるため、完全に回避することは困難だが、数値の表現形式や計算手順を工夫して影響を小さく抑えることは可能な場合もある。
打ち切り誤差
コンピュータで数値計算を行う際に生じる計算誤差の種類の一つで、繰り返し計算を行なって値を求めるような場合に途中で計算を打ち切ることによって計算結果と真の値との間に生じる差のこと。
無限小数や無限級数、数値積分、極限値などの計算をコンピュータで行う場合、無限回の計算を行うわけにはいかないため、ある項までで計算を切り上げ、以降の項の値は計算結果は反映されなくなる。これによって正しい結果との間に生じる差を打ち切り誤差という。
一回の値の算出における打ち切り誤差が小さくても、コンピュータシミュレーションなどで大規模に計算を繰り返す場合は誤差が蓄積されて最終的な結果の精度に影響する場合もある。原理上完全に避けることはできないが、計算に用いる級数をより収束の速いものに変形したり、より正確な近似法を用いるなどの手法により切り捨てられる値を小さくして打ち切り誤差を緩和できる場合がある。
情報落ち 【情報落ち誤差】
コンピュータで絶対値の大きさが極端に異なる数字を足したり引いたりしたときに、小さい値の情報が無視されてしまう現象。また、そのような現象によって起きる計算の誤差。
コンピュータでは扱う数値の桁数に制限があるため、極端に大きな値と極端に小さな値を加減算すると計算結果の数値は桁数が非常に長くなってしまい、小さい値に由来する部分がすべて切り捨てられてしまう。
単純に2つの数値の和を求めるような場合であれば大した影響は無いが、大きさの極端に異なる値がたくさんあり、加算を繰り返してすべての合計を求めるような状況では、落差の大きい組み合わせの加算で常に小さい値が無視されてしまい、最終的な結果が大きく狂ってしまうことがある。
そのような場合には、値を小さい順に並べて小さい方から順に足し合わせるといった処理を行うことで、情報落ちの影響を小さくすることができる。
ソフトウェア ⭐⭐⭐
コンピュータを動作させる命令の集まりであるコンピュータプログラムを組み合わせ、何らかの機能や目的を果たすようまとめたもの。プログラムが動作するのに必要なデータも含まれる。
コンピュータを構成する電子回路や装置などの物理的実体を「ハードウェア」(hardware)と呼ぶのに対し、それ自体は形を持たないプログラムや付随するデータなどをソフトウェアという。物理的には記憶装置(ストレージやメモリなど)の記録媒体における電気的あるいは磁気的、光学的な信号として存在する。
ソフトウェアはその役割により、ハードウェアの制御や他のソフトウェアへの基盤的な機能の提供、利用者への基本的な操作手段の提供などを行なう「オペレーティングシステム」(OS:Operating System/基本ソフト)と、特定の個別的な機能や目的のために作られた「アプリケーションソフト」(application software/応用ソフト)に大別される。
これらに加え、ハードウェアに組み込まれ基本的な制御を行う「ファームウェア」(firmware)や、OSとアプリケーションソフトの中間で特定分野の基本機能や共通機能を提供する「ミドルウェア」(middleware)などの分類が用いられることもある。
日本語の外来語としては慣用的に「ソフト」と略称することが多いが、英語の “soft” は「柔らかい」という形容詞の意味しかなく、組織名や製品名のネーミングなどで接頭辞や接尾辞のように用いられる場合などを除き、省略せず “software” と綴る。「SW」「S/W」などの略号で示されることもある。
プログラム以外の用例
コンピュータプログラムは含まないが、何らかの機器を介して内容の再生や鑑賞を行う記録物のことをソフトウェアと呼ぶ場合がある。例えば、音楽CDのような音声の記録物を「音楽ソフト」、DVD-Videoのような動画の記録物を「映像ソフト」のように呼ぶ。
IT関連以外の分野でも、施設や設備、機器、道具などの物理的実体と対比して、組織や業務、事業、催し、知識、技能、情報、記録といった人間の活動に属する無形の事柄をソフトウェアと呼ぶ場合がある。
記録物やイベントなどの用法については「コンテンツ」(content)もほぼ同義語であり、20世紀にはソフトと呼ぶことが多かった分野や業界でも現在ではコンテンツと呼ぶ方が一般的な場合が多い。
OS 【Operating System】 ⭐⭐⭐
ソフトウェアの種類の一つで、機器の基本的な管理や制御のための機能や、多くのソフトウェアが共通して利用する基本的な機能などを実装した、システム全体を管理するソフトウェア。
CPU(MPU/マイクロプロセッサ)や主記憶装置(メインメモリ)、外部記憶装置(ストレージ)、入出力装置などコンピュータのハードウェア資源の管理、外部の別の装置やネットワークとのデータ通信の制御などが主な役割で、コンピュータに電源が投入されると最初に起動し、電源が落とされるまで動作し続ける。
利用者に対するコンピュータの基本的な操作手段も提供し、入力装置による操作の受け付けや出力装置への情報の提示、基本ソフト自体が備える様々な機能の実行、記憶装置内に格納されたプログラムの起動や終了、ストレージに格納されたファイルやディレクトリの操作などを行うことができる。
アプリケーションソフトとの関係
基本ソフトの機能を利用し、OSの上で動作するソフトウェアを「アプリケーションソフト」(application software/応用ソフト)という。アプリケーションの開発者は、呼び出し規約(API:Application Programming Interface)に基づいて基本ソフトの提供する機能を利用することができ、開発の手間を省き操作性を統一することができる。
また、ハードウェアの仕様の細かな違いは基本ソフトが吸収してくれるため、ある基本ソフト向けに開発されたアプリケーションは、基本的にはその基本ソフトが動作する他のコンピュータでも使用できる。ただし、CPUの種類が異なるなど根本的な仕様が異なる場合は、同じOSでも機種ごとに調整されたプログラムが必要となる。
OSの種類
OSは動作する機器の種類や目的などに応じていくつかの異なるタイプに分かれる。最も一般的なのはパソコンやサーバなどの汎用コンピュータ向けの汎用OSで、サーバコンピュータの運用に特化した「サーバOS」、利用者が操作する端末での利用を想定した「クライアントOS」などに分かれる。
汎用OS以外にも、デジタル家電や産業機械などに制御用として組み込まれた特定目的の専用コンピュータの制御に特化した「組み込みOS」がある。中でも、乗り物の駆動装置の制御など、リアルタイム性の高い制御プログラムの実行に特化した設計のOSは「リアルタイムOS」と呼ばれる。
パソコン向けのOSとして広く利用されているものには米マイクロソフト(Microsoft)社の「Windows」シリーズや米アップル(Apple)社の「macOS」(旧Mac OS X)シリーズなどがある。サーバ向けのOSとしては「Linux」などのいわゆるUNIX系OSや、サーバ向けWindowsである「Windows Server」シリーズなどがよく知られる。スマートフォンやタブレット端末などのモバイル機器では米グーグル(Google)社の「Android」とApple社の「iOS」(iPad OS/watchOS)が市場を二分する。
OS 【Operating System】 ⭐⭐⭐
ソフトウェアの種類の一つで、機器の基本的な管理や制御のための機能や、多くのソフトウェアが共通して利用する基本的な機能などを実装した、システム全体を管理するソフトウェア。
CPU(MPU/マイクロプロセッサ)や主記憶装置(メインメモリ)、外部記憶装置(ストレージ)、入出力装置などコンピュータのハードウェア資源の管理、外部の別の装置やネットワークとのデータ通信の制御などが主な役割で、コンピュータに電源が投入されると最初に起動し、電源が落とされるまで動作し続ける。
利用者に対するコンピュータの基本的な操作手段も提供し、入力装置による操作の受け付けや出力装置への情報の提示、オペレーティングシステム自体が備える様々な機能の実行、記憶装置内に格納されたプログラムの起動や終了、ストレージに格納されたファイルやディレクトリの操作などを行うことができる。
アプリケーションソフトとの関係
オペレーティングシステムの機能を利用し、OSの上で動作するソフトウェアを「アプリケーションソフト」(application software/応用ソフト)という。アプリケーションの開発者は、呼び出し規約(API:Application Programming Interface)に基づいてオペレーティングシステムの提供する機能を利用することができ、開発の手間を省き操作性を統一することができる。
また、ハードウェアの仕様の細かな違いはオペレーティングシステムが吸収してくれるため、あるオペレーティングシステム向けに開発されたアプリケーションは、基本的にはそのオペレーティングシステムが動作する他のコンピュータでも使用できる。ただし、CPUの種類が異なるなど根本的な仕様が異なる場合は、同じOSでも機種ごとに調整されたプログラムが必要となる。
OSの種類
OSは動作する機器の種類や目的などに応じていくつかの異なるタイプに分かれる。最も一般的なのはパソコンやサーバなどの汎用コンピュータ向けの汎用OSで、サーバコンピュータの運用に特化した「サーバOS」、利用者が操作する端末での利用を想定した「クライアントOS」などに分かれる。
汎用OS以外にも、デジタル家電や産業機械などに制御用として組み込まれた特定目的の専用コンピュータの制御に特化した「組み込みOS」がある。中でも、乗り物の駆動装置の制御など、リアルタイム性の高い制御プログラムの実行に特化した設計のOSは「リアルタイムOS」と呼ばれる。
パソコン向けのOSとして広く利用されているものには米マイクロソフト(Microsoft)社の「Windows」シリーズや米アップル(Apple)社の「macOS」(旧Mac OS X)シリーズなどがある。サーバ向けのOSとしては「Linux」などのいわゆるUNIX系OSや、サーバ向けWindowsである「Windows Server」シリーズなどがよく知られる。スマートフォンやタブレット端末などのモバイル機器では米グーグル(Google)社の「Android」とApple社の「iOS」(iPad OS/watchOS)が市場を二分する。
デバイスドライバ 【ドライバソフト】 ⭐
コンピュータ内部に装着された装置や、外部に接続した機器などのハードウェアを制御・操作するためのソフトウェア。OSの一部として取り込まれて一体的に動作する。
オペレーティングシステム(OS)がハードウェアを制御するための橋渡しを行なうプログラムで、利用者が直接操作することは稀で、OSに組み込まれてその機能の一部として振舞うようにできている。単に「ドライバ」と呼ばれることも多い。
OSや各プログラムは定められた手順でデバイスドライバに処理を依頼する形を取ることで、それぞれが個別のハードウェアの制御仕様に直接対応する必要がなくなり、また、機種の違いに依らず同じ機能は同じ手順で利用することができるようになる。
個別ドライバと標準ドライバ
個々のハードウェアはそれぞれ固有の機能や制御仕様を持っているため、原則として機種ごとに対応するデバイスドライバを入手・導入しなければ使用・操作することはできない。
ただし、キーボードやマウスなど機種毎の機能や仕様の差異が小さい装置については業界団体や有力メーカーが主導して共通仕様が定められている場合があり、OSに付属する標準のドライバ(ジェネリックドライバなどと呼ばれる)で大半の機能を使用できることが多い。
ドライバの入手・導入
コンピュータ周辺機器はパッケージの一部として添付された記憶メディアに電子マニュアルやユーティリティソフトなどとともにデバイスドライバが同梱され、簡単な操作でOSに導入できるようになっていることが多い。
また、開発元のWebサイトでダウンロードできるようになっている場合もあるほか、Windows UpdateなどOSのソフトウェア更新プログラムを経由して入手できるようになっていることもある。
デバイスドライバはOSごとに開発する必要があるため、Windowsのような有力なOSではほとんどのメーカーがデバイスドライバを用意しているが、マイナーなOSだと物理的に装着できてもドライバが提供されず使用できない場合がある。
ディレクトリ ⭐⭐
電話帳(phone~)、住所録、名鑑、要覧、指導書、規則集などの意味を持つ英単語。IT関連では、多数の対象をその所在などの情報と共に一覧できるよう整理したものを意味することが多い。
ファイルシステムのディレクトリ
ストレージ(外部記憶装置)のファイルシステムなどで、複数のファイルを格納し、ファイルを分類・整理することができる保管場所のことをディレクトリということがある。OSによっては同様の仕組みを「フォルダ」(folder)ということもある。
ストレージ内部を論理的に区切って名前をつけて区別する仕組みで、ディレクトリ名によって識別される。ディレクトリ内には任意のファイルを置くことができるほか、別のディレクトリを作成して入れ子状にすることができる。ディレクトリ内に作られたディレクトリは「サブディレクトリ」(subdirectory)あるいは「子ディレクトリ」などと呼ばれる。
ディレクトリの入れ子関係は、システムやストレージ領域の全体を表すディレクトリを頂点とする階層構造(あるいは木構造)として表すことができ、これを根本から先端に向かって枝分かれする樹木の形になぞらえて「ディレクトリツリー」と呼ぶことがある。
UNIX系OSでは、ストレージや他のシステム資源全体を包含する「ルートディレクトリ」(root directory)を頂点として、Windowsでは各ドライブごとにその内部を包含する「ドライブルート」(drive root)を頂点として、それぞれディレクトリの位置を指し示す。
ストレージ内でのディレクトリやファイルの所在は、「/foo/var/hoge.txt」のようにルートからの経路を順に並べた「パス」(path)によって表す。UNIX系OSでは区切り文字として「/」(スラッシュ)を用いるが、Windowsでは「C:\foo\var\hoge.txt」のように「\」(バックスラッシュ)を用いる。日本語版では同じ文字コードを共有している円マーク(¥)になる。
ディレクトリサービス (directory service)
情報システムの一種で、ネットワーク上に存在する機器やサービスについての情報や、利用者の識別や権限に関する情報を一元管理する仕組みのことを「ディレクトリサービス」(directory service)あるいは単にディレクトリという。
原義の電話帳に近い役割をコンピュータネットワーク上で果たすシステムで、登録利用者のアカウント情報(ユーザー名やパスワード、各種の権限など)、ネットワーク上のサーバコンピュータが提供する機能、共有データ(共有ファイル、共有ディレクトリなど)、プリンタなどの周辺機器についての情報を集めて単一のデータベースに登録して管理する。
利用者はディレクトリにアクセスすることでネットワーク上の資源の所在を知ることができ、個々の資源に対して権限の確認をしなくても、一度のログイン操作で許可された資源を自由に利用できるようになる。米マイクロソフト(Microsoft)社がWindows Serverなどで提供しているActive Directory(アクティブディレクトリ)が特に有名である。
ミドルウェア 【MW】
ソフトウェアの種類の一つで、オペレーティングシステム(OS)とアプリケーションソフトの中間に位置し、様々なソフトウェアから共通して利用される機能を提供するもの。OSが提供する機能よりも分野や用途が限定された、具体的・個別的な機能を提供する場合が多い。
多くのアプリケーションで共通して利用される機能やハードウェアの基本的な制御機能などは、個別に開発するのは非効率であるため、通常はOSの機能として提供され、アプリケーションはOSの機能を利用するだけで済むようになっている。
ただ、そのようなOSの機能はほとんどのアプリケーションが必要とするような極めて基本的・汎用的なものに限られるため、特定の分野でしか使われないが、その分野では必ず必要とされるような機能がミドルウェアとして提供されることが多い。
また、ミドルウェアの中には複数のOSやハードウェアに対応し、OSや機種ごとの差異を吸収する設計となっているものもある。アプリケーション開発者はシステムごとの違いを気にせずに、効率的に開発を進めることができる。
ミドルウェアの種類
どのような機能がミドルウェアとして提供されるかは分野によって大きく異なる。インターネット上のサーバなどではWebサーバやデータベース管理システム(DBMS)、アプリケーションサーバ、データ連携ツールなどが該当する。
業務システムなどでは、こうしたアプリケーションの基盤となる機能だけでなく、自身がアプリケーションとして動作し、システムの運用や管理など行うものをミドルウェアと呼ぶことがある。例えば、バックアップソフト、クラスタソフト、システム監視ツール、運用管理ツールなどである。
組み込みシステムのミドルウェア
産業機械やデジタル家電といった、いわゆる組み込みシステムでは、機器の性能や記憶容量が乏しく、分野や用途によって必要なソフトウェアの機能が大きく異なるため、OS標準の機能が最小限に絞り込まれていることが多い。
このため、パソコンやサーバではOSが提供するような基本的な機能も必要な場合にのみミドルウェアとして組み入れる仕組みになっている場合もある。ファイルシステムやネットワーク通信、グラフィック表示の操作画面(GUI:Graphical User Interface)などの機能である。
ライブラリやモジュールとの違い
汎用的な機能をアプリケーションに提供するソフトウェアには「ライブラリ」(library)や「モジュール」(module)なども存在するが、これらは単体では動作しないプログラム部品として提供され、アプリケーションの一部に組み込まれて一体的に動作する。
一方、DBMSのようなミドルウェアは単体で動作するソフトウェアであり、システム上に常駐して外部から処理依頼を受け付け、結果を送り返す。アプリケーション本体とは独立しており、配布や導入・設定、起動や終了などもアプリケーションとは別に行われるのが一般的である。
アプリケーションソフト 【アプリ】 ⭐⭐⭐
ある特定の機能や目的のために開発・使用されるソフトウェア。利用者が目的に応じて導入し、オペレーティングシステム(OS)の上で動作させる。
現代のコンピュータではOSが機器(ハードウェア)を管理・制御しており、アプリケーションソフトはOSの機能を利用して動作する。「アプリケーション」(application)あるいは「アプリ」(app)と略されたり「応用ソフト」と訳されることもある。
用途や目的に応じて多種多様なアプリケーションソフトがあり、日常的に利用される代表的なものだけでも、ワープロソフトや表計算ソフト、画像閲覧・編集ソフト、動画・音楽再生ソフト(メディアプレーヤー)、ゲームソフト、Webブラウザ、電子メールソフト、カレンダー・スケジュール管理ソフト、電卓ソフト、カメラ撮影ソフト、地図閲覧ソフトなどがある。
企業などの業務で使われる、プレゼンテーションソフトやデータベースソフト、財務会計ソフト、人事管理ソフト、在庫管理ソフト、プロジェクト管理ソフト、文書管理ソフト、生産管理ソフトなどもアプリケーションソフトの一種である。
提供方法の違い
アプリケーションソフトは無償配布あるいは販売されているパッケージを利用者が入手・購入してオペレーティングシステム(OS)に組み込む作業を行うことで使用可能となる。この作業を「インストール」(install/installation)という。OS製品の中にはいくつかのアプリケーションソフトがあらかじめ組み込まれている(プリインストール)ものもある。
大企業や官公庁などが自社の業務に用いるアプリケーションソフトの中には、市販のパッケージソフトではなく自社で開発、あるいは外部の専門の事業者に委託して開発させた「カスタムアプリケーション」もある。市販のものに比べ開発コストはかかるが、自社業務に特化した仕様となっている。
業務などで用いる大規模なアプリケーションソフトの場合、コンピュータに導入された単体のソフトウェアで機能が完結しているとは限らず、機能やデータを提供する「サーバ」と利用者が操作する「クライアント」が連携して動作する「クライアントサーバ型」の構造になっているものもある。
モバイルアプリ/Webアプリ
近年ではスマートフォンやタブレット端末などの携帯機器にタッチ操作できるアプリケーションソフトを導入してパソコンなどの代わりに利用する場面が増えている。これらは「モバイルアプリケーション」と呼ばれ、慣用的に「アプリ」(app)と略されることが多い。
スマートフォンなどには機器や専用OSの開発元が「アプリストア」と呼ばれるネットサービスにアクセスするためのアプリをあらかじめ組み込んで販売しており、利用者はストアからほしいアプリを選んで端末に組み込んで使用する。iPhoneなどのiOS端末では米アップル(Apple)社の「App Store」のみが利用でき、Android端末では米グーグル(Google)社の「Google Playストア」が標準的なストアである。
また、SNSやECサイトなどのネットサービスでは、Webサイトに動的な要素を組み込んでアプリケーションソフトのように振る舞わせ、Webブラウザから操作する方式も広く普及している。このような実装形態を「Webアプリケーション」と呼ぶ。
他のソフトウェアとの違い
コンピュータのハードウェアに対する基本的な制御機能や、様々なソフトウェアが共通して利用する機能をまとめたソフトウェアは「オペレーティングシステム」(OS:Operating System、基本ソフト)と呼ばれる。また、OSとしての制御機能は持たないが、多くのアプリケーションソフトが必要とする特定分野のまとまった機能を提供するソフトウェアは「ミドルウェア」(middleware)と呼ばれる。
アプリケーションソフトの中でも、ファイルやフォルダの圧縮・解凍や、コンピュータウイルスの探知・駆除、記憶装置(メモリ・ストレージ)管理など、システムや他のソフトウェアの機能を補ったり、性能や操作性、安全性を向上させたりするものは「ユーティリティソフト」(utility software)と呼び、アプリケーションソフトとは別の分類とする場合もある。
アプリケーションソフトという用語や分類は、パソコンのように利用者が目的に応じて後からソフトウェアを追加して使用できる汎用コンピュータについて主に用いられ、組み込みソフトウェア(家電の制御ソフトなど)や特定用途の専用コンピュータなどでは、OSなどのシステム系のソフトウェアとアプリケーションソフトの区別や境目が明確でない場合もある。
プログラム ⭐⭐⭐
予定(表)、計画(表)、課程、式次第などの意味を持つ英単語。ITの分野では、コンピュータに行わせる処理を記述したコンピュータプログラムのことを略して単にプログラムということが多い。
コンピュータプログラム (computer program)
コンピュータが行うべき処理を順序立てて記述したもの。広義の「ソフトウェア」の一部であるが、実用上はプログラムとソフトウェアはほとんど同義のように扱われることが多い。
現代のコンピュータではプログラムは一定の形式に従ってデータとして表現され、記憶装置(メインメモリ)に格納される。実行時にはCPU(中央処理装置)がプログラムに記述された命令を順番に読み出して解釈・実行していく。
プログラムを作成する作業や工程を「プログラミング」(programming)、これを行う人や職種のことを「プログラマ」(programmer)という。人間がプログラムを記述する際には、人間が理解しやすい人工言語である「プログラミング言語」(programming language)を使うことが多い。プログラミング言語で記述されたプログラムを「ソースコード」(source code)という。
ソースコードはコンピュータが解釈・実行することができないため、コンパイラなどの変換ソフトによってコンピュータが解釈・実行できる機械語(マシン語)などで構成された「オブジェクトコード」(object code)に変換されてから実行される。スクリプト言語のように、この変換処理を開発時には行わず、実行時にインタプリタなどのソフトウェアによって動的に行う場合もある。