问题标签 [os161]

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 回答
5258 浏览

fork - os161中fork系统调用的实现

我正在尝试在 os161 中实现 fork 调用,但运行内核后出现以下错误:

我的 sys_fork 函数的伪流程:

  1. 创建新地址空间,陷阱帧

  2. 声明新的线程指针——ptrthread——我这里没有分配内存

  3. as_copy(源->目标)

  4. thread fork(name , new trapframe, (unsigned long)ptrthread->vmspace, forkentry 函数, ptrthread)

  5. 返回 pid()

伪分叉:

1.new trapframe = forkentry 的陷阱帧 arg

  1. curthread->vmspace = forkentry 的 addrspace arg

  2. 激活(curthread->vmspace)

  3. 在新的陷阱框中设置一些变量

  4. mips_usermode....

当我运行内核时发生以下错误并且内核停止执行:

sys161: System/161 release 1.14, compiled Aug 24 2011 10:55:58 OS/161 base system version 1.11 Copyright (c) 2000, 2001, 2002, 2003 President and Fellows of Harvard College. All rights rescheduler: Dropping thread <boot/menu>. panic: Assertion failed: SAME_STACK(curkstack-1, (vaddr_t)tf), at ../../arch/mips/mips/trap.c:220 (mips_trap) sys161: 930837 cycles (827682k, 0u, 103155i) sys161: 130 irqs 20 exns 0r/0w disk 0r/279w console 0r/0w/1m emufs 0r/0w net sys161: Elapsed real time: 0.087962 seconds (10.5823 mhz) sys161: Elapsed virtual time: 0.037233480 seconds (25 mhz)

0 投票
3 回答
10530 浏览

process - 系统调用开销

我刚开始研究系统调用。我想知道进行系统调用时导致开销的原因。

例如,如果我们考虑 getpid(),当对 getpid() 进行系统调用时,我的猜测是,如果控件当前在子进程中,则必须进行上下文切换才能进入父进程以获取 pid . 这会增加开销吗?

另外当getpid()被调用时,会有一些元数据跨越用户空间边界进出内核。那么用户空间和内核之间不断的切换会不会也造成一些开销呢?

0 投票
2 回答
202 浏览

semaphore - How semaphore value is checked using '==' operator?

A semaphore is declared and created like this --

Now what happens when,

the if condition is executed above ? since done was set to 0 do the statements inside the if block get executed ?

0 投票
1 回答
124 浏览

c - 如何在 2 个 .c 文件之间共享一个变量?

考虑一个变量 abulo。我正在尝试在 2 个 .c 文件之间共享 abulo。这是我所做的——

  1. 创建啊。此文件包含行 extern int abulo;
  2. ac 包含这样的语句,int abulo = 0;
  3. 在bc中,ah已经包括在内。然后只有一个 kprintf 函数打印你的值。

但是当我尝试运行代码时,它会向我显示这样的输出——

尝试使用此处给出的公认答案的想法-如何在不同的 .c 文件之间共享变量?

我在这里做错了什么?如何摆脱这个错误?

0 投票
1 回答
295 浏览

eclipse - ***缺少分隔符。停止。eclipse 尝试运行 OS/161 时

在第 13 行 .include "$(TOP)/mk/os161.config.mk" 我安装了 OS161 工具并尝试在 Eclipse 上运行 OS161 并正在编译依赖项。

0 投票
1 回答
1407 浏览

os161 - OS/161 中的系统调用

关于如何执行系统调用,我一直在浏览 OS/161 中的代码。据我所知,系统调用(例如reboot())实际上由 OS/161 内核转换为对sys_reboot(). 类似地,调用 tofork()将被转换为调用sys_fork().

我的理解正确吗?

谢谢。

0 投票
1 回答
153 浏览

c - Why is the pointer changing for no reason?

I am working on Assignment 2 of ops-class.

The following function bootstraps a file handler array for the process that is being created (eg. user processes for test programs provided here).

If I use os161-gdb to step through this function, I notice the following:

This is the strange part. After stepping through the second call to kmalloc (to init stdoutfh), the stdinfh->fh_vnode pointer changes value!

And even stranger, after proceeding to the following line

The value of *stdoutfh->fh_vnode and *stdinfh->fh_vnode IS THE SAME

1 possible explanation: Does the OS not have enough heap memory. I find it unlikely and even after assuming this, I can't exactly explain what is happening here.

Some extra code

  1. _fh_create
  2. struct fh definition

    struct fh { uint32_t fd; // file descriptor int flag; // File handler mode off_t fh_seek; // seek position in file struct vnode **fh_vnode; // File object of the file }

Definition of struct vnode can be found here.

Please let me know if you need more info and thanks for the help!

0 投票
2 回答
851 浏览

linux - Makefile 错误 - “***缺少分隔符”和“***recipe 在第一个目标之前开始”

我正在尝试为 os161 构建用户空间。当我在命令行中键入 make 时,出现以下错误:

Makefile 24:***缺少分隔符(您的意思是 TAB 而不是 8 个空格?)。停止。

我在第 24 行检查了 Makefile 并尝试在该行的开头添加一个 TAB,但这没有用,因为我得到了另一个错误:

Makefile 24: ***recipe 在第一个目标之前开始。停止。

这是完整的makefile供参考:

该行是问题(24)是:

任何帮助,将不胜感激。我检查了类似的 makefile 错误,但似乎找不到问题所在。

0 投票
0 回答
306 浏览

gdb - 使用 DDD 为 OS-161 设置 GDB

我正在设置 gdb 来调试 OS-161,并且我计划使用 DDD 作为可视化前端。我正在遵循官方 CS-161 课程页面的说明:http ://www.eecs.harvard.edu/~cs161/resources/eclipse.html (向下滚动到 DDD)。

在切换到我构建内核的内核/编译/DUMBVM 后,我启动 DDD ddd -debugger mips-harvard-os161-gdb --gdb kernel(因为 OS161 内核作为内核安装)。当我这样做时,DDD 会打开我的操作系统树的一个源文件。

然后在使用调试模式启动 sys161 后sys161 -w kernel,我输入target remote unix:os161/root/.sockets/gdbDDD,这给了我以下错误:unix:os161/root/.sockets/gdb: No such file or directory

什么可能导致此错误?我可以使用 .gdbinit 中的目标远程命令成功设置 gdb 而无需 DDD,因此我知道 .sockets 目录中的 gdb 文件存在并且有效。我怀疑的一件事是为什么启动 ddd 的初始命令会打开一个特定的源文件(每次都一样),这可以链接吗?

如果任何有 OS161 经验的人都知道如何使用 GUI 前端设置 gdb(不必严格使用 DDD)以简化调试(我不想使用 vim :/),那就太好了。

顺便说一句,如果有帮助,我正在使用 Debian Jessie。

0 投票
0 回答
54 浏览

os161 - os161 的良好调试器,如 IntelliJ IDEA

我正在使用 os161,但找不到像 IntelliJ IDEA 这样漂亮的调试器

你有什么想法吗?

我用 emacs 尝试过 gdb、ddd 和 gdb,但它们不如 IntelliJ