問題タブ [pintos]
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.
operating-system - メインシステムコールにぶら下がっているQemu
私はPintosプロジェクトに取り組んでいました。そして、適切な優先順位スケジューリングのために優先順位寄付メカニズムを実装しているときに、QEMUエミュレーターがハングアップしました(画像を添付しました。ピントのダンプは次のとおりです)。printfステートメントをデバッグして挿入しようとしましたが、リモートホストを介してqemuをデバッグしているときに、mainに入るとすぐに再びハングアップしました。誰かが私にこれらすべてのトラブルシューティングを行う方法を教えてもらえますか?それ以外の場合は、コード全体とqemu、およびその間のすべてを再インストールする必要があります。
ピントからのダンプ:
QEMUでエミュレートされたピントス
operating-system - Pintos でのシステム コールの実装
PintOS で既に定義されているシステム コール ( halt()、create()... で定義されている pintos/src/lib/user/syscall.c など) を実装したいと考えています。pintos/src/userprog/syscall.c の現在のシステム コール ハンドラは何もしません。システム コールを行うプロセスを作成するにはどうすればよいですか。さらに、いくつかのシステム コールを自分で追加する必要があります。どうすればそれを進めることができますか。しかし、まず既存のシステム コールを実装する必要があります。
operating-system - PintOS、-vオプションによるカーネルパニック、ubuntuでbochs
.../build/ で "pintos -- run alarm-multiple" を実行すると、すべて問題ないようです。
しかし、.../build/ で "make check" を実行すると、7 つのテストすべてが同じ "Run did not start up successfully: no "pintos booting" message" で失敗しました。
pintos -v -k -T 60 --bochs -- -q run alarm-single < /dev/null 2> tests/threads/alarm-single.errors > tests/threads/alarm-single.output
perl -I../.. ../../tests/threads/alarm-single.ck tests/threads/alarm-single tests/threads/alarm-single.result
FAIL tests/threads/alarm-single
Run didn't start up properly: no "Pintos booting" message
次に、.../build で「pintos -v -k -T 60 --bochs -- -q run alarm-single」を発見しました。
Bochs は次のメッセージで終了しています: [ ] bochsrc.txt:12: 表示ライブラリ 'nogui' が利用できません
「-v」を取り除けば問題ありません。
この表示ライブラリ「nogui」が利用できない問題を修正する方法
linux - ピントスの例
私は Linux の新しいユーザーで、Pintos Project #02 - ユーザー プログラムを試みています。Pintos のみをインストールし、"make" でサンプルをビルドしようとしたところ、次のエラーが発生しました。
誰が何が起こっているのか説明してもらえますか?
参照用の Makefile.userprog は次のとおりです。
linux - Pintos プログラミング プロジェクト 2
Pintos は、2 番目のプロジェクト (ユーザー プログラム) に対して別の方法でインストールする必要がありますか? 自分のインストールで実行しようとするとpintos -f -q
、Pintos が引数 "-f" を認識しないというエラーが表示されます。
これはすべての引数が Pintos によって処理される場所です: http://www.cse.iitd.ernet.in/~sbansal/csl373/pintos/doc/pintos_html/init_8c-source.html FILESYS の定義が見つかりませんどこでも。誰かがここで私を助けてくれますか?
linux - bochs を使用した printf() の呼び出し時の Pintos カーネル トリプル フォールト
Ubuntu を実行している自宅のコンピューターで作業している Pintos プロジェクトを始めたばかりです。
ディレクトリからプロジェクトをコンパイルできsrc/threads/
、最初のテストpintos run alarm-multiple
は問題なく動作しているようです (デフォルトで qemu が実行されることに注意してください)。
しかし、bochsエミュレーターでこのテストを実行すると、printf()
から最初に呼び出されたように見える をヒットするとすぐにパニックになりread_command_line()
ます。
ピント:
ピントス-gdb:
ご覧のとおり、gdb で (continue) コマンドを実行するとすぐに、 の呼び出し時にc
pintos がクラッシュします。read_command_line()
printf()
ベースラインの Pintos コードに大幅な変更を加えたとは思いません。この関数呼び出しで bochs をパニックに陥れている可能性があるのは何ですか? この同じテストを qemu で実行しても、この問題はないようです。
kernel - pintos インストール中の「__stack_chk_fail」への未定義の参照
Ubuntu 13.10 に pintos をインストールしようとしていますが、スレッド フォルダーで「make」コマンドを実行中にエラーが発生しました
"`__stack_chk_fail' への未定義の参照は、make[1] に従っています: * [kernel.o] エラー 1 "
初めてこのエラーに遭遇したので、これを理解できません。
64-bit - IA32 EFER.LME 設定時のトリプルフォルト
私たちは Pintos と呼ばれる教育用オペレーティング システムに取り組んでおり、仮想化をサポートするようにセットアップしようとしています。32 ビットで実行されているバージョンから開始し、最初のステップは 64 ビット モードに切り替えて、そこから続行することです。Bochs 経由で Pintos を実行しています。
Intel Programmer's Manual (第 9.8.5 巻、第 3 巻) でこれを行う手順を調べました。IA32e モードを有効にするために IA32 EFER.LME ビットを 1 に設定する場合、システムはトリプル フォールトを生成します。もう一度最初から作業を開始します。
これが私たちが取り組んできたコードです。
トリプルフォールトを生成する可能性がある Intel によって提案されたすべての可能なケースの中で、これが唯一の合理的な原因であると思われたため、独自の TSS をセットアップしようとしました。
トリプルフォールトが生成されている理由は何ですか? すべてが明確で、手順に従っているように見えますが、それでもカーネル パニック攻撃が発生します。
memory-management - カーネルがユーザーページ用に別の仮想アドレスを持っているのはなぜですか?
私はこの声明について混乱しています:
http://web.stanford.edu/class/cs140/projects/pintos/pintos_4.html#SEC63から:
Pintos では、すべてのユーザー仮想ページがそのカーネル仮想ページにエイリアスされます。
カーネルはユーザー仮想アドレスを使用してユーザーページを参照でき、その上にカーネル仮想アドレスがあると思いました。たとえば、下の画像では、VAS 全体が 0 ~ 4GB であり、ユーザーの仮想アドレス空間は PHYS_BASE より下のアドレスに制限され、カーネルはそれより上のアドレスにもアクセスできるのではないでしょうか?
( http://web.stanford.edu/class/cs140/cgi-bin/section/10sp-proj3.pdfより)
ただし、PintOS のドキュメントが続いているため、これはどのように機能するようには見えません。
これらのエイリアスは何らかの方法で管理する必要があります。たとえば、コードで両方のアドレスのアクセス ビットとダーティ ビットをチェックして更新できます。別の方法として、カーネルは、ユーザー仮想アドレスを介してのみユーザー データにアクセスすることで、問題を回避することができます。
これは、カーネルが別のカーネル仮想アドレスを介してユーザー データにアクセスできることを意味します。2 つのアドレスが異なる理由はわかりません。
明確にしていただきありがとうございます。