プリントサーバ小史

プリントサーバ小史 A Brief History of Print Servers
米谷共比古([email protected])
http://www.itconsult.co.jp
0.はじめに
かれこれ 40 年も IT の現場に関わっていると,同じ用語の意味内容あるいは実装方法の
変化に気付かず,先入観念に囚われて勘違いをすることがある.拙論は,その例として,
筆者の実体験に基づき,Print Server の“変遷”をたどる.
なお,拙論では,その仕組みにのみ焦点を絞り,具体的な設定方法には触れない.
1.
[前史]Main Frame の時代-Print Server の原点
Main Frame OS の代表として,IBM System 360 に搭載された OS(バリエーションが
いくつかあるので,総称として OS/360 を使う)を採り上げる.筆者自身の IT キャリアは,
その前身の DOS/360 に始まるので,おぼろげな記憶を辿ると・・・
40 年前のコンピュータは,バッチ処理が主体で,入力は紙のパンチカードか磁気テープ
(MT),出力はプリンタか MT を使用するのがほとんどであった-磁気ディスク(磁気ドラム
も含めて,Direct Access Storage Device-DASD と総称された)は超高価であるため,プロ
グラム(それも,実行用のバイナリコードのみ)の格納にしか使われなかったのである.
DOS/360 では,3 個の JOB 実行区画が使用可能=最大 3 つまでの JOB の並行処理が可
能(ついでに,各 JOB 内での Multi-Tasking も可能-ただし,アセンブラ言語で OS のマ
クロ(system call)を駆使する必要がある)だった.MT ドライブは複数あったので,並行
JOB に別々の MT ドライブを割り当てることができる.しかし,プリンタは図体がでかい
うえに高価なので,1 台しかない.そのままでは,印刷出力を伴う JOB は並行実行できな
い.さらに,印刷出力は時間がかかる(I/O time>> CPU time)ため,印刷出力の終了まで
当該 JOB が区画を占有するのはもったいない.そこで,各 JOB からの印刷出力を一時的
に MT に書き出し,印刷専用に割り当てた JOB 区画でそれらの MT から順次プリンタに吐
き出すという裏ワザが使われていた.こうすれば,JOB(n)―処理自体は完了している―の
印刷出力と並行して,
JOB(n)が動作していた区画で JOB(n+1)を実行させることができる.
任意の部分を再印刷するにも,
アプリケーション JOB を再実行させる必要はない.
同様に,
紙カードにパンチされた入力データも MT に一時的に格納された.
区画1
CARD
CARD
図 1
読込み
SPOOL
INPUT
INPUT
DATA
DATA
区画2
処理
SPOOL
OUPUT
OUPUT
DATA
DATA
区画3
印刷
DOS/360 での典型的なバッチデータ処理(各区画は並行処理可能)
1
印刷出力
印刷出力
この入出力データ格納専用の MT は,その形状・動作から spool(糸巻き)と呼ばれた-
本物の spool は,富岡製糸場で実演付で見学することができる[現在,入出力データの一時
的溜め込み(行為,装置)を spool と呼ぶのは,これが起源らしい-spool は Simultaneous
Peripheral Operations On-Line の頭文字であるという説明は,後世のこじつけであろう]
.
各区画では,次のように処理が並行に実行される.もちろん,区画 n での JOBm の spool
が完了していなければ,区画 n+1 での JOBm の処理は開始できない:
区画1
区画2
区画3
JOB1 の入力データ Spool
JOB2 の入力データ Spool
JOB1 の実行と印刷データ Spool
JOB3 の入力データ Spool
JOB2 の実行と印刷データ Spool
JOB1 の出力印刷
JOB4 の入力データ Spool
JOB3 の実行と印刷データ Spool
JOB2 の出力印刷
JOB4 の実行と印刷データ Spool
JOB3 の出力印刷
JOB4 の出力印刷
入社して半年ほど経ったときに,OS/360 へのバージョンアップが行われた.当時の筆者
の目に映った最大の進歩は,ReaDeR/WriTeR と称された System Job の登場である.上述
の DOS/360 での処理方式と比べると,OS/360 では,パンチカード入力は RDR によって入
力キューに spool され,印刷出力は WTR によって出力キューに spool される.各アプリケ
ーション Job は,カード入力源として,物理的なカード読込装置の代わりに RDR(SYSIN)
を指定し,印刷出力先として,物理的なプリンタの代わりに WTR(SYSOUT)を指定する.
入出力 spool はともに DASD に配置されるので,カード入力時や印刷出力時の MT の掛替
え作業からは解放された.一方,アプリケーション JOB 用区画は,複数個設定できた.こ
れらの機能により,複数 JOB の並列実行が真の意味で可能になったのである.
RDR
RDR
JOB
JOB1
・・・
CARD
CARD
APP JOB
WTR
WTR
JOB
印刷出力
印刷出力
JOBn
INPUT
INPUT
SPOOL
SPOOL
図 2
OUTPUT
OUTPUT
SPOOL
SPOOL
OS/360 でのバッチデータ処理
現在の PC の入出力状況を顧みると,データ入力はパンチカードによるバッチ入力からキ
2
ーボードによる直接入力に代わったため,RDR Job の必要は元来ない.その一方,印刷出
力のニーズは相変わらず存在する.このため,WTR Job の必要性も依然として存在する-
拙論の主題である Print Server は,次の点で,WTR の直系の子孫である:

