問題タブ [xv6]
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.
xv6 - xv6 で新しいスケジューラを作成する方法は?
私は XV6 を初めて使用するので、しばらくお待ちください :D . 新しいスケジューラーを作成したいのですが、それはマルチレベル フィードバック キュー (MLFQ) の 2 つのスケジューラーと宝くじスケジューラーの 2 つを組み合わせたものです。
基本的な考え方は単純です。最初にジョブを優先度の高いキューに入れる 2 レベルのスケジューラを構築します。ジョブが最初のキューでタイム スライスを使用する場合は、それを優先度の低いキューに移動します。優先度の低いキューのジョブは、CPU を解放する前に 2 つのタイム スライスで実行する必要があります。キューに複数のジョブがある場合、各ジョブはチケットの数に比例して実行する必要があります。プロセスが持っているチケットが多いほど、より多くのプロセスが実行されます。タイム スライスごとに、無作為化された宝くじが宝くじの勝者を決定します。その勝利プロセスは、そのタイム スライスで実行されるプロセスです。
このスケジューラを実装するには、いくつかの新しいシステム コールが必要です。
最初は int settickets(int num) で、呼び出しプロセスのチケット数を設定します。デフォルトでは、各プロセスは 1 つのチケットを取得する必要があります。このルーチンを呼び出すと、プロセスが受け取るチケットの数を増やすことができるため、より高い割合の CPU サイクルを受け取ることができます。このルーチンは、成功した場合は 0 を返し、それ以外の場合は -1 を返します (たとえば、ユーザーが 1 未満の数値を渡した場合)。
2 つ目は int getpinfo(struct pstat *) です。このルーチンは、実行中の各プロセスに関する基本的な情報を返します。これには、実行するように選択された回数とそのプロセス ID、プロセスがどのキューにあるか (高いか低いか) が含まれます。
何か助けはありますか?助けてくれる任意のリンク。
c - XV6 - ループ用スケジューラ
私は xv6 に新しいスケジューラを実装する作業を行っています。そのためには、最初にどのように機能するかを理解する必要があります。有線の問題に直面しています。つまり、for ループ ループがプロセスをスローする方法を本当に理解できません。
これは元のコードです:
だから私は簡単なことを試しました、私はforループを作りました.1番目のものはループしてすべてのprocをスローし、他に何もせずにそれらをカウントする必要があります.2番目のものは元のものと同じようにループして実行する必要があります.期待どおりに機能しませんでした。何が起こっているのかというと、最初の for ループから 1 サイクル実行し、次に 2 番目から 1 サイクル実行するということです。
} }
そして出力はそのようなものです、
なぜそれが起こっているのですか?
c - C 機能説明
誰かがこの関数の構文を説明してくれませんか? ここで、SYS_fork は定数で、sys_fork は関数です。
ありがとうございました!
c - LCG に基づく疑似乱数ジェネレーター
xv6 で疑似乱数ジェネレーターを実装したいと考えています。線形合同ジェネレーターアルゴリズムを実装しようとしていますが、それをシードする方法がわかりません。これが私のコードの一部です。X はグローバルに変更されていないため、このコードが機能しないことはわかっています。私はそれを行う方法を理解していません。
scheduler - xv6 のスケジューラ
xv6 で MLFQ と宝くじスケジューラを組み合わせて実装しようとしています。私が遭遇している問題は、キュー内の優先度の高いプロセスの総数とそれらのチケットの合計を計算する関数を作成していることです。ループ内で no_of_tickets を出力すると、正しい値が出力されます。しかし、戻り値の前に印刷しているとき。ゼロを出力し、永久ループに入ります。これが私のコードです
xv6 - XV6 OS でプロセスが呼び出したときに特定のシステム コールのカウントを取得するシステム コールを追加する方法
XV6 に getcount(system call) というシステム コールを追加するのを手伝ってくれる人はいますか? 引数システムコールがあります。プロセスによってシステムコールが行われるたびに、カウントを増やし、カウントを追跡する必要があります。プロセスの完了後に表示されるはずです。
operating-system - limit や base などのフィールドが os の gdt に別々に保存されるのはなぜですか?
rt、たとえば xv6 コード mmu.h では、segdesc は次のように設計されています
base が base_15_0、base_23_16、base_31_24 として定義されているのに、'uint base' ではないのはなぜですか?
各サブフィールドには特別な意味があるため、全体としてではなく個別に保存するとアクセスが便利になることも一因だと思います。しかし、その推測が完全で正しいかどうかはわかりません
c - 4 文字を整数として解釈する
n ランダムバイトを返す関数があります。テストのために、4 つのランダム バイトを生成し、整数の 4 バイトをランダム バイトとして割り当てたいと考えました。機能するものがありますが、やろうとしていることに対して構文が多すぎるようです。それが本当に必要なのか、それとももっと良い方法でできるのかを知りたかっただけです
注: これはxv6で行われています。include