🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.os.msdos
Article #169

Re: CPU Cache & Kermit 3.13 8 について

#169
From: IIJIMA 'Delmonta' Hiromitsu
Date: Sun, 18 Jun 2000 00:00
79 lines
4636 bytes
いいじま@東大文学部です。

	この部分は fj.comp.arch に行きましょう。

> CPU Cache & Kermit 3.13 8 について
> ちょっと古いプログラムなので、周りにわかる人がいなくて困っています。
> 
> kermit を実行すると以下のようなエラーが表示され,起動出来ません。
> kermit.exeにstringsをかけてみても,このような文字列が発見出来ないため,
> DOSがエラーを出しているものと思われます。
> ------------------------------
> C:\>kermit
> 
> Divide overflow
> 
> C:\>
> ------------------------------
> 
> 
> これについて、現在のところ,以下のことが解っています。
> CPUのキャッシュを無効にすると正常に動作する。
> ------------------------------------------------------------
> CPU Level 1 Cache: Enabled  Enabled  Disabled Disabled
> CPU Level 2 Cache: Enabled  Disabled Enabled  Disabled
>      ↓
> Kermit動作           NG        NG      NG        OK
> NG時の挙動: Devide overflow
> ------------------------------------------------------------
(略)
> 3.そもそも,原因は何なのでしょう?
> #大昔にdietしたプログラムとCPUキャッシュの問題が存在したように記憶
> #していますが,同様の理由なのでしょうか?

	プログラムは「コード」と「データ」から成りますが、通常のプログラム
	では、いったん起動したら「データ」は変化しても「コード」の部分は
	変化させない、というのが、今の時代の PC プログラミングの基本的な
	考え方です。

	ところが、おそらくこの kermit は、コードの部分を実行中に書き換える
	ということをやっていて、それが原因しょう。Diet の件は詳しくは存じ
	ません(私が Diet を使ったのは 486 になってからで、きちんと動いて
	いました)が、おそらく 486 以前の古いバージョンには、今回と同根の
	バグがあったのでしょうね。

					☆

	ご存じのように、486 以降のキャッシュを積んだマシンでは、非常に
	おおざっぱに言って、いま実行中の近辺のコードを「コードキャッシュ」
	に、最近アクセスしたデータを「データキャッシュ」に保管します。

	「実行中にコードを書き換える」ということをやると、その結果は、
	コードではないメモリの書き替えの場合と同様に、データキャッシュに
	保管され、コードキャッシュにはすぐには反映されません。ですから、

		○キャッシュのない 386 以下のマシンでは、書き替えた
		 あとのコードは、書き替え時にメモリ(DRAM)に送られ、
		 実行時にメモリから読み出されるので、きちんと意図した
		 とおりに実行される

		○キャッシュのある 486 以降では、書き替え前の内容が
		 すでにコードキャッシュに入っていると、データキャッシュ
		 (と DRAM;ただし、Pentium 以降では DRAM への書き込みが
		 遅れることがある)に入っている書き替え後の内容ではなく、
		 コードキャッシュにある書き替え前の内容が実行される

	ということになってしまいます。

	これを避け、きちんと書き替え後のコードを実行させたい場合には、
	ある作法が必要(ジャンプ命令一発でいいんでしたっけ?)ですが、
	古いソフトではそれを考慮していないのがけっこうあったんですよね…。

	省メモリのためコード書き替えが推奨されていた時代もありましたし。

☆-- 飯嶋 浩光 ----------------------------------------------☆
|IIJIMA 'Delmonta' Hiromitsu an der Universitaet Tokyo      |
☆-----------------------------------------------------------☆
|【宣伝】Windows 95/98 管理人のための MS-DOS 基礎講座       |
|  http://user.ecc.u-tokyo.ac.jp/~l94102/dos/               |
☆-------------------------- L94102@mail.ecc.u-tokyo.ac.jp --☆
Technical Details
Message-ID: <394CAB49.886C9944@mail.ecc.u-tokyo.ac.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <3948f293_1@news3.prserv.net>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: ff2c9,e259f40b091b801d
X-Google-Attributes: gidff2c9,public
X-Google-Thread: 1117a5,af5d54a174f35587,start
X-Google-Attributes: gid1117a5,public
From: IIJIMA 'Delmonta' Hiromitsu <L94102@mail.ecc.u-tokyo.ac.jp>
Subject: Re: CPU Cache & Kermit 3.13 8 について
Date: 2000/06/18
Message-ID: <394CAB49.886C9944@mail.ecc.u-tokyo.ac.jp>
X-Deja-AN: 636400863
Content-Transfer-Encoding: 7bit
References: <3948f293_1@news3.prserv.net>
X-Accept-Language: ja,en,zh-TW,zh,zh-CN,de,ko,es
Content-Type: text/plain; charset=iso-2022-jp
X-Complaints-To: usenet@mail.ecc.u-tokyo.ac.jp
X-Trace: news.ecc.u-tokyo.ac.jp 961325898 9743 133.11.171.228 (18 Jun 2000 10:58:18 GMT)
Organization: Dept. Psychology, Univ. Tokyo
Mime-Version: 1.0
NNTP-Posting-Date: 18 Jun 2000 10:58:18 GMT
Newsgroups: fj.os.msdos,fj.comp.arch