複数の異なる Application JOB の印刷出力を一手に引き受ける.

Application JOB と独立/並行に動作する.

SPOOL を持つ(ただし,この要件は後に緩和される)
.
2.
[温故]Thin Client (Client-Server ―供用) の時代
能力は Main Frame に及ばないものの,小回りが利く Mini Computer (当時の代表格
は DEC,次いで Sun が市場を席巻した)が出現し,それらを繋ぐ LAN(Ethernet)が普
及し始めると,1 台の Mini Com に接続された HDD やレーザプリンタ(当時はいずれも高
価な代物であった)を,HDD やプリンタを持たない複数の Workstation(以下,WS)で
共有する技術が開発された.この方式は,Client-Server(以下,CS)システムと呼ばれる.
当初の CS システムでは,Client も Unix 系の OS を搭載していた(したがって,PC より
も相当高価であった)
.
図 3
Client-Server System (Thin Client)
CS 方式を PC の世界に最初に持ち込んで成功したのは,Novell 社の Netware である.
Netware は,サーバ OS(独自品)と Windows に組み込むクライアント用コンポーネント
から構成される.サーバ OS は独自品であるが,ハードウェアは PC を使用する.この方式
は,個々の PC に HDD とプリンタを持たせる必要をなくしただけでなく,低コストでの情
報共有を促進したので,オフィスでの利用には歓迎された.この時代の PC は,フロッピー
ディスク・ドライブ(FDD)は必須装備であったが,HDD はまだ高嶺の花で,全ての PC に
装備することはコスト的に無理だったのである.HDD を内蔵しないクライアント機を thin
client,HDD を内蔵するクライアント機を fat client と称することがある.
次いで,Microsoft から Windows NT server(後に Windows Server 20xx)がリリース
された-クライアント PC 市場を席巻した MS がサーバ市場に進出したため,Netware は
その後,退場を余儀なくされた.筆者自身も,当初は Netware サーバの構築に携わってい
たが,すぐに Windows NT server に鞍替えした.
CS 時代のプリントサーバは,以下の意味では,OS/360 の WTR ジョブをそのまま切り
出して搭載したものと考えることができる:
3
① プリンタを占有し,プリントサービスを一般の Job/クライアントに供用する.
② Spool を持つ(プリントサーバは,通常,ファイルサーバと同一機で動作するので,大
容量 HDD を使うことができる).クライアント PC 側では,アプリケーションからサ
ーバにプリントデータを渡すだけでよく,後は全部サーバ側でやってくれる.
3.
[知新]Fat Client (Peer to Peer―共用) の時代
往年のファイルサーバ(に搭載された HDD)は,クライアント間で共有されるコンテン
ツを保持するという目的以上に,個別のクライアントにコンテナを供用するという役割を
担っていた.いわゆる Thin Client― Diskless WS―は,
“個(別に保)有”のコンテンツ
をファイルサーバに保管することで,その役割を全うできるのである(余談であるが,現
在の cloud サービスの肝は,コンテナの提供にある-コンテンツには一切関与しない)
.
さて,P C はオフィスから家庭へと普及範囲をひろげ,1 台/人から数台/人にまでその
数を増やした.この結果,部品の価格が劇的に下落し,現在の PC やタブレット/スマホで
HDD(または,その後継の SSD)などの大容量ドライブを搭載していない機種はない.CS
の用語を使えば,クライアントは全て Fat になったのである.
この事態が,プリントサーバの方式を一変させることになった.
プリントサーバは,複数のクライアントから並列的に到着する印刷要求を直列的に処理
(serialize)せざるを得ないという宿命ゆえに,spool(を収納するための大容量記憶)を必要
とすることを想起されたい.従来の C/S では,spool はファイルサーバ機-通常,プリント
サーバと同一機である-に配置された.換言すれば,ファイルサーバはプリントサーバの
必要条件であった-ファイルサーバなしではプリントサーバは立ち行かない.
ところで,プリントサーバの spool の内部では,印刷データは,各クライアントからの一
塊りの印刷要求ごとに待ち行列に保持される必要がある.ここで,発想を転換しよう―
各クライアント機側で印刷データを保持(spool)し,クライアント機からサーバのプリンタ
にネットワーク経由で直接印刷できるならば,プリントサーバは,各クライアント機から
の印刷要求だけを待ち行列に保持し,プリンタが空く都度,待ち行列の先頭にいるクライ
アント機にプリンタの使用権を割り当てるようにすればよい.原理的には,共用プリンタ
のケーブルを,
“印刷したい”と手を挙げたユーザの PC に順番に繋ぎ替える方式である.
換言すれば,各クライアント PC が
①プリンタに印刷データをネットワーク経由で直接送信する機能(デバイス・ドライバ)と,
②プリントデータを自前で spool する機能(印刷要求 JOB を早々に終了させるため)
を装備すれば,プリントサーバの役割は,印刷を要求する各クライアント PC に順番にプリ
ンタを割り当てる(=プリンタの使用許可を出す)こと―いわば交通整理―に限定され,
通行を許されたプリントデータ自体はプリントサーバ内に滞留することなく素通り(Pass
Through)してプリンタ本体に到達する.そして,現行の PC やタブレットは,上記の 2
つの機能要件を満足しているのである.実際,筆者の DeskTop 機(Windows7)のコントロー
ルパネルの“プリンタのプロパティ”の詳細設定タブには,
“印刷ドキュメントを(自前で)
4
スプールする”/“プリンタに直接印刷データを送る”を選択指定する項目がある―後者
がプリントサーバ側での spool を想定していることは言うまでもない(ローカルプリンタに
後者を指定すると,印刷が終了するまで,印刷要求 JOB は終了できない)
.
実は,クライアント PC 側での spool 機能は,既に Windows 95 から搭載されていた.下
記の記事に自前の spool 機能が使える Windows のバージョンが列挙されている:
http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=002195
図 3 と図 4 のハードディスク記号は,プリントデータ spool 用ディスクを表す.両図にお
ける spool 用ディスクの配置を比較されたい.両図とも,プリンタへの印刷データの直接の
供給源が spool であることを強調して描いてある.
図 4
Fat Client とネットワークプリンタ(Client-side Spool + Spool-less Print Server)
現在市場に出回っている“プリントサーバ内蔵プリンタ”(“ネットワークプリンタ”と
も呼ばれる)や,
“プリントサーバ BOX”
(
“Dumb プリンタ”に接続する独立アタッチメ
ント・デバイス)は,上述の構成原理(client-side spool + spool-less server)に基づいて
製作されていると考えられる.換言すれば,Fat Client の時代には,伝統的な Centronics ケ
ーブルによるにせよ USB ケーブルによるにせよ,プリンタを直接接続した PC をプリント
サーバに仕立てる必要はない~それどころか,以下のデメリットの方が大きい:

一度とはいえ,仕立てるのに手間がかかる

プリントサーバに仕立てた PC は,PC として利用しないときでも,他のクライアン
ト PC の印刷データを(spool するならまだしも)素通り (Pass Through) させるだ
けのために,常時稼働させておく必要がある.
かくして,Client-Server(Thin Client)時代のプリントサーバ(spool を持つ)は,完
全に過去の遺物と化してしまったのである.
P2P 時代のキーワードは,各 PC に固有の資源(プリンタに限らず,HDD なども)をネ
ットワーク上の他の PC(peer 対等の相棒)と共用する(share)ことである.Client/Server
という用語は,CS 時代には,役割と実体を同時に意味したが,P2P 時代には,役割だけを
意味する.共用とは,
“誰でも server/誰でも client”になれることでもある.
プリントサーバに関する限り,CS 時代は,Fat Server/Thin Client であったが,P2P
時代は,Thin Server/Fat Client になったとも言える.
2015/01/16 脱稿
5