問題タブ [os161]
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.
fork - os161 での fork システム コールの実装
os161 で fork 呼び出しを実装しようとしていますが、カーネルを実行した後、次のエラーが発生します。
私の sys_fork 関数の疑似フロー:
新しいアドレス空間を作成し、フレームをトラップします
新しいスレッド ポインタを宣言します -- ptrthread -- ここではメモリを割り当てていません
as_copy(コピー元→コピー先)
スレッド fork(name , new trapframe, (unsigned long)ptrthread->vmspace, forkentry function, ptrthread)
pid() を返す
擬似フォーク:
1.new trapframe = forkentry のトラップ フレーム arg
curthread->vmspace = forkentry の addrspace arg
actvate(curthread->vmspace)
新しいtrapframeにvardを設定する
mips_usermode....
カーネルを実行すると、次のエラーが発生し、カーネルが実行を停止します。
sys161: System/161 release 1.14, compiled Aug 24 2011 10:55:58
OS/161 base system version 1.11
Copyright (c) 2000, 2001, 2002, 2003
President and Fellows of Harvard College. All rights rescheduler: Dropping thread <boot/menu>.
panic: Assertion failed: SAME_STACK(curkstack-1, (vaddr_t)tf), at ../../arch/mips/mips/trap.c:220 (mips_trap)
sys161: 930837 cycles (827682k, 0u, 103155i)
sys161: 130 irqs 20 exns 0r/0w disk 0r/279w console 0r/0w/1m emufs 0r/0w net
sys161: Elapsed real time: 0.087962 seconds (10.5823 mhz)
sys161: Elapsed virtual time: 0.037233480 seconds (25 mhz)
process - システムコールのオーバーヘッド
システムコールの勉強を始めたばかりです。システムコールが行われたときのオーバーヘッドの原因を知りたいです。
たとえば、getpid() を考えると、システム コールが getpid() に対して行われるとき、コントロールが現在子プロセスにある場合、親プロセスに入って pid を取得するためにコンテキスト切り替えを行う必要があると思います。 . それはオーバーヘッドに貢献できますか?
また、getpid() が呼び出されると、ユーザー空間の境界を越えてメタデータが転送され、カーネルに出入りします。したがって、ユーザー空間とカーネルの間の絶え間ない切り替えもオーバーヘッドを引き起こしますか?
c - 2 つの .c ファイル間で 1 つの変数を共有するには?
可変アブロを考えてみましょう。2 つの .c ファイル間で abulo を共有しようとしています。これが私がしたことです-
- 作成ああ。このファイルには、extern int abulo; という行が含まれています。
- ac には、int abulo = 0; のようなステートメントが含まれています。
- bc には ah が含まれています。次に、あなたの値を出力する kprintf 関数があります。
しかし、コードを実行しようとすると、次のような出力が表示されます -
ここで与えられた受け入れられた答えのアイデアを使用しようとしました - How do I share variables between different .c files?
ここで何が間違っていますか?このエラーを取り除く方法は?
eclipse - ***セパレーターがありません。止まる。Eclipse が OS/161 を実行しようとしている間
13 行目 .include "$(TOP)/mk/os161.config.mk" で、OS161 ツールをインストールし、OS161 を Eclipse で実行しようとしていて、依存関係をコンパイルしていました。
os161 - OS/161 のシステム コール
システム コールがどのように実行されるかに関して、OS/161 のコードを調べています。私が見る限り、システム コール (例: reboot()
) は、実際には OS/161 カーネルによって への呼び出しに変換されますsys_reboot()
。同様に、fork()
への呼び出しは への呼び出しに変換されsys_fork()
ます。
私の理解は正しいですか?
ありがとう。
c - ポインターが理由もなく変化するのはなぜですか?
ops-classの割り当て 2 に取り組んでいます。
次の関数は、作成中のプロセス (ここで提供されるテスト プログラムのユーザー プロセスなど) のファイル ハンドラー配列をブートストラップします。
os161-gdb を使用してこの関数をステップ実行すると、次のことがわかります。
これが奇妙な部分です。kmalloc への 2 回目の呼び出し (stdoutfh を初期化するため) を実行した後、stdinfh->fh_vnode ポインターの値が変わります!
さらに奇妙なことに、次の行に進んだ後
*stdoutfh->fh_vnode と *stdinfh->fh_vnode の値は同じです
1 つの考えられる説明: OS に十分なヒープ メモリがありませんか。ありそうもないと思いますし、これを想定した後でも、ここで何が起こっているのかを正確に説明することはできません.
いくつかの余分なコード
- _fh_create
構造体 fh 定義
struct fh { uint32_t fd; // file descriptor int flag; // File handler mode off_t fh_seek; // seek position in file struct vnode **fh_vnode; // File object of the file }
struct vnode の定義はここにあります。
さらに情報が必要な場合はお知らせください。ご協力ありがとうございます。