タグ付けされた質問 「x86」

8
なぜセグメンテーションではないのですか?
私はオペレーティングシステムとx86アーキテクチャを勉強しています。セグメンテーションとページングについて読んでいる間、現代のOSがメモリ管理をどのように処理するのか自然に興味がありました。私がLinuxや他のほとんどのオペレーティングシステムで見つけたものから、ページングを優先してセグメンテーションを本質的に回避しています。私が見つけたこの理由のいくつかは、シンプルさと移植性でした。 セグメンテーション(x86またはそれ以外)の実用的な用途は何ですか?それを使用する堅牢なオペレーティングシステムが表示されるか、ページングベースのシステムが引き続き使用されます。 今、私はこれがロードされた質問であることを知っていますが、新しく開発されたオペレーティングシステムでセグメンテーションがどのように処理されるか興味があります。ページングを支持することは、「セグメント化された」アプローチを誰も考慮しないほど理にかなっていますか?もしそうなら、なぜですか? そして、「排除」セグメンテーションと言うとき、Linuxは必要な範囲でのみ使用することを意味します。ユーザーおよびカーネルコード/データセグメント用のセグメントは4つだけです。Intelのドキュメントを読みながら、セグメンテーションはより堅牢なソリューションを念頭に置いて設計されていると感じました。それから、x86がどれほど複雑になるかを何度も言われました。 Linux Torvaldの元々のLinuxの「アナウンスメント」にリンクした後、この興味深い逸話を見つけました。彼はこれについて、いくつかの投稿を後に述べました。 簡単に言えば、移植は不可能だと思います。ほとんどはCで書かれていますが、ほとんどの人は私がCを書いているものとは呼びません。これは、386について教えてくれるプロジェクトでもあったので、386の考えられるすべての機能を使用します。すでに述べたように、 、ページング(まだディスクへではない)とセグメンテーションの両方。本当に386に依存するのはセグメンテーションです(すべてのタスクにはコードとデータ用の64Mbセグメントがあります-4Gbで最大64タスク。64Mb/タスク以上が必要な人は誰でもCookieが強い)。 私自身がx86を試した結果、この質問をするようになったと思います。LinusにはStackOverflowがなかったため、それを実装して試してみました。

3
x64レジスタ名の「R」は何を表していますか?
32ビットのレジスタは、拡張を意味する 'E'プレフィックスが付いた16ビットのレジスタのように名前が付けられていました。私はそれが明示的に述べられたことを見たことがなかったが、16ビットから32ビットに拡張されることを意味すると常に考えてきました。 私は「R」が何を意味するのかを見つけようとしていましたが、私のグーグルスキルは私を失敗させました。知ってる?
27 architecture  x86 

5
x86アセンブリに関する正規の本はありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 アセンブリに関する本はたくさんあります。ただし、彼らは通常、MIPSやARMなど、気にしないISAを扱います。これらのアーキテクチャは扱いません。私がそれらを学ぼうとする理由はありません。 しかし、x86アセンブリブックは...存在しないようです。 たとえば、Windows Portable Executableファイルを生成するトイコンパイラをビルドしようとしているとします。 ベストプラクティス、設計方法論、およびx86アセンブリに関するその他の有用な情報を説明するための事実上の標準である本はありますか?その本はそれを特別なものにしていますか?
25 learning  books  assembly  x86 

3
パフォーマンスを向上させるためにマルチスレッドがしばしば好まれているのはなぜですか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 6年前に移行され ました。 私は質問があります、それはプログラマーが一般的に並行性とマルチスレッドプログラムを好むように思われる理由についてです。 ここで2つの主なアプローチを検討しています。 基本的に信号に基づく非同期アプローチ、または新しいC#5.0などの多くの論文や言語で呼ばれる非同期アプローチ、およびパイプラインのポリシーを管理する「コンパニオンスレッド」 並行アプローチまたはマルチスレッドアプローチ 私はここでハードウェアと最悪のシナリオについて考えていると言いますが、この2つのパラダイムを自分でテストしました。物事をスピードアップしたり、リソースを有効に活用したい場合は、マルチスレッドについて話します。 CPU内にメモリコントローラーを提供しないIntelクアッドコアを備えた古いマシンでマルチスレッドプログラムと非同期プログラムをテストしました。メモリはマザーボードによって完全に管理されています。マルチスレッドアプリケーションでは、3-4-5のような比較的少数のスレッドでさえ問題になる可能性があり、アプリケーションは応答せず、遅くて不快です。 一方、優れた非同期アプローチはおそらく高速ではないかもしれませんが、最悪ではありません。私のアプリケーションは結果を待つだけでハングせず、応答性があり、はるかに優れたスケーリングが行われています。 また、スレッドの世界でのコンテキストの変更は、実際のシナリオではそれほど安くないことを発見しました。実際には、計算するために相互に循環してスワップする必要のあるスレッドが2つ以上ある場合、実際には非常に高価です。 現代のCPUでは、状況はそれほど違いはありませんが、統合されたメモリコントローラですが、私のポイントは、x86 CPUは基本的にシリアルマシンであり、メモリコントローラはマザーボード上の外部メモリコントローラを備えた古いマシンと同じように動作することです。コンテキストスイッチは依然としてアプリケーションに関連するコストであり、メモリコントローラーが統合されているか、新しいCPUに2コア以上あるという事実は私にとってはお買い得ではありません。 私が経験したコンカレントアプローチは理論的には良いが、実際にはそれほど良くありません。ハードウェアによってメモリモデルが課されているため、このパラダイムをうまく利用することは難しく、使用からデータ構造を複数のスレッドの結合に使用します。 また、両方のパラダイムは、特定の時点でタスクまたはジョブが実行されるときにセキュリティを提供しません。機能的な観点からは、それらは本当に似ています。 X86メモリモデルによると、なぜ大多数の人々は、非同期アプローチではなく、C ++で同時実行性を使用することを提案するのでしょうか。また、コンピュータの最悪のシナリオを考えてみてください。コンテキストスイッチは、おそらく計算自体よりも高価です。

7
x86アセンブリでのNOP命令とalignステートメントの目的
アセンブリクラスを最後に受講してから1年ほど経ちました。そのクラスでは、IrvineライブラリでMASMを使用して、プログラミングを簡単にしました。 ほとんどの指示を終えた後、彼はNOP指示は基本的に何もせず、それを使うことを心配しないと言った。とにかく、それは中間期であり、適切に実行されないサンプルコードがあるため、NOP命令を追加するよう指示され、正常に機能しました。私は授業の後で、なぜそれが実際に何をしたのかと尋ねました。 誰か知ってる?
15 assembly  x86 

9
スタックポインターが何であるかは理解していますが、何に使用されますか?
スタックポインターはスタックの先頭を指し、スタックの先頭には、 "LIFO"ベースと呼ばれるデータが格納されています。他の誰かの類推を盗むために、それはあなたが一番上に皿を置いて取る皿の積み重ねのようなものです。スタックポインターOTOHは、スタックの一番上の「皿」を指します。少なくとも、x86についてはそうです。 しかし、なぜコンピュータ/プログラムはスタックポインタが指しているものを「気にする」のでしょうか。言い換えれば、スタックポインターを持っていること、およびそれが機能する場所を知っていることの目的は何ですか? Cプログラマが理解できる説明をいただければ幸いです。
11 stack  x86 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.