2016-04-27 6 views
0

私がオンラインで見つけたほとんどすべての資料は、TananbaumのOSの本の下のコードを参照していました。しかし、なぜこれが最初の文字の代わりに文字列全体を印刷するのか、私は本当に理解していません。割り込み駆動型IOで文字列を印刷する理由は、最初の文字だけをコピーする必要がありますか?

割り込みは再帰的に生成されるためですか?しかし、それは多くのリソースを必要としませんか?それとも私は何かが恋しい?

私は本当に混乱しています。どんな助けもありがとう。印刷システムコールが行われたときに実行


コード:

copy_from_user (buffer, p, count); 
enable_interrupts(); 
while (*printer_status_reg !=READY); 
*printer_data_register = p[0]; 
scheduler(); 

割り込みハンドラは:

if (count == 0) { 
    unblock_user(); 
} else { 
    *printer_data_register = p[i]; 
    count = count – 1; 
    i++; 
} 
acknowledge_interrupt(); 
return_from_interrupt(); 
+1

まだデータを転送していない場合、txレジスタに最初のバイトを明示的にロードすることによって、送信割り込みを「プライマリ」にする必要があります。そうしないと、配列の残りの部分を送るために 'tx register empty'割り込みはありません。 –

答えて

1

あなたは、バッファの最初の文字を書いて、送信を開始します。 送信が完了すると、Tx_Complete割り込みが発生します。

これで、転送するバイトがさらにあるかどうかを確認します(else部分)。使用可能な場合、送信レジスタに次のバイトを追加し、送信するバイト数をデクリメントしてバッファインデックスをインクリメントします。

このプロセスは続行します。送信するバイト数がゼロになると、次の転送を開始せずに割り込みを停止します。

最初のバイトを転送するとプロセスが開始され、残りのバイトは割り込みハンドラによって転送されます。 countが正しいことを確認する必要があります。 カウントがそれほど大きくない場合、何が起こるかを推測することができます。

関連する問題