问题标签 [pintos]
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.
operating-system - 每个进程都有自己的页面目录吗?
我知道每个进程都有自己的用于 VPN 到 PPN 映射的页表。但是他们也有单独的页面目录吗?
c - 在 pagedir_get_page() 中理解用户、内核和物理地址之间的关系
我对以下评论感到困惑:
我理解第一句话是找到实际的物理地址,但是,我不明白为什么会返回与该地址相对应的内核虚拟地址。总之,既然 uaddr 是一个用户虚拟地址,那它为什么和内核虚拟地址有关呢?
提前致谢。
pointers - 从中断处理程序内的用户堆栈中弹出值
我正在尝试在 Pintos 中实现系统调用的处理程序。在引发中断之前,系统调用的参数按以下方式推送:
我有一个结构,它包含所有被推送的寄存器,还有一个指向用户级堆栈的指针(系统调用号和参数被推送到该堆栈上)。
我现在想得到这些论点。堆栈上的所有指针都是 4 字节大小,所以我认为我可以简单地将参数(取消引用的指针)转换为相应的类型,然后将堆栈指针增加 4 并转换下一个指针。
我有以下问题:
pushl 指令将值推入堆栈是否正确?所以我应该能够简单地通过取消引用指向堆栈的指针来获得这些值?例如,要获取第一个参数(假设这是一个 int),我将使用 (int) *(f->esp + 4),其中 f 是指向结构 intr_frame 的指针,我添加 4 因为系统调用号是第一个堆栈上的元素。现在的问题是在 C 中不允许对 void 指针进行指针运算,并且参数可以是不同的类型,所以任何人都可以就如何从堆栈中弹出这些参数提供任何建议吗?
operating-system - ./pintos run alarm-multiple 命令不创建线程
我在虚拟机上运行 ubuntu 版本 18.04.3。我一直在尝试在 qemu 上安装 pintos,但是当我运行./pintos run alarm-multiple
我的 qemu 时,加载时卡住了。我得到以下输出:
**警告:未为“/tmp/5XpQ2ee16J.dsk”指定图像格式,并且探测猜测为原始格式。
自动检测格式对于原始图像是危险的,块 0 上的写入操作将受到限制。明确指定“原始”格式以消除限制。
qemu-system-x86_64:警告:TCG 不支持请求的功能:
CPUID.01H:ECX.vmx [位 5]
皮洛hda1
加载中…………
内核命令行:运行alarm-multiple
Pintos 启动时使用**
pintos 启动后什么都没有
pintos - 使用 Ubuntu 克隆 Pintos
我正在尝试在 Ubuntu 上开始做 Pintos Stanford 项目。我下载了斯坦福网站提供的 tar 文件,但是当我尝试运行时
我收到以下错误:
我在另一个 stackoverflow 帖子上发现我应该从最新版本的 pintos 中提取:
但是这样做会给我一个错误:
我不确定从这里去哪里,并且可以使用一些见解来解决这些问题中的任何一个。我真的不知道从这里去哪里。
c - 在 Ubuntu 19.10 上
我正在尝试在我的 Ubuntu 19.10 机器上使用PintOS,但是我在使用这个库时遇到了问题,做了一些研究,显然stropts.h 是 POSIX XSR选项的一部分,现在 Linux 表示它不受支持。
我的问题是,我可以以某种方式在我的 Ubuntu 19.10 上完成这项工作吗?试图在降级到 16.04 之前弄清楚这一点,这与 PintOS 完美配合。
assembly - 如何使用 objdump 查找导致崩溃的指令
嗨,我正在做有关使用 Pintos 的操作系统的作业。我被要求在一项测试中找出错误指令。测试框架期望 Pintos 输出“do-nothing: exit(162)”。这是进程退出时 Pintos 打印的标准消息。但是,Pintos 没有输出此消息;相反,由于内存访问冲突(分段错误),无操作程序在用户空间中崩溃。
我查看了这个测试的结果,
问题:
- 程序试图从用户空间访问哪个虚拟地址导致它崩溃? A:从结果文件来看,我认为是 0xc000008
- 导致崩溃的指令的虚拟地址是什么? A:eip = 0x8048757,是指令的虚拟地址。
- 要进行调查,请使用 objdump 反汇编无操作的二进制文件。程序崩溃时所在的函数的名称是什么?将该函数的反汇编代码复制到 Gradescope 上,并确定程序崩溃的指令。
我不知道如何找到 3. 问题的答案,“objdump -S do-nothing.o”的输出非常简单:
A:
- 找到您在上面确定的函数的 C 代码。对于#3 中反汇编函数中的每条指令,用几句话解释为什么它是必要的和/或它试图做什么。
- Why did the instruction you identified in #3 try to access memory at the virtual address you identified in #1? Don’t explain this in terms of the values of registers; we’re looking for a higher level explanation. A: I found the faulting instruction but I'm even more confused,
**why would this instruction lead to segmentation fault? **
Firstly it allocated some stack space (0x1c), then move the argument argv at 0x24(%esp) [which was 0x8 before stack pointer changed] to %eax, why would this simple instruction lead to segmentation fault?
ubuntu - 我在 pintos 中的测试格式错误
我是一名学习平托的学生。我现在正在实现系统调用,但测试格式存在一些问题。
chungsml@ubuntu:~/pintos/src/userprog$ cat build/tests/userprog/exec-once.result FAIL 测试输出未能匹配任何可接受的形式。
可接受的输出: (exec-once) begin (child-simple) run child-simple: exit(81) (exec-once) end exec-once: exit(0) `diff -u' 格式的差异:
- (执行一次)开始
- (儿童简单)运行儿童简单:退出(81)
- (exec-once) end exec-once: exit(0) chungsml@ubuntu:~/pintos/src/userprog$ cat build/tests/userprog/exec-once.output 复制测试/userprog/exec-once 到临时分区.. . 复制测试/userprog/child-simple 到临时分区... qemu-system-i386 -hda /tmp/UhGzKACMZ3.dsk -m 4 -net none -nographic -monitor null PiLo hda1 Loading........ . 内核命令行:-q -f extract run exec-once Pintos booting with 4,096 kB RAM...内核池中有383页可用。用户池中有 383 个页面可用。正在校准计时器... 209,510,400 次循环/秒。hda: 5,040 个扇区 (2 MB), 型号 "QM00001", 串行 "QEMU HARDDISK" hda1: 147 个扇区 (73 kB), Pintos OS 内核 (20) hda2: 4,096 个扇区 (2 MB), Pintos 文件系统 (21) hda3 : 197 个扇区 (98 kB), Pintos scratch (22) filesys: using hda2 scratch: using hda3 格式化文件系统...完成。开机完成。将ustar存档从临时设备提取到文件系统...将“exec-once”放入文件系统...将“child-simple”放入文件系统...擦除ustar存档...执行“exec-once” : child-simple: exit(81) exec-once: exit(0) 'exec-once' 的执行完成。定时器:71 滴答线程:30 个空闲滴答,39 个内核滴答,2 个用户滴答 hda2(filesys):124 次读取,400 次写入 hda3(暂存):196 次读取,2 次写入控制台:923 个字符输出键盘:0 键按下异常:0页面错误正在关闭... 完全的。定时器:71 滴答线程:30 个空闲滴答,39 个内核滴答,2 个用户滴答 hda2(filesys):124 次读取,400 次写入 hda3(暂存):196 次读取,2 次写入控制台:923 个字符输出键盘:0 键按下异常:0页面错误正在关闭... 完全的。定时器:71 滴答线程:30 个空闲滴答,39 个内核滴答,2 个用户滴答 hda2(filesys):124 次读取,400 次写入 hda3(暂存):196 次读取,2 次写入控制台:923 个字符输出键盘:0 键按下异常:0页面错误正在关闭...
这是一些测试结果。我认为该程序确实按我的意愿工作。但是输出包含对测试无用的信息..有什么问题???