オペレーティングシステム
2003年にはパソコンにも64ビット時代が到来し、オペレーティングシステムも64ビット化が進んだが、16ビット化や32ビット化の際と比較するとオペレーティングシステムの機能や役割に大きな変化はなかった。商用のパソコン用オペレーティングシステムのWindowsとMac OS Xのいずれもが64ビットへの移行を徐々に進めていった。Windowsは同一バージョンのオペレーティングシステムで32ビット版と64ビット版の双方を提供して、Mac OS Xは32ビットカーネルを維持したまま、一般プロセスに64ビット機能を持たせる道を選んだ。2000年代中頃まではパソコンの性能向上が著しかったため、デスクトップ用途の新しいオペレーティングシステムは同時代における高性能なパソコンを必要としていたが、2006年を境にしてCPUの性能向上の限界が顕著に現れ始めると、高効率化を目指した開発にシフト。Windows Vista・Windows 7やmacOSなどの新しいオペレーティングシステムにおいて、高機能のマルチコアCPUやプログラマブルシェーダを搭載したビデオチップへの対応が進められた。
オペレーティングシステムは通常、ユーザーやアプリケーションプログラムとハードウェアの中間に位置し、ユーザーやアプリケーションプログラムに対して標準的なインタフェースを提供すると同時に、ハードウェアなどの各リソースに対して効率的な管理を行う。現代のOSの主な機能は、ファイルシステムなどの補助記憶装置管理、仮想記憶などのメモリ管理、マルチタスクなどのプロセス管理、更にはGUIなどのユーザインタフェース、TCP/IPなどのネットワーク、などがある。パーソナルコンピュータからスーパーコンピュータまでの各種のコンピュータや、スマートフォンやゲーム機などを含む各種の組み込みシステムで、内部的に使用されている。
商品として(ないし製品として)のOSには、デスクトップ環境やウィンドウシステムなど、あるいはデータベース管理システム (DBMS) などのミドルウェア、ファイル管理ソフトウェアやエディタや各種設定ツールなどのユーティリティ、ウェブブラウザや時計などのアクセサリが、マーケティング上の理由などから一緒に含められていることもある。
なお、1980年代の別の特筆すべき流れとして、GUIを標準装備したApple Computer(現:Apple)のMacintoshがある。Macintoshのオペレーティングシステム (Mac OS) は、当時の性能的制約から、多くの部分がファームウェアの状態でハードウェアに組み込まれてはいたが、現在でいうウィジェット・ツールキットを含むToolboxと呼ばれるAPI群を持ち、アプリケーションにおけるGUIのデザイン開発をある程度まで標準化した。
マイクロプロセッサの高性能化と低価格化が進むと、業務用途のシステムでは、高機能な端末を大量に用意することが可能になり、UNIXをベースとしたクライアントサーバモデルが普及した。クライアント機であるワークステーションのオペレーティングシステムとしてSunOS、IBM AIX、IRIXなどのUnix系オペレーティングシステムが用いられた。この時期には肥大化したUNIXの再設計の機運が高まり、マイクロカーネルという新しい設計手法が生まれ、成果としてMachなどのカーネルが作られた。しかし、UNIXの権利を持つAT&Tがライセンスに厳しい条件をつけるようになり、UNIXを自由に改変したり、改変した機能を外部に公開することができなくなった。このため、オープンシステムとしてのUNIXのオープンな文化は一時衰退に追い込まれた。さらにUNIXの標準規格を巡ってUNIX戦争が勃発し、UNIX市場は大きなダメージを受けた。
1980年代後半には、パソコンにも32ビット時代が到来し、1990年代に入ると、低価格なAT互換機でもメモリを十分に搭載すればPC-UNIXの利用が可能になりはじめた。当時のパソコンでは、オペレーティングシステムとして最低限の機能しか持たないDOSが依然として使われており、GUIやネットワーク、マルチメディアに対応させるため、ベンダがDOSを様々な形で拡張したシステムソフトウェアや、ウィンドウシステムを搭載するようにもなったが、これは互換性や信頼性など様々な点で問題を発生させていた。こうした問題を解決するため、堅牢な(プリエンプティブな)マルチタスク機能、高度なネットワーク機能など、従来のUNIX(互換)ワークステーション並みの機能がパソコンにも求められるようになってきた。さらに、肥大化したソフトウェア開発の効率を改善するためにオブジェクト指向APIを導入し、Macintoshのように標準化されたGUIを備えることも求められた。これらの機能を備えたオペレーティングシステムは「次世代オペレーティングシステム」、「モダン・オペレーティングシステム」などと呼ばれた。
1987年にはIBMとマイクロソフトが、パーソナルコンピュータ用に堅牢なマルチタスク機能・GUI(同年末の1.1より)・ネットワーク機能(拡張版)を装備したOS/2を発表した。
一方、ABIはコンパイルされたソフトウェアがオペレーティングシステムの機能を呼び出す際のインタフェースであり、プロセスが動作する際の規則を構成する。例えば、Unix系のオペレーティングシステムはAPIがほとんど共通だが、ABIはオペレーティングシステムによって異なる。したがって、同じCPUを使ったシステムであっても、ABIが異なれば実行ファイルが異なる。ABIには、呼出規約、システムコールの方法などが含まれる。
なお、オペレーティングシステムの垣根を越えたABIもいくつか存在する。例えば、OCMP (Open Computing Environment for MIPS Platform) というMIPS系チップを使用したUNIX機によるバイナリ共通インタフェースが日本電気やソニー、住友電気工業、日本タンデムコンピューターズなどにより定義され、その定義に沿ったUNIXオペレーティングシステムが複数販売された。
1988年に登場したNEXTSTEPは、業務用途に耐える堅牢性・全面的なオブジェクト指向導入による柔軟性・高度なグラフィック機能・一貫したGUIといった、新世代のデスクトップオペレーティングシステムで求められる機能を全て実現した。しかしこれらは当時のハードウェア性能では負荷が大きかったため広くは普及せず、代わりに、軽量だが堅牢なメモリ管理やマルチタスク機能は持たないMac OSや、Windows 3.x などのGUI環境が徐々に普及していった。これらは当時の限られたハードウェアでも快適に動作したが、安定性や機能では劣っていた。
UNIX(互換)系オペレーティングシステムの流れでは、UNIXの権利を持つAT&T(1992年からはノベル)がソースコードの自由な改変を禁じていたことから、オープンソースのUNIX互換オペレーティングシステムが開発されはじめる。1990年にHurdの開発が開始され、1991年に、Linuxがフリーソフトウェアとして公開された。マイクロカーネルなどの新しい設計手法を採用し、トレンドに合わせたびたび設計が変更されたHurdの開発が停滞する一方、Linuxは保守的な設計とバザール方式という不特定多数の担い手による開発手法を採用し、迅速な開発が進められ、PC-UNIXのデファクトスタンダードとなった。ただしLinuxはオペレーティングシステムの心臓部であるカーネルのみのため、カーネル以外のオペレーティングシステムを構成するソフトウェアを揃えて自ら環境を整える必要があり、初期段階においては技術者などのごく一部の人たちにのみ使われていた。
これは、リソースへのアクセス要求を監視し記録するものである(「このファイルは誰が読もうとしたか?」など)。プログラムが何らかのリソースを要求すれば割り込みによってカーネルに制御が渡るので、そこでセキュリティの確認が可能である。プログラムがハードウェアやリソースに直接アクセスできる場合、セキュリティは確保されない。
何者かがコンソールやネットワーク接続経由でログインしようとする際にもセキュリティの確保が必要である。このような要求は一般にデバイスドライバ経由でカーネルに渡され、それから必要ならアプリケーションに渡される。ログインにまつわるセキュリティは、企業や軍などで機密情報を保持しているコンピュータでは長年の課題だった。アメリカ国防総省 (DoD) はセキュリティ評価に関する基本要件を定めた標準 Trusted Computer System Evaluation Criteria (TCSEC) を策定した。TCSECはセキュリティを要求されるシステムの調達条件とされるようになったため、オペレーティングシステムのメーカーはこれを重視するようになった。
パーキンソンの法則によると、「メモリを拡張するとプログラムはそれに伴って拡大する」という。プログラマーは無限の容量と無限の速度のメモリを理想としている。コンピュータのメモリは階層構造になっていて、最も高速なレジスタから、キャッシュメモリ、RAM、最も低速なディスク装置がある。オペレーティングシステム内のメモリ管理部はこのようなメモリを管理するもので、利用可能な部分、割り当てと解放、主記憶と二次記憶との間でのスワップなどを制御する。
マルチプログラミング・オペレーティングシステムのカーネルはプログラムが使用中の全システムメモリの管理責任を負っている。それによってあるプログラムが既に別のプログラムが使用しているメモリを誤って使用しないようにしている。プログラム群は時分割で動作するので、それぞれのプログラムの独立したメモリアクセスが可能となっている。
協調的メモリ管理は初期のオペレーティングシステムでよく使われた方式で、全プログラムが自発的にカーネルのメモリ管理機構を使い、割り当てられたメモリをはみ出さないように動作することを前提としている。プログラムにはバグがつきもので、そのために割り当てられたメモリからはみ出すこともあるため、このようなメモリ管理は今では見られない。プログラムが異常動作すると、他のプログラムが使用中のメモリを書き換えることもあった。悪意あるプログラムやウイルスが意図的に他のプログラムのメモリを書き換えたり、オペレーティングシステム自体の動作を妨げたりすることも可能である。
オペレーティングシステムを将来にわたってあらゆるハードウェアを制御できるように設計するのは困難である。従って、個別のハードウェアの制御をオペレーティングシステムから切り離す必要がある。デバイスドライバはオペレーティングシステムとのインタフェース(関数呼び出し)をデバイス固有の処理に変換することが主たる機能となる。理論的には、新たな制御方法の新しいハードウェアが登場しても、そのハードウェア用のドライバが古いオペレーティングシステムに対応していれば、古いオペレーティングシステムでもドライバだけ置き換えればハードウェアを制御可能となる。
Vista以前のWindowsやバージョン2.6より以前のLinuxカーネルでは、ドライバ実行は協調的だった。すなわち、あるドライバが無限ループに陥ると、システム全体がフリーズした。その後のバージョンではプリエンプションが可能となり、カーネルがドライバを中断させることができるようになった。
2000年代末以降、パーソナルコンピュータ市場が成熟化する一方で、スマートフォンやタブレットに代表される、デスクトップ・オペレーティングシステムから派生した組み込みプラットフォームが普及し、モバイルコンピューティングが一般化した。
これらはカメラ、GPS、加速度センサー、ジャイロスコープ、無線LAN、Bluetooth、狭い画面に最適化されたタッチパネルなどのインタフェースを組み込み、携帯機器の低消費電力の要求に応えたiOS、Androidなどのモバイルプラットフォームを採用している。