问题标签 [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 投票
1 回答
2062 浏览

c - 数字后跟大写 L

是什么512L意思?(或者可能是任何数字后跟大写 L)

例子:

uint sec 然后是一些带有表达式的代码: sec * 512L

(从XV6代码中取出 - mkfs.c)

0 投票
1 回答
4552 浏览

qemu - Qemu下无法运行xv6

我想xv6在 .I 上启动(基于 unix 的操作系统)。Qemu我从源代码编译它并安装 qemu,但是当我输入make qemu终端时,我收到以下错误:

但是 qemu 运行(带有轻弹)并写入:no bootable device在此处输入图像描述

我也在SO 中阅读了这个讨论,但没有解决我的问题。注意:首先 qemu 找不到 QEMU 可执行文件,根据此链接#QEMU=,我通过更改with来解决我的问题,QEMU = /usr/bin/qemu-system-i386然后我遇到了这个问题。

编辑:我终于找到了解决方案。我的 XV6 源代码有问题(我不知道是什么?)然后我使用以下命令从 MIT OS 课程下载它:

0 投票
1 回答
1892 浏览

linux - 如何在堆和堆栈之间有一个保护页?

我在 xv6 中定义了一个向上的堆栈(它有一个向下的堆栈),并且想知道我如何在堆栈和堆之间放置一个保护页。我可以使用任何特定的系统调用吗?另外,如何保持一页地址空间始终位于堆栈和堆之间?

0 投票
1 回答
953 浏览

c - Ascii 或扫描码或某种键盘输入,其中 Backspace = 0x100

我正在使用 XV6 MIT 的开源操作系统。

试图弄清楚 BACKSPACE = 0x100 到底是什么?我想添加右箭头和左箭头等功能来控制控制台,但我找不到正确的数字来捕获它们。前任:

所以我的 Q 在什么表上是 BACKSPACE = 0x100 ?它不是 ASCII ...在扫描码上找不到它。在 Ubuntu 上尝试了 showkeys 命令,但没有运气。

任何有更多经验或碰巧上过 MIT 操作系统课程的人 :)

非常感谢 !

0 投票
3 回答
2302 浏览

c - 用于教育目的的小型 c 编译器

是否有任何遵循 ansi c 扩展的小型 c 编译器,但它的 LOC 仍然少于 10,000。基本上,我正在尝试将这种小型编译器移植到一种称为 xv6 的教育操作系统内核中。谢谢。

0 投票
0 回答
8667 浏览

c - xv6 添加系统调用,统计系统调用

编辑:

知道了

这是我所做的:

在 syscall.c 中:

在 sysproc.c 中:


好的,所以我正在努力实现一个简单的系统调用,它返回系统调用的次数。看起来很简单,但我遇到了一个我不明白的错误......

基本上,这就是我所做的:在 syscall.c 中有一个名为 syscall() 的函数,用于检查它是否是系统调用。我基本上已经声明了一个变量,并且每次调用这个函数时都会递增它。

syscall.c 中的 Var 声明:

系统调用()函数:

我得到的错误:

然后,在 sysproc.c 中,我有相同的 extern int 并在调用函数 numCalls 时简单地返回 int,如下所示:

sysproc.c 中的外部变量:

有问题的方法:

总之: numSysCalls 应该在调用(任何类型的)系统调用时递增-成功与否。

numSys 只返回数字,如果出错则返回 -1。

0 投票
1 回答
3689 浏览

c - xv6 调度程序 - proc 从不!= 0

基本上,我正在为实现多级优先级队列的 xv6 内核实现调度程序。我遇到了一个我不明白的严重问题,我课程的助教不明白,而且我错过了这个项目的截止日期,所以现在帮助我不会给我任何加分 - 但我想知道为什么我有以下行为......

首先,这是我为 xv6更改的原始调度程序(为了比较 - 这不是我的实现):

新调度器的想法是这样的:在 ptable 中有一个填充了 proc 结构的数组。我将把这个 proc 数组中的每个元素都称为“p”,它们包含基本信息(例如它们拥有的“票证”数量,或者它的状态等)。我需要在一个时间片内运行所有高优先级 (HP) p,然后将它们的优先级更改为低。当没有 HP proc 时,我“随机”选择一个 LP proc 并运行它两个时间片。我的算法如下:

这就是问题所在...我的 proc 似乎总是等于 0。它从来没有看到 p 中的信息,没有从 p 收集 proc 信息等。我不知道为什么。

我用大量的打印输出语句进行了测试。我将首先在这里发布它的输出:

同样,不知道为什么这不起作用...我确定有多个错误,而且我有大量的打印输出语句只是为了看看哪里出了问题。这也需要相当多的调试工作,所以我不太乐观是否有人有答案......为此目的,并带有这些警告,这是我的整个调度程序功能。对不起,长...

0 投票
2 回答
1541 浏览

c - xv6 中的 cgaputc(int c) / uartputc(int c) / constputc(int c) 有什么区别?

在 xv6 MIT 操作系统中,我试图了解/xv6/console.c中的几个 putc 函数有什么不同

  1. 静态无效 cgaputc(int c)。
  2. 无效 uartputc (int c)。
  3. 静态无效 constputc(int c)。

谢谢!

0 投票
1 回答
368 浏览

linux - 在 linux mint 16 x64 上安装 xv6

尝试在 linux mint 16 64bit 上制作xv6时出现错误。这是 linux mint 的新安装,因此我可能缺少一些库,我只是找不到哪个.. 这是错误:

谢谢

0 投票
2 回答
570 浏览

pwd - 为什么 iget() 隐藏在 xv6 中

我正在玩xv6,这是 Unix 版本 6 的现代实现。

对于我的第一次 hack,我想实现简单的getcwd系统调用,但是对于我应该使用哪个抽象级别有点迷茫。

  • 我应该使用struct file界面吗?
  • 或者也许是struct inode界面?
  • 重要的是,它似乎甚至可以纯粹在用户空间中实现。

我开始通过struct inode操作来实现它。我天真的想法是检索proc->cwd,然后是readi()它的第二个条目 ( ..),扫描它以检索我以前inum的 ,依此类推,直到我找到根。

看起来性能不是很好,但这适合第一次破解。

不过我的问题是我需要从sfs.c:iget()中检索到 s 中的 a 。我注意到这是静态的,没有声明,这让我有点恼火,但我找不到原因。struct inodeinumdirentiget()fs.cdefs.h

所以,这是我的问题。为什么它iget()被故意隐藏在内核的其余部分之外?