問題タブ [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.
linux - ヒープとスタックの間にガードページを配置するには?
xv6 で上向きのスタック (下向きのスタックがあった) を定義しましたが、スタックとヒープの間にガード ページを配置する方法を知りたいです。利用できる特定のシステムコールはありますか? また、その 1 ページのアドレス空間を常にスタックとヒープの間に配置するにはどうすればよいですか?
c - バックスペース = 0x100 の場合の Ascii またはスキャンコード、またはある種のキーボード入力
XV6 MIT のオープン ソース OS を使用しています。
BACKSPACE = 0x100 ができる地球上で把握しようとしていますか? 右矢印や左矢印などの機能を追加してコンソールを制御したいのですが、それらをキャプチャするための正しい数字が見つかりません。元:
それで、私の Q はどのテーブルにあり、 BACKSPACE = 0x100 ですか? ASCII ではありません ... スキャンコードで見つかりませんでした。Ubuntuでshowkeysコマンドを試しましたが、うまくいきませんでした。
もう少し経験のある人、またはたまたまオペレーティングシステムのMITコースを受講した人:)
どうもありがとう !
c - xv6 スケジューラ - proc never != 0
基本的に、マルチレベルのプライオリティ キューを実装する xv6 カーネル用のスケジューラを実装しています。私は理解できない深刻な問題を抱えており、私のコースの TA は理解していません。また、このプロジェクトの締め切りに間に合わなかったので、今私を助けても追加ポイントは得られませんが、知りたいです。なぜ私は次のような行動をとっています...
まず、これは私がxv6 用に変更している元のスケジューラです(比較のために - これは私の実装ではありません)。
新しいスケジューラのアイデアは次のとおりです。ptable 内に proc 構造体で満たされた配列があります。この proc 配列でこれらの各要素を 'p' と呼び、基本情報 (持っている「チケット」の数や状態など) を保持します。1 つのタイム スライスですべての優先度の高い (HP) p を実行してから、それらの優先度を低に変更する必要があります。HP proc がない場合、「ランダムに」LP proc を選択し、それを 2 つのタイム スライスで実行します。私のアルゴリズムは次のとおりです。
ここに問題があります... 私の proc は常に 0 に等しいように見えます。p に入れられた情報を見たことがない、p から proc 情報を収集していないなどです。理由はわかりません。
私は大量の出力ステートメントでテストしました。その出力を最初にここに投稿します。
繰り返しますが、なぜこれが機能しないのかわかりません...複数のエラーがあると確信しており、どこで問題が発生しているかを確認するためだけに大量のステートメントを出力しています。これにはかなりのデバッグ作業も必要なので、誰かが答えを持っているかどうかについて私はあまり楽観的ではありません...その目的のために、これらの警告とともに、ここに私のスケジューラ関数全体を示します。長々とすみません…
c - xv6 の cgaputc(int c) / uartputc(int c) / constputc( int c) の違いは何ですか?
xv6 MIT オペレーティング システムでは、/xv6 /console.cのいくつかの putc 関数の違いを理解しようとしています。
- static void cgaputc(int c)。
- void uartputc (int c)。
- static void constputc(int c)。
ありがとう!
pwd - xv6 で iget() が隠されている理由
Unix バージョン 6 の最新の実装であるxv6で少し遊んでいます。
私の最初のハックでは、単純な syscall を実装したかったのgetcwd
ですが、どのレベルの抽象化を使用すればよいかについて少し迷っています。
struct file
インターフェイスを使用する必要がありますか?- それとも
struct inode
インターフェイス? - 重要なのは、純粋にユーザーランドに実装することさえできるようです。
struct inode
私は操作でそれを実装し始めました。私の素朴な考えは、 を取得しproc->cwd
、次にreadi()
その 2 番目のエントリ ( ..
) を取得し、それをスキャンして前inum
の を取得する、というように、ルートに到達するまで再帰的に繰り返すというものでした。
パフォーマンスはあまり高くないようですが、最初のハックには適しています。
私の問題は、 s で取得した sからfs.c:iget()
a を取得する必要があることです。私はそれが static で宣言されていないことに気付きましたが、これは私を少し悩ませますが、その理由を見つけることができません。struct inode
inum
dirent
iget()
fs.c
defs.h
これが私の質問です。iget()
カーネルの残りの部分から故意に隠されているのはなぜですか?