バッファ操作
デバイスドライバ = デバイス処理
2つのデバイスがある
キャラクタデバイス 1文字1文字処理するのに適している
ブロックデバイス 大量データ転送に向いている
テーブルがあって、ブロックデバイス用とキャラクタデバイス用がある(どちらも配列)
○○devswという配列がそれ。
- P366が構造体
- P377が関数
今回やるのはキャラクタデバイスのほう。
LP11がキャラクタデバイスドライバの一例。
1文字ずつ処理するとか言いつつ、バッファからは使いたい分だけ取り出す。
getcで1文字ずつ取り出し、putcで最後尾に1文字追加する。
割り込み=カーネルは別の作業をやっているので、作業完了まで待っていられない。
印字をするときは、他の文字を組み合わせて印字するときがある。 ボールドも、文字を重ねがけしている。
struct lp11で、現在の印字位置、紙送りした回数などをカーネルで保持している。
lp11を使うためにlpopen関数を使う。
PDPシリーズは8進数が基準
- PDP-1 18bit
- PDP-5 12bit
- PDP-6 36bit
PDP-11 16bit
8進数=3bit
- 16進数=4bit
(区切りがよくなるようなbit数を採用している)
キャラクタデバイスドライバ
キャラクタデバイスとブロックデバイスの違い(P208)
- ブロックデバイス ランダムアクセス、ブロック、高速
- キャラクタデバイス シーケンシャルアクセス、1バイト、低速
devswitchテーブル
構造体
cblockのinfoは6文字なの
まとめ
キャラクタデバイス→カーネルの中のバッファプール