問題タブ [osdev]

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.

0 投票する
2 に答える
717 参照

assembly - x86cr3およびlinuxswqpper_pg_dir

Linuxソースコード(バージョン2.6.18)の場合:

また、load_cr3(pgdir)およびwrite_cr3(x)マクロ:

cr3制御レジスタ全体がページディレクトリのアドレスを格納しているようです。ただし、Intel ia-32 Developer's_Manualを参照すると、別の話になります。インテルのマニュアルには次のように書かれています。

マニュアルによると、最上位20ビットはレジスタcr3全体ではなくページディレクトリのアドレスを格納しますcr3。また、ページディレクトリが正確に4kbであるため、アドレスの最下位12ビットは常にゼロであるため合理的です。

ちょっと変じゃないですか?cr3Linuxコードは、の最上位20ビットではなく、ページディレクトリのアドレスを割り当てるだけswapper_pg_dirです。レジスターは正確に何cr3を保存しますか、インテルのマニュアルが示唆するアドレスまたはフォーマットは何ですか?

次のリンクはIntelのマニュアルです:http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

0 投票する
1 に答える
111 参照

c - 循環参照と低レベルアセンブリ

というファイルがあります。このファイルでは、アセンブリからidt.c関数を呼び出す必要があります。idt_loadこれで、アセンブリファイルから変数にアクセスする必要がidtpあり、変数がidt.cで宣言されていることを除いて、これは問題なく機能します。

リンカはidt_loadが未定義であるか、idtpが未定義であると通知するため、これは機能しません。どうすればこれを機能させることができますか?

idt.cの関連部分

idt.asm

0 投票する
1 に答える
1384 参照

x86 - マルチコアのCPUID/NUMA

趣味のOSのCPU検出と一般環境検出コードに取り組んでいます。CPUIDを複数回呼び出す必要がある場合はありますか?つまり、システムに複数のコアがある場合、OSは各コアでCPUIDを呼び出す必要がありますか?NUMAについても同じです。

AMDIntelのCPUIDマニュアルはどちらもこれについて不明確です。osdev wikiに、Detecting CPU Topologyと呼ばれるCPUIDの呼び出しについて言及している記事がありますが、私の読書では、CPUIDを呼び出す必要があるタイミングと回数が明確ではありませんでした。

0 投票する
1 に答える
980 参照

c++ - 「gdt_flush」に指定されたストレージ クラス

いくつかの外部アセンブラ関数とのインターフェイスが必要なオペレーティング システムを作成しています。宣言をヘッダーに入れました:

コードが実行されると、生成されます

DescriptorTables.h:10:31: エラー: 'gdt_flush' に指定されたストレージ クラス

以前にこのエラーを見たことがありません。これを修正する方法についてのアイデアはありますか?

0 投票する
1 に答える
1070 参照

x86 - LDTは必要ですか?

32ビットx86プロセッサ用のOS開発の一環として、ページフォールトベクトルの割り込み記述子テーブルでタスクゲートを使用することを検討しています。目的は、ハンドラーのスタックがマップされることが保証されるようにタスクの切り替えを強制することです(そして、中断されたタスクのスタックの一部がマップされなかった場合を回避します)。

QEMUでカーネルを実行していますが、ページフォールトが発生すると、クラッシュすることがわかりました(コマンドプロンプトに戻ります)。私は正確な原因を理解するのに役立つかもしれないヒントを探して読んで掘り下げてきました。何かが足りない、または何かを誤解していると思います。ちなみに、割り込みゲートを使用するようにページフォールトvecotrを設定すると、期待どおりに動作させることができます。このためにタスクゲートを使おうとすると、問題が発生します(もちろん、タスクゲートを使い続けたいと思います)。

IDT部分は、ページフォールトベクトルのタスクゲートを登録するように正しく設定されています。そのセレクターは、GDTのTSSの記述子を参照します。GDTのTSSの記述子に関しては、私も適切に設定されていると確信しています。

ただし、TSSが適切に設定されていて、これまですべてのフィールドを正確に設定する方法を決定できなかったかどうかは、100%確実ではありません。esp、eip、cs、ds、es、fs、gs、ss、eflagsなどのいくつかは比較的単純です。ただし、LDTセグメントセレクターなどの他のものはあまり明確ではありません。LDTセグメントセレクターはゼロ以外であり、GDTのLDT記述子を指している必要がありますか?上記のシナリオでは、これらのフィールドのどれを設定する必要がありますか?私はこれを理解するのにかなりの時間を費やしています。

どんな助けでも大歓迎です。

0 投票する
2 に答える
8580 参照

user-interface - 自作OSでGUI環境を開発

「hello world」を出力するcのカーネルでデスクトップOSを作成しました。C で自分の OS 用の GUI (カスタム ウィンドウ マネージャー、ボタン) を作成しようとしていますが、問題が発生しています。私は1つのチュートリアルを見ました:

http://www.osdever.net/tutorials/view/gui-development

Cのデスクトップ オペレーティング システム用の GUI チュートリアルの種類はありますか?

ps Linux も DOS もありません。C標準のみ。

0 投票する
3 に答える
279 参照

c++ - 'idt_entry_t (*)[256] を u8int* に変換できません

私はやろうとしています

生産する

エラー: 'idt_entry_t (*)[256] {aka idt_entry_struct ( )[256]}' を 'u8int {aka unsigned char*}' に変換できません (引数 '1' から 'void memset(u8int*, u8int, u32int)' へ)

それが役立つ場合、それは でラップされた C コードですextern "C" {...}

ありがとう!

0 投票する
1 に答える
3171 参照

operating-system - カーネル モードとメモリ保護

オペレーティング システム ユーザー モードでは、アプリケーションの仮想アドレス空間はプライベートであるため、あるアプリケーションが別のアプリケーションに属するデータを変更することはできません。各アプリケーションは分離して実行され、アプリケーションがクラッシュした場合、クラッシュはその 1 つのアプリケーションに限定されます。他のアプリケーションとオペレーティング システムは、クラッシュの影響を受けません。

なぜカーネル モード OS でメモリを保護せず、BOSD が発生するのですか??

0 投票する
3 に答える
203 参照

assembly - この Intel 82340SX で、8086 チップのチュートリアルの知識を使用できますか?

最近、古い (非常に古い) ラップトップを見つけましたが、アセンブリと基本的な OS 開発を学ぶ絶好の機会かもしれません。

http://i41.tinypic.com/b4zy4l.jpg

アセンブリ チュートリアルはほとんどの場合 8086 チップに特化しているため、私の質問は、この Intel 82340SX は何か違いがありますか? 言語の使用に関して何か変更はありますか?

0 投票する
1 に答える
2047 参照

paging - ページフォールト後の命令の再開

私はCでオペレーティングシステムを開発していて、ページングに苦労しています。メモリを割り当て、物理ページと仮想ページの割り当てを処理する低レベルのメモリ割り当て出力を出力することで、カーネルヒープをループでテストしています。

の場合PDE 0、すべてがページに対して正常に機能します0-1023が、割り当てがに移動するとすぐにPDE 1、現在のフラグが設定された状態でページフォールトが発生しrw、別の物理アドレスから割り当てを開始するとフラグも発生することがあります。

障害のあるアドレスを取得して、それが属するページにcr2マップし直してから、アドレスを3に設定する必要がありますか?PDEその後、命令を再開する必要がありますが、どうすればよいですか?助言がありますか?