タグ付けされた質問 「memory-hardware」

8
コンピューターはバイトのデータ型をどのように判断しますか?
たとえば、コンピューターが10111100RAMの特定の1バイトに保存されている場合、コンピューターはこのバイトを整数、ASCII文字、または他の何かとして解釈する方法をどのように知るのでしょうか?型データは隣接するバイトに保存されますか?(1バイトに2倍のスペースを使用する結果となるため、これは事実ではないと思います。) おそらくコンピューターはデータの種類さえ知らず、それを使用するプログラムだけが知っているのではないかと思います。私の推測では、RAMはR AMであり、したがって順次読み取られないため、特定のプログラムは特定のアドレスから情報をフェッチするようにCPUに指示し、プログラムはそれを処理する方法を定義します。これは、型キャストの必要性などのプログラミングに適しているようです。 私は正しい軌道に乗っていますか?

7
RAMを搭載していないが、ディスクを搭載したコンピューターはRAMを搭載したコンピューターと同等ですか?
私が理解するように、メモリは多くのことに使用されます。ディスクキャッシュとして機能し、プログラムの命令とそのスタックとヒープが含まれています。これが思考実験です。コンピューターがクランチを実行するのにかかる速度や時間を気にしない場合、非常に大きなディスクがあると仮定して、最低限必要なメモリー量はどれくらいですか?メモリを廃止し、ディスクを用意することは可能ですか? ディスクキャッシュは明らかに不要です。ディスクにスワップスペースを設定すると、プログラムスタックとヒープもメモリを必要としません。メモリの存在を必要とするものはありますか?

3
ランダム読み取りの並列化はうまくいくようです-なぜですか?
次の非常に単純なコンピュータープログラムを検討してください。 for i = 1 to n: y[i] = x[p[i]] ここで、とは要素のバイト配列であり、は要素の単語配列です。ここで、は大きく、たとえば(したがって、データのごく一部のみがあらゆる種類のキャッシュメモリに収まります)。y n p n n n = 2 31xxxyyynnnpppnnnnnnn=231n=231n = 2^{31} がから間に一様に分布した乱数で構成されていると仮定します。1 nppp111nnn 最新のハードウェアの観点から見ると、これは次のことを意味するはずです。 読書安い(シーケンシャルリード)でありますp[i]p[i]p[i] 読ん非常に高価である(ランダム読み取り、ほぼすべてのあるキャッシュミスを読み込みます。私たちは、メインメモリから個々のバイトを取得する必要があります)x[p[i]]x[p[i]]x[p[i]] 書き込み安い(シーケンシャル書き込み)です。y[i]y[i]y[i] そして、これはまさに私が観察していることです。このプログラムは、シーケンシャルな読み取りと書き込みのみを行うプログラムと比較して非常に遅いです。すごい。 ここで疑問が生じます。このプログラムは、最新のマルチコアプラットフォームでどの程度並列化されますか? 私の仮説では、このプログラムはうまく並列化されません。結局のところ、ボトルネックはメインメモリです。単一のコアは、メインメモリからのデータを待機するだけで、すでにほとんどの時間を無駄にしています。 ただし、これは、この種の操作がボトルネックとなっているいくつかのアルゴリズムを試し始めたときに観察したものではありませんでした! 単純なforループをOpenMP並列forループに置き換えました(本質的に、範囲を小さな部分に分割し、これらの部分を異なるCPUコアで並列に実行します)。[1,n][1,n][1,n] ローエンドのコンピューターでは、スピードアップは確かに軽微でした。しかし、ハイエンドプラットフォームでは、優れた線形に近い高速化が得られたことに驚きました。いくつかの具体的な例(正確なタイミングは少しずれている可能性があり、多くのランダムな変動があります;これらは単なる簡単な実験でした): 2 x 4コアXeon(合計8コア):シングルスレッドバージョンと比較して、5〜8倍高速化。 2 x 6コアXeon(合計12コア):シングルスレッドバージョンと比較して8〜14倍高速化。 今、これは全く予想外でした。質問: 正確になぜプログラムの並列化のこの種のは、とてもよくありませんか?ハードウェアで何が起こりますか?(私の現在の推測は、これらの線に沿ったものです:異なるスレッドからのランダムな読み取りは「パイプライン化」されており、これらに対する回答を取得する平均レートは、単一のスレッドの場合よりもはるかに高くなります。) 速度を上げるには、複数のスレッドと複数のコアを使用する必要がありますか?メインメモリとCPUの間のインターフェイスで何らかのパイプライン処理が実際に行われる場合、シングルスレッドアプリケーションでは、メインメモリに、、...、コンピュータはメインメモリから関連するキャッシュラインのフェッチを開始できますか?これが原則的に可能である場合、実際にどのように達成しますか?x [ p [ i + 1 ] ]x[p[i]]x[p[i]]x[p[i]]x[p[i+1]]x[p[i+1]]x[p[i+1]] …

1
忘却型RAMとは何ですか?
誰かが私に正確に気付かないRAMとは何かを私に説明できますか? 次のような説明がわかりましたが、技術的な側面を理解したいと思います。 暗号化は、プライバシーを確​​保するのに必ずしも十分ではありません。攻撃者が暗号化されたストレージへのアクセスパターンを観察できる場合でも、アプリケーションの動作に関する機密情報を知ることができます。Oblivious RAMは、アクセスされているメモリを継続的にシャッフルすることでこの問題を解決します。これにより、アクセスされているデータ、または以前にアクセスされたデータを完全に隠すことができます。

1
MMUを使用しないプロセッサ用のマルチタスクオペレーティングシステムの作成
一部のARMプロセッサ用の趣味のオペレーティングシステムを書くことを考えています。ARM MPUを搭載した人気のあるシングルボードコンピューターはたくさんあるので、そのうちの1つを購入したかっただけです(より多くのオープンドキュメントがあるコンピューターを選択)。本当に十分なメモリを備えたボードでさえ、メモリ管理ユニットを備えたMPUを持っていないことに気づいたとき、私は驚きました。 私は常にi386 +プロセッサで作業しており、それ以外は何もしていないため(一部のMicrochip PICを除く)、私は混乱しており、書かれたOSと比較すると機能が制限されない機能するオペレーティングシステムを書くことができるかどうかわかりませんMMUを備えたMPU用。 MMUを「置換」または「シミュレーション」するためのいくつかの解決策を考えることができ、いくつか質問があります。 16ビットモードと32ビットモードのIntelプロセッサでは、セグメントとセグメントセレクターを使用して、異なるタスクで異なるメモリブロックを使用する方法があります。これは、x86でタスクスイッチを実行するときに、セグメントレジスタの内容を変更することでメモリ空間を変更できることを意味します。ARMアーキテクチャで使用できるメモリセグメンテーションの一般的な概念はありますか? 実行可能ファイルの代わりにリンクされたオブジェクトファイルをロードすることで、ページング構造を使用してメモリをマップした場合と同じ方法で、再配置(修正)または位置独立コードを使用してメモリの一部にタスクをポイントできます。これで十分でしょうか? ARMプロセッサのメモリ保護ユニットについても読んだことがあります。これらは役に立ちますか? MMUのないシステムでタスクを管理する「通常の」方法はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.