os161相关内容

thread_fork 在内核上工作

我在 OS161 上工作,主要不支持 C pthread 库.我目前的目标是了解系统调用并运行一些简单的程序. 我的简单函数有以下代码: int id = 1; long id2 = 1; int ret = thread_fork("myThread", (void *)id, id2, void (*function)((void *)id, id2), NULL); ..
发布时间:2021-06-23 18:34:36 其他开发

页码和偏移量

我正在学习不同类型的内存管理.我不明白在虚拟地址中有偏移位的意义.还有为什么页面大小是 2 的幂? 我的主要困惑是:给我一个在指令中用于访问某个虚拟地址的偏移量的例子? 我的第二个困惑是:通常的说法是,如果逻辑地址的大小为2^m,页面大小为2^n,那么逻辑地址的高位 mn 位指定页码. 解决方案 我认为您的主要和次要混淆是由于对该主题的普遍混淆造成的 :) 让我谈谈这个问 ..
发布时间:2021-06-12 20:36:41 其他开发

Makefile错误-"***缺少分隔符" & "***食谱在第一个目标之前开始".

我正在尝试为os161建立用户区.当我在命令行中键入make时,出现以下错误: Makefile 24:***缺少分隔符(您的意思是TAB而不是8个空格吗?).停止. 我在第24行检查了Makefile,并尝试将TAB添加到该行的开头,但这没有用,因为然后我又遇到了另一个错误: Makefile 24:***在第一个目标之前开始配方.停止. 以下是完整的makefile供参 ..
发布时间:2020-07-31 03:44:13 服务器开发

线程如何在禁用中断的情况下进入睡眠状态?

我试图了解以下代码的工作方式.这直接来自我的专业讲座幻灯片.这个P()和V()函数是我们在类(OS161)中使用的OS中信号量实现的一部分.我认为您可能需要了解OS161才能回答我的问题,因为它已被广泛使用,希望有人可以回答这个问题. 我对本代码的理解和讲义: X:P()函数的流程 1.当线程调用P()时,我们禁用中断 2.检查sem-> count 是否有可用资源 3.a)如果co ..

为什么每个进程一个页表

起初,我认为整个系统只有一个页表.但是每个进程实际上有一个页表吗?具有多个页面表而不是一个页面表的意义是什么? 我正在实现 os161 的一部分 解决方案 页表通常具有固定数量的条目,因此仅描述了整个虚拟地址空间的一部分.这就是为什么需要多个它们来覆盖整个地址空间的原因.现在,在许多操作系统中,进程具有单独的(即不与他人共享)虚拟地址空间,这有助于保护进程彼此之间.这是拥有多个页表的另 ..
发布时间:2020-05-21 19:02:45 其他开发

系统调用开销

我刚刚开始研究系统调用. 我想知道在进行系统调用时导致开销的原因. 例如, 如果我们考虑使用getpid(),则在对getpid()进行系统调用时,我的猜测是,如果控件当前在子进程中,则必须进行上下文切换以进入父进程以获取pid.这会增加开销吗? 另外,当调用getpid()时,将有一些元数据在用户空间边界上转移并进入和退出内核,那么在用户空间和内核之间的不断切换也会引起一些开销吗? ..