問題タブ [harvard-architecture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - ハーバード アーキテクチャ プラットフォームでの NULL ポインタに関する問題
今週、ここで興味深い問題に遭遇しました。
16 ビットのデータ アドレスと 32 ビットのコード アドレスを持つハーバード アーキテクチャの組み込みプラットフォームで C を使用しています。
この問題は、関数ポインターを操作しているときに発生します。次のようなコードがある場合
また
すべて順調。
ただし、次のようなコードがある場合
次に、NULL
が として定義されているため(void *) 0
、コンパイラ (この場合は gcc) は a) 警告を出さず、b) 32 ビット比較ではなく、関数ポインタに対して 16 ビット比較を行います。関数ポインターがたまたま 64k の境界上にない限り、下位 16 ビットはすべて 0 です。
現時点では、NULL に対する明示的なチェックを含む大量のコードがあります。それらのほとんどはデータ ポインターになりますが、一部は関数ポインターになります。3000 を超える結果を簡単に grep し!= NULL
たり、明らかにしたりしましたが、その多くは手動で確認する必要がありました。== NULL
したがって、今私たちが望むのは次のいずれかです
関数ポインタ (データ ポインタではない) が比較されるすべてのケースを見つける方法 (代わりに、32 ビット 0 として定義する FP_NULL と比較することができます)、または
正しいことを行うように NULL を再定義します。
(または、gcc ポートを更新して、このケースを検出して正しく処理すると思います)。
1で機能するアプローチは考えられません。2で考えられる唯一のアプローチは、NULLを0関数ポインターとして再定義することです。これは、データポインターに対する比較の大部分にとって非常に無駄になります。(32 ビットの比較は 4 命令、16 ビットの比較は 1 命令です)。
何か考えや提案はありますか?
memory - ハーバード アーキテクチャでの Linux の起動
この問題が発生したとき、私は pandaboard で作業していました。pandaboard は、ハーバード ベースのアーキテクチャである OMAP 4430 を使用します。ボードには 1GB のメモリ (DDR2 RAM) が搭載されています。しかし、ハーバード アーキテクチャには 2 つのメモリが必要ですよね?
これは、LinuxカーネルイメージがMMC / SDカードに保存され、ブートローダーによってメモリに引き出されることを理解していることです。さて、ブートローダーはどこから実行されていますか (1GB RAM ですか?)。ブートローダはカーネル イメージをどこにダンプしますか?(これも 1GB の RAM ですか?)
architecture - ノイマン アーキテクチャの利点はありますか?
フォン・ノイマンとハーバード・アーキテクチャの違いを調べた結果、ハーバード・アーキテクチャと比較して、フォン・ノイマンには「ボトルネック」や脆弱性などのマイナス面があるだけであるという結論に達しました。では、今日、ほとんどのコンピューターがフォン ノイマン アーキテクチャを使用しているのはなぜでしょうか?
hardware - フォン・ノイマン vs ハーバード建築
パーソナル コンピュータを設計する際に、なぜフォン ノイマン アーキテクチャに基づくコンピュータ アーキテクチャがハーバード アーキテクチャよりも好まれるのか。ハーバード アーキテクチャは、マイクロコンピュータ ベースのコンピュータ システムと DSP ベースのコンピュータ システムの設計に使用されますか?
cpu - 自分のコンピューターがハーバード アーキテクチャーかフォン ノイマン アーキテクチャーかを確認するにはどうすればよいですか?
以下の構成のラップトップを使用しています。プロセッサ: Intel(R) Core(TM)i5-4300U CPU @1.90GHz 2.49GHz RAM: 8GB システム タイプ:64 ビット OS、x64 ベースのプロセッサ
Windows 版:Windows 8.2 Enterprise
CPU アーキテクチャについて読んでいたとき、自分のコンピュータで採用されている CPU アーキテクチャを知りたいと思いました。
algorithm - ハーバード アーキテクチャに対応しているのに、アルゴリズム解析に RAM モデルの計算を使用するのはなぜですか?
ウィキペディアによると、計算の RASP モデルはフォン ノイマン アーキテクチャに対応し、計算の RAM モデルはハーバード アーキテクチャに対応し、フォン ノイマン アーキテクチャはコンピュータに最も近いものです。これは、コンピュータにデータと命令を保存する RAM メモリがあるためです。モデルには異なるプログラム メモリと異なるデータ メモリがあるのに、なぜアルゴリズム解析に RAM モデルを使用するのでしょうか。
https://en.wikipedia.org/wiki/Random-access_stored-program_machine