問題タブ [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.
assembly - IRQ マッピングの設定
カーネルをセットアップするために、いくつかのチュートリアルとリファレンスに従っています。チュートリアルで、まったく説明していないなじみのないコードに出くわしました。16 IRQs (0-15)
ISRの場所にマップすると言われているのはコードです32-47
:
のコードoutportb()
は次のとおりですが、私はすでにそれが何をしているのかを明確に把握しています:
これは保護モードの x86 アーキテクチャ上にあることに注意してください。このソース コードは正常に動作し、その機能は理解できますが、どのように機能するかはわかりません。誰かがここで何が起こっているのか説明してもらえますか?
operating-system - カスタム オペレーティング システムを作成する際の障害
プログラマー (特に Comp. Sci. 卒業生) が取り組もうとする最も一般的な過度に野心的なプロジェクトは、独自のオペレーティング システムを構築することだと私には思えます。(独自のプログラミング言語とコンパイラを作成しようとすることは、おそらくさらに一般的ですが、それほど野心的ではありません。)
(私のような) 試すのに十分なほど愚かな人のために: まったくのサイズは別として、ゼロから独自の OS を作成しようとしたときに遭遇した最大の落とし穴や予期しない障害は何ですか?
編集: OS に関するすばらしい質問:オペレーティング システムの開発を始めるためのリソースは何ですか?
operating-system - オペレーティングシステムはどのように「作られる」のですか?
OS の作成は大規模なプロジェクトのように思えます。誰でもどのように始めますか?
たとえば、Ubuntu をドライブに挿入した場合、コンピューターでそれを実行するにはどうすればよいでしょうか? (これは、私が本当に知りたいことだと思います。)
または、別の角度から見ると、ディスク上に存在し、OS として「実行」できる最小のバイト数はどれくらいですか?
(あいまいで申し訳ありません。私はこのテーマについて何も知らないだけなので、具体的には言えません。コンピューターの仕組みについてかなりの知識を持っているふりをしていますが、このテーマについてはまったく無知です。 )
osdev - ブータブル CD をプログラムで作成するにはどうすればよいですか?
私が取り組んでいる OS の基礎としてベアボーン チュートリアルを使用していますが、これは古いチュートリアルのようです。カーネルをフロッピー イメージにコンパイルし、それを GRUB でロードしています。
基本的には GRUB を使用したいのですが、代わりに CD から OS を実行したいと考えています。主な理由は、実際に使用できる実際のフロッピー ドライブがない (現在 VirtualBox でテストしている) ため、実際のハードウェアで OS をテストする方法がないためです。
私はネットをうろうろしていて、フロッピー イメージからブータブル CD を作成するユーティリティをたくさん見つけることができます。イメージを最初にフロッピーに配置する必要がなく、理想的には作成ステップ中に起動可能な CD を作成できるようにしたいと考えていますが、これはかなり無意味に思えます。
これに答える簡単な方法だと思います: CD からカーネル イメージを読み取るように GRUB を設定するにはどうすればよいですか? Windows からこれを行うには特別なユーティリティが必要ですか? (カーネルはまだそれ自体をコンパイルできません。それはしばらくの間ではありません)
ありがとう!
assembly - 割り込みハンドラから戻る前に、特定の例外によってスタックにプッシュされたエラー コードをポップする必要がありますか?
256 のエントリを持つ idt テーブルをロードしました。すべて同様のハンドラを指しています。
- 例外 8 および 10 ~ 14 の場合は、例外番号をプッシュします (これらの例外はエラー コードを自動的にプッシュします)。
- その他の場合は、「ダミー」エラー コードと例外番号をプッシュします。
- 次に、共通ハンドラにジャンプします
したがって、共通ハンドラーが入ると、スタックは適切に配置され、例外/割り込み番号、エラー コード (単なるダミーの可能性があります)、eflags、cs、および eip が含まれます。
私の質問は、割り込みハンドラからの復帰に関するものです。以前はiret
スタックから例外番号とエラー コードを取り出してリターンしていましたが、例外番号 8 では機能しません。スタックにエラー コードを残すと、正常に返されます。
質問:
- エラーコードをそこに置く例外のために、エラーコードをスタックに残す必要がありますか?
iret
もしそうなら、エラーコードをポップする必要があるかどうかをどのように判断しますか? - 割り込みを有効にするとすぐに、常に例外 8 (二重障害) が発生しますが、その後はすべて正常に動作します (私は趣味の OS を開発しています)。これは正常な動作ですか、それともどこかにバグがありますか?
visual-studio - Visual Studioを使用してカーネルイメージを構築するにはどうすればよいですか?
VisualC++を使用してx86マシン用の組み込みカーネルを構築したいと思います。コンパイルするCおよびアセンブリコードファイルがいくつかあり、GRUBなどのマルチブートブートローダーと互換性のある方法でそれらをすべてリンクしたいと思います。
operating-system - カーネル/OSの場合、Cはまだですか?
私はオペレーティングシステムが好きで、最終的には主にカーネルに取り組んでいるOS開発者になりたいと思っています。将来的には、Cは引き続き選択される言語であり、他に何を学ぼうとすべきでしょうか。
c - 古いデスクトップコンピュータで小さなオペレーティングシステムを構築するにはどうすればよいですか?
オペレーティングシステムの作成は(特に自分で)耐えられないほど複雑であることを私は知っているので、これは無駄かもしれません。
次のLinuxやWindowsを構築するつもりはありません。
私はそれが恐ろしくてバグがあり、うまくいかないことを知っていますが、それは問題ありません。
私はすべてを自分で、 Assembly、C、および(一部の)C++で記述したいと思います。
今は忙しくてすぐに時間がないので、これは将来のプロジェクトですが、今すぐ聞いてみようと思ったので、たくさんの答えが得られるかもしれません。構築し、この種のアプローチに役立つリソースになります(minixからの構築、既存のブートローダーの使用、仮想ブートプログラムでの構築など、これまでに見たすべてのこと)。
古いデスクトップの1つにモニター、キーボード、マウスをセットアップして、空のハードドライブで作業を開始したいと思います。
自分のブートローダー(これについてはたくさんのリソースを見つけましたが、完全を期すために、まだいくつかの良いものを追加してください)、自分のUSBドライバー(必要な場合)、CDドライバー(必要な場合)の書き方を学びたいです。 )など。すべて、ゼロから。
コードをコンピューターに配置するにはどうすればよいですか?フロッピーディスクでそれを行うのが最善ですか?ほとんどのコンピューターはUSBスティックからそれを行うことができますか?
どのドライバーが必要ですか。それらを構築するための参照を提案できますか?
起動シーケンスの後-それでは何ですか?プロテクトモードなどに入るにはどうすればよいですか。
オペレーティングシステムを使用せずにメモリを管理するにはどうすればよいですか?好きなアドレスを使うだけですか?初期化は必要ありませんか?
私は間違いなく私を混乱させるものに遭遇しますか?
コマンドラインO/SとグラフィカルなO/Sのどちらかにするにはどうすればよいですか?
グラフィカルなO/Sは何に基づいていますか?たとえば、コマンドライン、フォント、画像を上部に表示するにはどうすればよいでしょうか。
マルチタスク環境の設定についてどこで読むことができますか?(つまり、2つのグラフィカルなコマンドラインを並べて実行します)。
ある種のウィンドウシステムをどのように設定しますか?単純なマルチタスクを設定した後、画面にグラフィックを表示するにはどうすればよいですか?
私を信じてください、私はこれが非常に複雑なプロジェクトであることを理解しています、そして私はおそらくそれを完成させたり、どんな用途でもそれに何かを書いたりすることは決してないでしょう。
これには、私が言及していない他の多くの部分があります。何か考えられる場合は、それらも自由に追加してください。
回答ごとに1つの「トピック」を入力してください。たとえば、USBドライバーを入力してから、リソースのリスト、注意事項などを入力してください。
また、別のO/Sまたは既存のコードから構築することを提案しないでください。私は多くの既存のコード(Linuxカーネル、サンプルリソース、既存のドライバーなど)を読むことを知っていますが、最終的にはすべて自分で書きたいと思っています。私は何か他のものから構築する必要があることを知っています、そして私が気が変わってそのルートに行くならば私が読むことができることについてSOについて他の多くの質問があります。しかし、これはすべてゼロからすべてを行うことです。
グラフィカルにする方法について何か提案はありますか?さまざまなビデオモードとそれらの操作方法など?