XV6でタイマ割り込みはどのように発生しますか?
thread_schedule()thread_yield()現在のスレッドのレジスタと状態を保存し、次のスレッドのレジスタと状態をロードすることが目的である、などの関数を使用してスレッド切り替えを実装しました。 これで、タイマー割り込みを使用してxv6で同じことをしたいのですが、どのように機能するのかわかりません。 ...
thread_schedule()thread_yield()現在のスレッドのレジスタと状態を保存し、次のスレッドのレジスタと状態をロードすることが目的である、などの関数を使用してスレッド切り替えを実装しました。 これで、タイマー割り込みを使用してxv6で同じことをしたいのですが、どのように機能するのかわかりません。 ...
char buf[1024]; void grep(char *pattern, int fd) { int n, m; char *p, *q; m = 0; while((n = read(fd, buf+m, sizeof(buf)-m-1)) > 0){ m += n; buf[m] = '\0'; p = buf; while((q = strchr(p, '\n')) != 0){ *q = 0; if(match(pattern, p)){ *q ...
ユーザープロセスがカーネルアドレス空間にデータを書き込んだり変更したりできない理由は、かなり明白です。しかし、なぜ彼らがデータを読み取ることができないのかわかりません。この場合、分割罠があることを知っていますが、その理由は何ですか? ユーザープロセスがカーネルアドレス空間のデータのみを読み取ることができる場合、どのような問題が発生しますか? 事前にありがとう ...
MITソースを読んでいます。xv6オペレーティングシステム。クリップは次の始めに表示されますsh.c。 // Ensure that three file descriptors are open. while((fd = open("console", O_RDWR)) >= 0){ if(fd >= 3){ close(fd); break; } } 私はこれが次のように確認することを知っています。少なくとも新しく割り当てられたファイルディスクリプタが3より高い(または等しい)ことを確認して、3つ...
私はCのシェルプログラムの実装について読んでいます(MIT 6.828オペレーティングシステムエンジニアリングプロセスのxv6シェル)。 シェルの機能はmain()次のコードで始まります。 //Assumes three file descriptors open while((fd = open("console", O_RDWR)) >= 0){ if(fd >= 3){ close(fd) break; } } 以下は、上記のコードを説明するxv6本の引用です。 シェルは、コン...
背景:仮想化にQEMUを使用しています。xv6-riscvWSL2の上にあります。私はLinuxコマンドを連想させるようなきちんとしたオペレーティングシステムのシャットダウンプロセスを作成しようとしていますexit。私は現在qemuを終了するためにCtrl-を使用していますが、a xオペレーティングシステム内でプログラム的にこれを行うことができることを願っています。 私はLinuxexitコマンドが現在シェルを閉じていることを知っています。つまり、アクティブシェルが残っているかどうかを検出するカーネル空間方法と、QEMUが閉じていることを知らせる方法が必要で...
私はオペレーティングシステムに興味があります。それで、オペレーティングシステムについて学ぶためにxv6の本を読んでいます。このトピックに関する私の最初の本です。理解できない一行を読みました。 内部的には、xv6カーネルはファイル記述子を各プロセステーブルのインデックスとして使用するため、各プロセスは0から始まるファイル記述子の専用スペースを持ちます。 ファイル記述子は、書き込みまたは読み取り可能なデータストリームを表すと思います。プロセステーブルとはどのような関係がありますか?ファイル記述子テーブルは、開かれたファイルリソースを表すプロセスメモリ...