问题标签 [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.

0 投票
2 回答
2053 浏览

c - Shell 似乎可以识别命令但不执行它们

我正在尝试在类 unix xv6 OS 的 shell 程序中实现基本命令执行。我正在编辑的部分 shell 代码是 runcmd 函数,我在其中使用 execvp 命令执行终端中使用的命令。该程序在我编译时编译没有错误,但是当我尝试在命令行上键入命令时没有任何反应。我已经阅读了exec 命令的手册页,但我仍然不明白这些参数需要在 exec() 命令中传递的正确方式,或者我什么时候使用哪个版本的 exec()对操作系统编程来说还是很新的。

我在这里没有实现哪些需要添加才能执行命令?我有下面的 runcmd 函数的代码:

编辑:

我只是为每个命令添加了更多带有二进制文件路径的 exec 语句;但是,只有第一个 exec 命令有效(在本例中为 cd)。当我使用任何其他命令时,命令行会像执行 CD 一样执行它。如何让它适用于多个命令?

0 投票
1 回答
9293 浏览

c - 在 shell 中运行 cat 命令时文件描述符错误

我正在尝试在为类 Unix 操作系统 (xV6) 编写的 shell 中实现 I/O 重定向。在我正在阅读的操作系统手册中,我发现以下代码将在 shell 中运行以执行 cat 命令:

我修改了代码以在我的 shell 中运行,该 shell 的 argv 数组位于另一个函数中,但它保留了该功能。出于某种原因,当我运行cat < input.txtshell 输出时:

我还是操作系统编程的新手,所以我对 I/O 重定向的所有功能并不完全清楚,但我认为我拥有的代码应该可以工作。什么可能导致问题。我有以下 I/O 重定向的代码:

编辑

我做strace -e open ls了并得到:

编辑 2

出于某种原因,此案例的代码有效,但我不确定为什么:

0 投票
1 回答
8886 浏览

xv6 - 在 xv6 中访问当前正在运行的进程?

所以我试图想出一种可能的方法来访问 xv6 中当前正在运行的进程列表。我的想法是获得对 ptable 的访问权限,因此我可以循环遍历它并为所有正在运行的程序增加一个计数器。但是,如果我正在对其进行系统调用(因此写入 sysproc.c),我无法访问 ptable,因为它似乎(对我来说,我仍在四处寻找)是 proc 独有的。 C

无论如何我可以访问表以循环并查找正在运行的进程,还是我应该考虑另一种方法?

编辑:在头文件中创建一个计数器变量会更容易吗,每次创建进程时都会增加它,一旦进程退出就会减少它?

0 投票
1 回答
2580 浏览

xv6 - XV6 - usys.s 这个代码是做什么的?

我从未见过这种汇编语法。

0 投票
1 回答
7817 浏览

c - 如何在 xv6 中创建文件?

我需要将运行期间生成的数据保存在文件中以供以后分析。

xv6 实现了这种原始形式,我不知道它是如何工作的......

是否有捷径可寻?

0 投票
2 回答
5375 浏览

c - 在 proc.c XV6 OS 中创建、写入、读取文件

我想在 proc.c(内核模式)中创建一个文件并向其中写入一些内容,但是提供的系统调用(打开)是用于 user.h 标头中的用户模式,我不能在 proc.c 中包含 user.h,在 proc.c 中还有其他方法可以做到这一点吗?

0 投票
1 回答
225 浏览

c++ - xv6 操作系统中的进程迁移

我想编写一个程序,该程序可以在进程退出文件时保存进程的状态,而另一个程序可以重新加载该进程的状态并从它留在 xv6 操作系统中运行它。当您在调度程序中的进程之间进行更改时,例如保持进程的状态。

但问题是我是 xv6 操作系统的新手,我不知道从哪里开始。我想我可以做保存部分,但我不知道如何将进程状态重新加载到 CPU 中并运行它。

任何人都可以帮助我开始使用一些资源吗?
对 xv6 编程的任何帮助都会很好。

0 投票
1 回答
237 浏览

linux-kernel - xv6 引导加载程序内存范围

从 book-rev8(截至 2014 年 9 月 3 日的草案第 95 页),它说:

“引导加载程序本身位于0x7c00 through 0x7d00,但0x7d00 - 0x7c00不是(BIOS从磁盘读取)。256 bytes512 byes512 bytes

所以,我认为引导加载程序本身位于0x7c00 through 0x7e00,但我不确定我是否正确。

0 投票
2 回答
4381 浏览

c - xv6操作系统如何运行ac程序

我是 xv6 操作系统的新手,我想在 xv6 中运行 C 程序,是否有命令或其他东西来编译和运行 C 程序?

0 投票
1 回答
127 浏览

c - 在 XV6 中执行已停止的进程

我编写了两个新的系统调用并将它们添加到 xv6 操作系统内核。所以使用一个系统调用我可以保存进程状态,使用另一个我可以重新加载前一个状态并继续。问题出在重新加载部分


仅重新加载进程的上下文就足够了吗?(我的意思是struct context其中包含一些 CPU 寄存器)