問題タブ [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.
linux - Linux のページ テーブル
質問 1 :- ブート プロセス中に、Linux はページ テーブルを作成します。ただし、新しいプロセスが実行されると、独自のページ テーブルも作成されます。これらの 2 つのテーブルの違いは何ですか?
質問 2 :- x86 arch では、Linux は明確に定義されたスキーム (ページ ディレクトリ、ページ テーブル エントリなどを含む) を使用して、線形アドレスを物理アドレスに変換します。プロセス アドレス空間 A に線形アドレス X があり、ページ テーブルを使用して変換すると物理アドレス Y に対応するとします。他のプロセス B にも、それ自身のアドレス空間に属する有効な線形アドレス X があります。プロセス B が X にアクセスしたい場合、X は再び同じ物理アドレス Y に対応するでしょうか?
assembly - プロテクトモードで間接的なファージャンプ/コールを実行する
プロテクトモードで間接的なファージャンプ/コールを実行するにはどうすればよいですか?最初に私はこれを行うことは許容できると考えていました:
(セグメントセレクターについて心配する必要はありません。GDTの2番目のエントリは有効なコードセグメントです)
しかし、nasmがそれを組み立てたとき、それは構文エラーでした。Intel(命令セットリファレンス)マニュアルのBook 2aを見ると、これは、が即値である、またはを使用してのみ実行できますjmp ptr16:32
。ここで、は48ビットジャンプアドレス(16:32)を含むメモリ位置です。 )。ptr16:32
jmp m16:32
m16:32
今、私はそれをこのようにエンコードしようとしました:
正常にアセンブルされましたが、実行しようとすると、プロセッサが一般保護違反になり、再起動します。何が起こったのかわかりません。
エンコーディングは次のようになっていると思います。
(たとえば、間接ジャンプを使用して0x10:0x8010にジャンプしたい)
これの何が問題になっている可能性がありますか?48ビットメモリ値はリトルエンディアンでコーディングする必要がありますか?そして、それはこのようにコーディングされるべきですか?
私は最後のものをやろうとはしていません。
c - CのプロセスのPCBにアクセスするには
私はLinuxで作業していますが、プロセスのPCBにアクセスできるかどうかについて少し混乱していますか?はいの場合、そのコンテンツにアクセスして端末に印刷できます。そうでない場合は、どうしてですか?
回答ありがとうございます .....
assembly - フロッピーイメージファイルでgrubを使用して、bochs内で独自のカーネルを起動します
基本的に、http://sig9.com/bochs-grubの手順に従って、BIOSにGRUBを起動させるだけのベアイメージファイルを作成しました。
問題は次のとおりです。
- 私が書いているカーネルは32ビットで、最初はhttp://www.jamesmolloy.co.uk/tutorial_html/index.htmlを使用しますが、私のホスト(物理)マシンはx86_64で、bochは次のように構成されています。
./configure --prefix = / usr --enable-vbe --without-wx --enable-cpu-level = 6 \ --enable-fpu \ --enable-plugins --enable-x86-64 --enable -smp \ --enable-long-phy-address --enable-debugger --enable-disasm --enable-debugger-gui \ --enable-raw-serial --enable-vmx --enable-x86-debugger- -enable-iodebug
したがって、次の問題を解決した後でも、これが機能するかどうかはわかりません。
- bochを起動すると、grubシェルが起動しません。
私が得るのは:
誰かが私が間違っている可能性があることを知っていますか?
http://sig9.com/bochs-grubの指示に従うと、ホストの64ビットのgrubバイナリが32ビットのエミュレートされたシステムであるはずのfloppy.imgにコピーされたのではないかと思います。
memory-management - シンプルなおもちゃの OS メモリ管理
私は実験として C 言語とアセンブリで簡単な小さなおもちゃの OS を開発していますが、システム メモリに関する知識が不足しているため、自分自身を心配し始めています。
カーネルをコンパイルし、Bochs (GRUB によってロード) で実行して、「Hello, world!」と出力することができました。今、私は簡単なメモリ マネージャーを作成しようとしています。
メモリ管理に関するリソースをいくつか見つけましたが、実際には十分なコードがありませんでした (概念は理解していましたが、実際に実装する方法を知ることができませんでした)。
多かれ少なかれ複雑な戦略をいくつか試した後、変更が必要になるまで、途方もなく単純な戦略 (メモリにオフセットを保持し、割り当てられたオブジェクトのサイズだけ増加させるだけ) に落ち着きました。断片化の制御、保護などはまだありません。
そのため、より堅牢なマネージャーが必要な場合に、どこでより多くの情報を見つけることができるかを知りたい. また、ページング、セグメンテーション、およびその他の関連事項についても学びたいと思います。ページングについては今のところまったく扱っていませんが、OS の開発現場でよく言われているので、そのうち対応しなければならないと思います。
また、メモリ マネージャーによって実際の場所にリダイレクトされるポインターをアプリケーションが保持する、何らかの形式の間接ポインターについても読みました。それは私にとってはかなり先のことだと思いますが、仮想メモリやデフラグを試してみたいと思った場合は重要なようです.
また、メモリオフセットをどこに置くべきですか? 最適な場所がどこなのかわからなかったので、ランダムに選んだだけで0x1000
、後でカーネルなどを上書きしたときに戻ってくると確信しています。
また、パフォーマンスに関して何を期待すべきか (割り当てと解放の Big-O 値など) と、実際に管理されているメモリに対するメモリ管理構造の妥当な比率を知りたいです。
もちろん、これらの質問のサブセットだけに自由に答えてください。どんなフィードバックでも大歓迎です!
filesystems - シンプルなメモリファイルシステム
誰かが私にメモリ内ファイルシステムの単純な(これを十分に強調することはできません)実装を指摘できますか?ファイルを作成して単純なcatfile.txtを実行できれば、それで十分です。
おもちゃのOSの一部として使いたいです。
assembly - 自分のオペレーティングシステムでマウスを動作させるにはどうすればよいですか?INT33hはEMU8086の外部では機能しません
私は完全にAssemblyで独自のOSを開発しましたが、EMU8086を搭載したWindowsのINT 33hは機能するのに、フロッピーから起動すると機能しないため、マウスドライバーを実装したいと思います。USBとPS/2マウスのどちらかを試しましたが、同じ結果です。OSにマウスを認識させるために私がしなければならないことを誰かが私に説明できますか?
c# - OS(オペレーティングシステム)C#でのプログラミング
私はこのプロジェクトを知っています。質問は、「マネージコードを使用して実際のOSを作成できるか、またはこのプロジェクトで作成するOSがHelloWorldOSであるか」ということです。オペレーティングシステムはハードウェアを完全に制御する必要がありますが、これで実行できますか?他にプロジェクトがあれば
コスモスプロジェクトを教えてください
x86-64 - x86-64 プロセッサの NUMA ドキュメント?
X86-64 プロセッサの NUMA ドキュメントは既に探しましたが、残念ながら NUMA の最適化ドキュメントしか見つかりませんでした。
私が欲しいのは、システムで NUMA を初期化する方法です (これには、システムのメモリ トポロジとプロセッサ トポロジの取得が含まれます)。X86-64 AMD および Intel プロセッサの NUMA に関する優れたドキュメントを知っている人はいますか?
c - C関数の戻り値をASMに返す
ASM内から関数を呼び出そうとしています。呼び出し方は知っていますが、この関数の戻り値を取得する方法を見つけるのに苦労しています。次に例を示します。
Cコード:
(N)ASMコード:
何か案は?