问题标签 [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.
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 课程下载它:
linux - 如何在堆和堆栈之间有一个保护页?
我在 xv6 中定义了一个向上的堆栈(它有一个向下的堆栈),并且想知道我如何在堆栈和堆之间放置一个保护页。我可以使用任何特定的系统调用吗?另外,如何保持一页地址空间始终位于堆栈和堆之间?
c - Ascii 或扫描码或某种键盘输入,其中 Backspace = 0x100
我正在使用 XV6 MIT 的开源操作系统。
试图弄清楚 BACKSPACE = 0x100 到底是什么?我想添加右箭头和左箭头等功能来控制控制台,但我找不到正确的数字来捕获它们。前任:
所以我的 Q 在什么表上是 BACKSPACE = 0x100 ?它不是 ASCII ...在扫描码上找不到它。在 Ubuntu 上尝试了 showkeys 命令,但没有运气。
任何有更多经验或碰巧上过 MIT 操作系统课程的人 :)
非常感谢 !
c - 用于教育目的的小型 c 编译器
是否有任何遵循 ansi c 扩展的小型 c 编译器,但它的 LOC 仍然少于 10,000。基本上,我正在尝试将这种小型编译器移植到一种称为 xv6 的教育操作系统内核中。谢谢。
c - xv6 添加系统调用,统计系统调用
编辑:
知道了
这是我所做的:
在 syscall.c 中:
在 sysproc.c 中:
好的,所以我正在努力实现一个简单的系统调用,它返回系统调用的次数。看起来很简单,但我遇到了一个我不明白的错误......
基本上,这就是我所做的:在 syscall.c 中有一个名为 syscall() 的函数,用于检查它是否是系统调用。我基本上已经声明了一个变量,并且每次调用这个函数时都会递增它。
syscall.c 中的 Var 声明:
系统调用()函数:
我得到的错误:
然后,在 sysproc.c 中,我有相同的 extern int 并在调用函数 numCalls 时简单地返回 int,如下所示:
sysproc.c 中的外部变量:
有问题的方法:
总之: numSysCalls 应该在调用(任何类型的)系统调用时递增-成功与否。
numSys 只返回数字,如果出错则返回 -1。
c - xv6 调度程序 - proc 从不!= 0
基本上,我正在为实现多级优先级队列的 xv6 内核实现调度程序。我遇到了一个我不明白的严重问题,我课程的助教不明白,而且我错过了这个项目的截止日期,所以现在帮助我不会给我任何加分 - 但我想知道为什么我有以下行为......
首先,这是我为 xv6更改的原始调度程序(为了比较 - 这不是我的实现):
新调度器的想法是这样的:在 ptable 中有一个填充了 proc 结构的数组。我将把这个 proc 数组中的每个元素都称为“p”,它们包含基本信息(例如它们拥有的“票证”数量,或者它的状态等)。我需要在一个时间片内运行所有高优先级 (HP) p,然后将它们的优先级更改为低。当没有 HP proc 时,我“随机”选择一个 LP proc 并运行它两个时间片。我的算法如下:
这就是问题所在...我的 proc 似乎总是等于 0。它从来没有看到 p 中的信息,没有从 p 收集 proc 信息等。我不知道为什么。
我用大量的打印输出语句进行了测试。我将首先在这里发布它的输出:
同样,不知道为什么这不起作用...我确定有多个错误,而且我有大量的打印输出语句只是为了看看哪里出了问题。这也需要相当多的调试工作,所以我不太乐观是否有人有答案......为此目的,并带有这些警告,这是我的整个调度程序功能。对不起,长...
c - xv6 中的 cgaputc(int c) / uartputc(int c) / constputc(int c) 有什么区别?
在 xv6 MIT 操作系统中,我试图了解/xv6/console.c中的几个 putc 函数有什么不同
- 静态无效 cgaputc(int c)。
- 无效 uartputc (int c)。
- 静态无效 constputc(int c)。
谢谢!
linux - 在 linux mint 16 x64 上安装 xv6
尝试在 linux mint 16 64bit 上制作xv6时出现错误。这是 linux mint 的新安装,因此我可能缺少一些库,我只是找不到哪个.. 这是错误:
谢谢
pwd - 为什么 iget() 隐藏在 xv6 中
我正在玩xv6,这是 Unix 版本 6 的现代实现。
对于我的第一次 hack,我想实现简单的getcwd
系统调用,但是对于我应该使用哪个抽象级别有点迷茫。
- 我应该使用
struct file
界面吗? - 或者也许是
struct inode
界面? - 重要的是,它似乎甚至可以纯粹在用户空间中实现。
我开始通过struct inode
操作来实现它。我天真的想法是检索proc->cwd
,然后是readi()
它的第二个条目 ( ..
),扫描它以检索我以前inum
的 ,依此类推,直到我找到根。
看起来性能不是很好,但这适合第一次破解。
不过我的问题是我需要从sfs.c:iget()
中检索到 s 中的 a 。我注意到这是静态的,没有声明,这让我有点恼火,但我找不到原因。struct inode
inum
dirent
iget()
fs.c
defs.h
所以,这是我的问题。为什么它iget()
被故意隐藏在内核的其余部分之外?