OSに関する世界観です。
OSが開発される以前の昔のバッチ処理のコンピュータでは、オペレータと呼ばれる専門の技師が紙カードやテープなどに書かれたプログラムを適切に読み取り、コンピュータを適切に操作して実行・管理していた。
だが、コンピュータ技術が向上し、リソースにも余裕がでてくると、こうしたオペレータの役割をソフトウェアにさせることで自動化させることができるようになった。これをオペレーティングシステム(OS)と言う。
また、ビジネス的な観点から考えると、それぞれの処理専用のコンピュータを作らなくても、汎用的なコンピュータを作ってその上でOSを乗せることで、さまざまなプログラムをOSの上で実行することができるようになった。これにより、コスト削減と利益の向上に繋がった。
Linux歴史や古いコンピュータ(1.メインフレーム・ミニコン)も参照のこと。
カーネルはOSの中の中核機能であり、アプリケーションとハードウェアとの間に介入することで、プロセス管理、メモリ管理、ファイルシステム、ネットワークなどの機能を提供する。
モノリシックカーネルでは、単一のプログラムがカーネルの機能を提供するが、マイクロカーネルでは、カーネルの機能を複数のサーバーに分けて、カーネルは最低限の機能だけを提供するマイクロカーネルとし、カーネルやサーバと通信することでアプリケーションにさまざまな機能を提供する。
現在のUNIX系OSでは、カーネルはモノリシックカーネルをベースとしてモジュールローディング機能を加えたものが一般的である。
後日注記:Linuxカーネルをモノリシックであることを理由に「時代遅れだ」と批判する人も居るが、これは当たらない。歴史上の多くのUNIXカーネルはモノリシックであり、Linuxも同様にモノリシックである。確かに、OSの研究では多くがマイクロカーネルに研究が移っているが、それでも現実的な処理速度や安定性を考えて、モノリシックカーネルは一般的な悪くない設計である。
Linuxカーネルも参照のこと。
OSの基本的な役割には以下のようなものがある。
WindowsがIntel互換のCPUを用いたシステムであれば、東芝のDynabookでもSONYのVAIOでも動くように、ソフトウェアとハードウェアの間に入って、ハードウェアの差異を吸収し、OSレベルでハードウェアを抽象化し、ソフトウェアに対して共通のインターフェースを提供することで、同じプログラムをさまざまなハードウェアで動かすことができる。
これはIntelのPC/AT互換機でしか動かないWindowsでは、あまり恩恵を受けられないかもしれない。だが、Linuxや*BSDのようにカーネルやlibc/コンパイラなどのレベルでさまざまなアーキテクチャに対応している移植性の高いUNIXでは、C言語で書かれた同じプログラムが、再コンパイルすることで、x86_64のアーキテクチャでも、PowerPCやARMのアーキテクチャでも、同じプログラムを動作させることができる。
また、カーネルやC言語のレベルでは、ハードウェアに近いそれぞれのアーキテクチャの機械語のバイナリが動作するため、別のアーキテクチャで動作させるには再コンパイルが必要だが、Javaのようなミドルウェアを間に挟むことで、再コンパイルをしなくても別のアーキテクチャに対応することができる。
移植性も参照のこと。
UNIXやWindowsなどのマルチタスクのOSでは、
機構 | 説明 |
---|---|
スケジューラ機構 コンテキスト切り替え | 複数のプログラムの命令をとても少ない間隔で交互に動作させることで、複数のプログラムを実行させる。 CPUのレジスタ情報を退避させ、短い間隔で停止・再開させ続ける |
仮想アドレス機構 | 複数のプログラムのメモリを、実アドレス空間ではなく仮想アドレス空間を与え、 メモリとプログラムの間にカーネルが入って領域を管理することで、別々のメモリ領域をそれぞれのプログラムに安全に与える |
を使うことで、複数のプログラムを同時に実行させることができる。これを「タイムシェアリングシステム」と呼ぶ。
また、特にUNIXのようなOSでは、複数の端末からひとつのコンピュータのリソースを安全に共有する技術が長けている。これをマルチユーザーと呼ぶが、こうしたシステムはネットワークと親和性が高く、ネットワークを通じて同じユーザー情報を共有したり、ファイルシステムをネットワークで共有したりすることができる。
Linuxカーネル(プロセス)やLinuxカーネル(メモリ管理)も参照のこと。
現代的なOSでは、ネットワークやファイルシステムの機能は欠かせないが、こうした機能を簡単なインターフェースからアクセスできるようにする。これは、UNIXではCライブラリやカーネルのシステムコールを使って行う。
ファイルシステムは、ファイルやディレクトリといったツリー構造の外部記憶へのデータの取得・格納機構で、ストレージデバイスとともに使用する。WindowsではFATやNTFS、Linuxではext4やXFSのような複数のファイルシステムを使うことができる。ネットワークはソケットと呼ばれるインターフェースを用いてTCP/IPなどの複雑な機構を簡単なものに抽象化できる。
ネットワークやファイルシステムのデータ資源は、IT用語では「リソース」と呼ばれる。こうしたリソースへのアクセス手段について、OSは共通で一般的な同じインターフェースを提供する。同じOSだけではなく抽象化されているため、WindowsとLinuxは互いにソケットで通信することができる。
Linuxカーネル(ファイルシステム)やLinuxカーネル(ソケット)も参照のこと。
また、CUIのOSではコマンドラインシェルによって、コマンドで操作するユーザーインターフェースを提供する。
また、MacやWindowsのようなGUIのOSでは、マウスのようなポインティングデバイスを使った、ウィンドウ、メニュー、ボタン、アイコンのような「視覚的に分かりやすい外見」による、直感的な操作を可能とする。
LinuxなどのX Window Systemを用いたGUIでは、ツールキット(ボタン・メニューなどのGUI部品集ライブラリ)がGTK+やQtを選べるほか、さまざまなデスクトップ環境やウィンドウマネージャが開発されており、こうした外見をカスタマイズして、さまざまなルック・フィールを使うことができる。
X11も参照のこと。
サーバーやデータベースにおいては、効率的にプログラムを実行することで、スループレット(性能)を向上させる。
OSには以下のようなものがある。
Microsoftによる商用のOS。DOSから進化したパソコン用のOSで、IBM PC/AT互換機とIntel CPUで動作する。現代のIT社会で広く標準的に使われている。標準的になった理由は、Windows 95のインターフェースがウィンドウ描画として革命的であったことや、OfficeやIEのようなアプリケーション・ソフトウェアが長らく標準的な地位を占めていたこと。オープンソースではないがIBM PC/AT仕様が標準化されているため、同じIBM PC/AT互換機であれば、ドライバなどがあればどの機種でも動作する。
実際のところMacやLinuxに比べて特別優れているわけではないが、ビルゲイツが言うようにソフトウェアは「勝者が総取り」であり、90%以上のシェアを占めるため、「他のOSの存在を忘れてしまう」ような普及状況になっている。
1995~2000年に販売されたWindows 9xシリーズは、不安定かつフリーズしやすいとして不評だったが、それでもIBM PC/AT互換機のパソコンでGUIが使えることは画期的であり、多くのユーザーが不安定ながらも楽しんでWindowsを使った。そして設計と実装を書き直したWindows NTが開発され、Windows 2000やXPのような「IT黄金期」の時代を支えた。Windows NTは安定性が飛躍的に向上し、ほとんどフリーズしなくなった。まさに、金の力は恐ろしいものである。また、Vista以降では.NET FrameworkというJavaと同様の仮想マシン機構を大々的に使うことになり、ほとんどフリーズや強制終了がなくなった。
LinuxでもGUI環境が整いだした最近でも、Windowsが多くの場合使われるのは、LinuxのGUIの方が不具合やバグが多い、それは致命的なフリーズを起こすものでなくても、ユーザーが実際に使用する場面を良く考えていないから起きる不具合が多く、またボランティアによるオープンソース開発にはフォントが少ないとか翻訳の質が悪いなどの限界があり、今でもWindowsが多くの場合使われている。
また、最近ではWSLという機能があり、WindowsでもLinuxと同等のUNIX APIを使うことができる。また新しいバージョンのWSL 2ではLinuxカーネルをそのままWindowsと共存させられる。このため、「WindowsでしかWindowsアプリケーションは動作しない」と今まで言われていたが、「UNIXアプリケーションもWindowsから利用できる」ようになってきている。ただしオーバーヘッドなどの問題もあるほか、DockerなどのコンテナアプリケーションがLinuxの上でのLinuxしか動作できないため、完全にLinuxの分野を食いつぶすほどには至っていない。
Windows/PCを参照のこと。
Appleによる商用のOS。アラン・ケイのダイナブック構想をApple社のスティーブ・ジョブズが見学して作られた、GUIのウィンドウ操作としてはオリジナル的な存在。標準化はされておらず、Apple社独自のハードウェアでしか動作しないが、UNIXをベースとしており、UNIXアプリケーションを動かすことができる。デザインなどの分野で良く使われている。
Macには「デザイン哲学」のようなものがあり、先進性が高いが、「使いやすさよりも目新しさを重視する」というところがある。また、高スペックかつ高価で、多くのユーザーにとってみればコストパフォーマンスが悪い。だがデザイナーやiOSなどのモバイル系のプログラマには良く使われている。特にNeXTSTEPの技術をベースに開発されたMac OS X以降のMac(最近ではmacOSという名称になった)はプログラミング的にとても優れていて、Swiftのような新しいプログラミング言語を使うこともできる。またHTMLレンダリングエンジンのWebKitはAppleによってKDEのKHTMLをベースに開発され、Google Chromeなどでも同様の技術(WebKitからGoogleが派生したBlink)が採用されている。
Macを参照のこと。
今ではもう化石のようなOSだが、昔のワークステーションと呼ばれる少し高価なコンピュータで動作するOSで、コマンドから操作し、たくさんの端末からひとつのワークステーションにログインして使用する。ネットワーク機能が優れていることで有名。
昔のOSだがコマンドラインでネットワークから操作するような用途に長けており、viやEmacsのような一部の神格化されたアプリケーションがあるなど、多くの意味でWindowsなどと今でも競い合っている。商用UNIXとしてはSolarisなどがあるほか、UNIX互換OSにはLinuxやFreeBSDがあり、今では「UNIX=Linux」のような人間が増えている。
UNIXはOSとしての設計がシンプルであるほか、早くからタイムシェアリングシステムやネットワークを想定して設計・実装されているため、安定性や信頼性に優れており、この安定性はLinuxにも大きく引き継がれている。LinuxやFreeBSDは、Windows 9xに比べてフリーズせずきちんと動く。だが、NTカーネルや.NETなどの新技術を頑張って作るMicrosoftの努力により、今ではWindows 7や10もかなり安定性が上がった。だがWindows Vistaや8にもあるように、Windowsはたまに期待外れのバージョンをリリースする。UNIXやLinuxは古くから変わらない化石のような技術を使っていることもあり、多くのUNIXが安定したOSとして提供されている。
UNIXを参照のこと。
UNIX互換のOSで、UNIXをIntelのパソコンでも使用できるということで1990年代に人気を集めた。オープンソースのOSであり、OSの仕組みを自分で研究したり、改造したりすることができる。専門の高度な知識があるシステム管理者向けに、サーバーやモバイルなど高性能・高信頼性や省力化が必要な部分で今でも使われている。
Linuxはインターネットのみんなで作った楽しいOSであり、その開発手法が「バザール開発」と言って有名になったが、そもそもは「フリーソフトウェアのOSを作る」というGNUのストールマンの活動と成果がベースになっており、Linuxカーネルだけではなく、コンパイラ、サーバーソフトウェア、プログラミング言語、データベース、そしてウィンドウシステムやデスクトップ環境に至るまで、ほとんど全てのものがオープンソースかつ無料でフリーソフトウェアとして手に入る。そのため、インターネットインフラ的なハッカー的プログラマに好まれる。Dockerやgitのような一部の技術はどのシステムよりも最新のものであり、MicrosoftもクラウドでのLinux OSの利用やgithubを買収するなど、今ではMicrosoftもLinuxに対して多くのコミットメント(貢献)を行っている。
Linuxの弱点はアプリケーションの質が低いこと。Microsoft Officeの代替となるLibreOfficeや、Adobe Photoshop/Illustratorの代替となるGIMP/Inkscapeなどは、まだまだ進歩の途上であり、まともに使うことができない。また商用ソフトウェアはほとんどがWindows/Mac向けに作られていることが多く、Linuxではメーカーから提供されるドライバやファームウェアもないことがあり、プリンターなどの用途ではLinuxから印刷ができないことが多い。またLinuxの過去のバージョン全てをサポートすることは現実的ではなく、昔のRed Hat Linuxなどを使って作られたシステムは、Windows XPなどと同様サポートされなくなってセキュリティホールを生み出す。多くのLinuxは最新版とその以前のバージョンぐらいしかサポートしていない。このため、標準的なWindowsを使わざるを得ない。
ただし、一部のデスクトップアプリケーションはWindowsのものよりも無料で品質が高いことも少なくない。FedoraやUbuntuを個人の趣味や遊びで使う用途では多くのソフトウェアがオープンソースかつ無料で試すことができ、開発にも簡単に参加できる。あるいはシステム管理のための用途として、特にサーバー管理者にとってはUNIX互換のツールや最先端の開発環境が手に入るため、一般的サーバーのシステム構築のために使いやすいシステムである。まさに、エンジニアを目指すなら一度は学びたいOSである。
後日注記:Intel CPUは32bit~64bitになり、一昔のHPやSunのワークステーションよりも優れたマシン環境になっている。この環境にLinuxを足すことで、いっぱしのワークステーションとして使うことができる。そのため、LinuxやFreeBSDなどのIntel PC向けUNIX互換OSは、90年代末頃の時代に流行した。当時はUNIXと同じようにオープンソースでソースコードが公開された、「フィンランド人のリーナスという学生が作った無料のOS」として有名だった。
Linuxを参照のこと。
UNIXの直接の流れをくむBSDと呼ばれるOSを、PC環境で使えるようにしたもの。FreeBSDの他、NetBSDやOpenBSDといった兄弟たちが居る。Linuxと同様にオープンソースであり、Linuxと遜色のない機能を持っている。
後日注記:PCで使えるワークステーションとしては昔からLinuxと同じくFreeBSDも良く使われており、大学のUNIXワークステーションなどでは多くがFreeBSDを採用していた。ただしLinuxの現れた時代にはさまざまな著作権などの問題があって、PC向けのBSDは長い間提供ができなくなっていた。
FreeBSDを参照のこと。
Googleによるモバイル用のOS・ミドルウェアシステムで、Linuxカーネルをベースにしている。スマホのような小さな画面でも使えるようにインターフェースが工夫されており、タッチパネルディスプレイでタップすることで操作を行う。
Androidを参照のこと。
IBMのワークステーションで動作するエンタープライズのOS。会社のシステムや信頼性が必要なインフラ基盤やデータベースで使われている。
メインフレームを参照のこと。
UNIXを生んだベル研究所による、UNIXのファイル指向をさらに進めた研究用の分散OS。
Plan 9を参照のこと。
100%アセンブリ言語で書かれたPC用のOS。