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 ...
为什么用户进程无法在内核地址空间上写入或修改数据似乎相当明显。但我不明白为什么他们甚至无法读取数据。我知道在这种情况下会出现分段陷阱,但其背后的原因是什么? 如果用户进程只能读取内核地址空间上的数据,会出现什么问题? 提前致谢 ...
我正在阅读麻省理工学院的来源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 个文件描述符(大概用于 stdin、stdout 和 stderr)。 1)如何可能op...
我正在阅读 C 语言的 shell 程序实现(来自 MIT 6.828 操作系统工程课程的 xv6 shell)。 该 shell 的函数main()以以下代码开始: //Assumes three file descriptors open while((fd = open("console", O_RDWR)) >= 0){ if(fd >= 3){ close(fd) break; } } 这是 xv6 书中的一段引用,它解释了上面的代码: “shell 确保它始终打开三个文件...
背景:我正在使用 QEMU 进行虚拟化xv6-riscv在 WSL2 之上。我正在寻找创建某种干净的操作系统关闭过程,让人想起 Linux 的exit命令。目前我正在使用Ctrl-a x来终止 qemu,但我希望能够在操作系统内以编程方式执行此操作。 我知道 Linuxexit命令只是关闭当前的 shell,这意味着我需要一种内核空间方法来检测是否还有任何活动的 shell,以及一种向 QEMU 发出信号表示它正在关闭的方法。我可以完全访问内核以进行重新编译,但我无法使用外部 C 库,因为没有。我开发的任何解决方案都必须基本上从头开始。 因此,我的问题是:操...
我对操作系统感兴趣。所以我正在阅读 xv6 这本书来了解操作系统。这是我关于这个主题的第一本书。我读了一行我无法理解的内容。 在内部,xv6 内核使用文件描述符作为每个进程表的索引,以便每个进程都有一个从零开始的文件描述符的私有空间。 我认为文件描述符代表可以写入或读取的数据流。它如何与进程表联系起来?文件描述符表不是进程内存的一部分,代表其打开的文件资源吗? 提前致谢! ...