OSがデバイスを「多重化」する
OSがアプリケーションに対して提供するデバイスの機能にはもうひとつ、「多重化」がある。「仮想化」と表現する場合もあるが、別の用語と混同する可能性があるので、ここでは多重化と表現する。
プリンターのように大量のデータを受信して、動作に時間がかかるデバイスの場合でも、アプリケーションはいつでも印刷を開始できるし、自分の処理(印刷するデータの送出)が終われば、実際に印刷が終わったかどうかに関係なく、アプリケーション自体は終了できる。
2つのアプリケーションが同時に印刷を始めても、そのページ内容が混ざってしまうことはなく、それぞれがきちんと印刷される。複数ページの印刷でも、ひとつのプログラムからの複数ページの印刷が終わってから、別のアプリケーションの印刷が始まり、2つのアプリケーションからのページが交互に印刷されることもない。
OSはデバイスを抽象化するが、個々のアプリケーションごとに、デバイスの操作を区別して管理している。ここではアプリケーションと表現したが、同じアプリケーションが2つ同時に起動していても、それぞれは区別される。だからメモ帳のウインドウが2つあっても、それぞれの印刷はやはり個別にちゃんと区別される。
これにより、それぞれのアプリケーションは自分だけがプリンターを使っているように振る舞うことができる。またアプリケーションを作るときにも、他のプログラムが印刷していることを考慮する必要はまったくない。
複数のアプリケーションによる要求を同時に動作させることが困難なプリンターのような機器では、ひとまとまりの印刷処理が終わるまで、OSが内部的に別のアプリケーションの印刷を待たせているのである。一方で、アプリケーションに対しては印刷を待たせていないように見せているため、アプリケーションは何も考えることなく、印刷処理を続けられるわけだ(図5)。
プリンターのように、アプリケーション側からの書き込み(出力)があるものは、このようにアプリケーションごとに出力を正しく管理しないと、データが混ざってしまう。
逆にファイルでは、複数のアプリケーションが同時にひとつのファイルへ書き込むことは「禁止」される。プリンターは、コンピューターからみると書き込むだけなので、印刷が終わってしまえば、送ったデータはどうなってしまってもかまわない。
しかし、書き込んだファイルは読み出す可能性があるわけで、書き込んだとおりに正しく読み出せなければならない。そのため「多重化」は行なわず、ひとつのアプリケーションがある特定のファイルを利用している間は、他のアプリケーションが書き込みできないように、OSがこれを保護する。このような動作を一般的に「ロック」という。
OSはこのようにして、アプリケーションとデバイスの関連性を断ち切るような働きをする。それは、どのようなデバイスが装着されているのかを考慮することなくアプリケーションを開発できるようにするためだ。では、どのようにOSはデバイスを扱うのか、それについては次回解説することにする。
この連載の記事
-
第13回
PC
ARM版Windows 8実現の布石となったWindows 7の「MinWin」 -
第12回
PC
アプリがWindowsの機能を使うには? APIとDLLの仕組み -
第11回
PC
マルチコアCPUの消費電力はスケジューリングで変わる? -
第10回
PC
AMD FX向けにパッチで修正 スケジューラーが抱える難題 -
第9回
PC
マルチコアCPUを賢く使いこなす スケジューリングの秘密 -
第8回
PC
意味の違いがわかる? タスクとプロセスとスレッド -
第7回
PC
Windowsのメモリー管理をx86の仕組みから読み解く -
第6回
PC
メモリー不足を根本的に解決する64bit OSの仕組み -
第5回
PC
Windows 8でMetro Styleアプリを動かす「WinRT」 -
第4回
PC
Windowsを動かすデバイスドライバーの仕組み 前編 - この連載の一覧へ