问题标签 [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.
c - 如何在 OS/161 中添加新的系统调用?
我正在尝试在我的 OS/161 代码中添加一个新的系统调用,但我无法确定在哪里添加原型。我相信您应该将其添加到内核空间和用户空间,但我不确定将原型放入哪些文件中。是否有指南解释如何在 OS/161 中添加示例系统调用?
作为测试,我试图添加一个函数,printone()
当用户运行该程序时,它只会打印一个“1”。
operating-system - 页码和偏移量
我正在学习不同类型的内存管理。我不明白在虚拟地址中有偏移位的意义。还有为什么页面大小是由力量决定的2
?
我的主要困惑是:给我一个在指令中使用偏移量来访问某个虚拟地址的例子?
我的第二个困惑是:通常的说法是,如果逻辑地址的大小是
2^m
并且页面大小是2^n
,那么逻辑地址的高 mn 位指定页号。
operating-system - os161中的地址空间和页表有什么关系?
地址空间和页表有什么关系?我知道每个进程都应该有一个在虚拟地址到物理地址之间映射的页表。但是地址空间有什么作用呢?在 os161 中,地址空间如下所示:
我们使用以下方法将虚拟地址(vaddr)转换为物理地址:(假设 vaddr 在段 1)
似乎我们可以使用 addrespace 从虚拟地址中获取物理地址。如果我们可以使用 addrespace 来做虚拟到物理内存的映射,为什么我们需要页表呢?
期待您的帮助!谢谢!
linux - 尝试在 Mandriva 上构建 OS161 时出现“bmake:无系统规则 (sys.mk)”
我正在上一门操作系统课,我正在尝试在我们的 Mandriva 实验室机器上安装哈佛的 OS161。
我已经设置了工具链,但是当我尝试使用 bmake 构建源代码时,出现以下错误:
有谁知道如何解决这一问题?我相当确定这是 bmake 安装的问题,而不是源本身的问题。
gdb - 将调试信息添加到 os161
我正在尝试调试 os161,但由于缺少调试信息而遇到了麻烦。我的函数都没有行号信息,所以我可以执行“b lock_acquire”之类的操作,但是当我执行“s”时,它会显示“单步执行,直到退出没有行号信息的函数 lock_acquire。” 当我尝试执行“l lock_acquire”时,我也会收到“No line number known error”,得到“当前上下文中没有符号锁定”。当我在 lock_acquire 并输入“p lock”时。此外,当我键入 ptype curthread 时,它显示“数据变量,未找到调试信息”而不是有用的东西。我使用了这里的配置说明http://www.cdf.utoronto.ca/~csc369h/fall/docs/configure.shtml。
编辑:要启动 gdb,我输入
在一个窗口中,然后键入
在第二个窗口中。
c - thread_fork 在内核上工作
我正在研究主要不支持 C pthread 库的 OS161。我目前的目标是了解系统调用并运行一些简单的程序。
我的简单函数有以下代码:
int id = 1;
long id2 = 1;
int ret = thread_fork("myThread", (void *)id, id2, void (*function)((void *)id, id2), NULL);
`
对 thread_fork 的调用在哪里int thread_fork(const char *name,
void *data1, unsigned long data2,
void (*func)(void *, unsigned long),
struct thread **ret);
我在启动时更改了 conf.kern 文件以包含此文件,并更改了 main.c 以添加此函数调用。如果我删除线程调用,一切正常。
这不是实现线程代码的正确方法还是我在任何地方都出错了?
repository - os161 通过 cvs 提交更改
当我提交 cvs 时,我与服务器的连接被重置,我现在必须在恢复连接后关闭我的窗口,我再次尝试将我的更改提交给 cvs,它一直说
cvs commit: [14:18:31] waiting for MYUSERNAME lock in /home/USER..my folder path
我也搜索了 cvs abort 或类似的命令,但没有。
我现在该怎么办?
c - extern 关键字显示对我的函数的未定义引用
我有我的文件,我在其中声明了函数 function1 和 function2
include.h in /dir1/dir2/dir3/dir4/
我已经定义了所有的函数和变量
file include.c at path /dir1/dir2/dir3/dir5/
我在路径上使用这些功能
/dir1/drr2/dir3/dir6/
我的伪代码是...
编译后抛出以下错误:
我知道当我们使用 extern 时,我们必须编译这两个文件,但我目前正在使用 OS161,无法单独编译文件。我必须将所有操作系统文件编译在一起,然后将它们安装到内核中,最后启动它。
错误在哪里?
c - 在c中将内存声明为结构
我在一个文件中有一个结构 abc
我在其他文件中使用这个结构如下:
struct abc *t = kmalloc(sizeof(struct abc));
kmalloc 相当于 malloc
然后出现以下错误:
我哪里错了?
registry - prog name 和 argv 的 trapframe 寄存器值
我正在使用 os161,我想找到 char *program name 和 char **argv 的寄存器值以从 traframe 结构传递给 execv 系统调用
trapframe->tf_a1 存储 argv 值,但所有的数据类型都是 trapframe 中的 u_int32
我怎样才能找到它们?
谢谢