問題タブ [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.
c++ - 「gdt_flush」に指定されたストレージ クラス
いくつかの外部アセンブラ関数とのインターフェイスが必要なオペレーティング システムを作成しています。宣言をヘッダーに入れました:
コードが実行されると、生成されます
DescriptorTables.h:10:31: エラー: 'gdt_flush' に指定されたストレージ クラス
以前にこのエラーを見たことがありません。これを修正する方法についてのアイデアはありますか?
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記述子を指している必要がありますか?上記のシナリオでは、これらのフィールドのどれを設定する必要がありますか?私はこれを理解するのにかなりの時間を費やしています。
どんな助けでも大歓迎です。
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標準のみ。
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" {...}
。
ありがとう!
operating-system - カーネル モードとメモリ保護
オペレーティング システム ユーザー モードでは、アプリケーションの仮想アドレス空間はプライベートであるため、あるアプリケーションが別のアプリケーションに属するデータを変更することはできません。各アプリケーションは分離して実行され、アプリケーションがクラッシュした場合、クラッシュはその 1 つのアプリケーションに限定されます。他のアプリケーションとオペレーティング システムは、クラッシュの影響を受けません。
なぜカーネル モード OS でメモリを保護せず、BOSD が発生するのですか??
assembly - この Intel 82340SX で、8086 チップのチュートリアルの知識を使用できますか?
最近、古い (非常に古い) ラップトップを見つけましたが、アセンブリと基本的な OS 開発を学ぶ絶好の機会かもしれません。
アセンブリ チュートリアルはほとんどの場合 8086 チップに特化しているため、私の質問は、この Intel 82340SX は何か違いがありますか? 言語の使用に関して何か変更はありますか?
paging - ページフォールト後の命令の再開
私はCでオペレーティングシステムを開発していて、ページングに苦労しています。メモリを割り当て、物理ページと仮想ページの割り当てを処理する低レベルのメモリ割り当て出力を出力することで、カーネルヒープをループでテストしています。
の場合PDE 0
、すべてがページに対して正常に機能します0-1023
が、割り当てがに移動するとすぐにPDE 1
、現在のフラグが設定された状態でページフォールトが発生しrw
、別の物理アドレスから割り当てを開始するとフラグも発生することがあります。
障害のあるアドレスを取得して、それが属するページにcr2
マップし直してから、アドレスを3に設定する必要がありますか?PDE
その後、命令を再開する必要がありますが、どうすればよいですか?助言がありますか?
gcc - GCC4.6.2での不思議なスタックの問題
私は大学でPintosおもちゃのオペレーティングシステムに取り組んでいますが、GCC4.6.2を使用すると奇妙なバグがあります。システムコール引数をプッシュすると(インラインアセンブリでは3プッシュ)、いくつかの不思議なデータもスタックに表示され、引数の順序が間違っています。-fno-omit-frame-pointerを設定すると、奇妙なデータが削除されますが、引数の順序はまだ間違っています。GCC4.5は正常に動作します。どの特定のオプションがこれを修正できるか考えていますか?
注:問題は-O0でも発生します。
kernel - osdevを学習するのに十分な小さなカーネルはありますか?
osdevについてもっと知りたいです。そこで、osdevをより良くするために、他の小さなカーネルから学ぶことを考えました。osdevを学習するための良いカーネルはありますか?もちろん、ソースコードにアクセスして自由に変更できるように、GPLである必要があります。
osdev - PoCの空のOSはありますか?
楽しみのために、OSlessハードウェアで実行されるコードを書きたいと思います。VM(VMwareやvirtualboxなど)で実行されるコードを書くのは良いことだと思います。しかし、私は最初から始めたくありません。C++ランタイムを利用できるようにしたいと思います。読み取り/書き込みを可能にするもの(おそらくFAT32ファイルシステムコード)。テキスト用のグラフィックスと、画面上に描画するためのグラフィックスができる場合(ピクセルごと。sdlのサポートはボーナスですが、必須ではありません)。
必要に応じて、独自のスレッドを作成します。OSに必要な他のすべて(使用したいもの)を記述します。基本的なファイルシステム、gfx、キーボード/マウスのサポートが必要です。