#2 Article 611 Posted at 1991/02/07 00:53:03 by W.M. (MAP009) [SYSTEM]
Subject: Re:*6 システムに関してみなさまへのお願い☆ /610 ... /598 /597
MAP641 の、あかねちゃんさんのアーティクルについての補足説明の続き
です。このアーティクルは、プログラム上の問題についての説明ですので、
C言語等に興味のない方はスキップしてください。
Mapletown Network のホストプログラムでの疑似マルチタスク処理につい
てです。
> メモリマップ上に回線1・2・3・4・コンソールそれぞれ用のバッファを取り、
> それらの回線を順番に処理していくのですが、この時、アクティブな変数をすべて
> いったんバッファに格納し、そのアクティブな変数に次の回線のバッファから必要な
> 変数をすべて読みとって処理し、それをバッファに格納し、次の回線用のバッファ
> から変数を読みとって、・・・・とこれを繰り返していきます☆
と、あかねちゃんさんは説明されていますが、実際にはすべての変数をバッ
ファに格納したり、そこから取り出したりはしていません。変数の入ってい
る領域を指しているポインタなど、合計数十バイト程度のデータのみを切り
換えております(これについてはおもに C言語の関数 setjmp() と longjmp()
およびレジスタへの直接代入で実現しております)。
さて、この処理にかかる時間ですが、実は案外と効率がよく、ディスクへ
の読み書き等の時間がまったくないとしても、通信処理の 2 ~ 3% 程度しか
消費していません。つまり、もしタスク切り替えの時間がまったくなくなっ
たとしても、現在のスピードから 3% も速くならないというわけです。
では、どうしてこのホストプログラムが重いのかというのが問題になるわ
けですが、それについては次の機会にしたいと思います(と言って逃げます)。
Mapletown Network 下請けプログラマの
MAP009 / W.M. (ダブレムと発音してください)