问题标签 [osdev]

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

linux - Linux中的页表

问题 1:- 在引导过程中,Linux 会创建页表。但是,当一个新进程执行时,它也有自己的页表。这两张表有何不同?

问题 2:- 在 x86 架构上,Linux 使用定义明确的方案(包括页面目录、页表条目等)将线性地址转换为物理地址。假设我们在进程地址空间 A 中有一个线性地址 X,当使用页表进行转换时,它对应于物理地址 Y。还有一些其他进程 B 也有属于它自己的地址空间的有效线性地址 X。现在如果进程 B 想要访问 X,X 是否会再次对应相同的物理地址 Y?

0 投票
2 回答
2779 浏览

assembly - 在保护模式下进行间接远跳转/调用

如何在保护模式下执行间接远跳转/呼叫?首先,我认为这样做是允许的:

(不用担心段选择器。我的 GDT 的第二个条目是有效的代码段)

但是当 nasm 组装它时,这是一个语法错误。查看 Intel (instruction set reference) 手册的 Book 2a,只能使用jmp ptr16:32,其中ptr16:32是立即数,或使用jmp m16:32,其中m16:32是包含 48 位跳转地址的内存位置(16:32 )。

现在我尝试以这种方式对其进行编码:

它组装成功,但是当我尝试运行它时,处理器出现一般保护故障并重新启动。我不知道发生了什么。

我假设编码是这样的:

(例如我想使用间接跳转跳转到 0x10:0x8010)

这可能有什么问题?是不是应该用小端编码48位内存值?它应该这样编码吗?

我还没试过做最后一个。

0 投票
2 回答
6568 浏览

c - 在 C 中访问过程的 PCB

我在 Linux 中工作,我有点困惑,我是否可以访问进程的 PCB?如果是,那么我们可以访问它的哪些内容并将它们打印到终端上,如果不是,那为什么不呢?

谢谢回答 .....

0 投票
1 回答
1185 浏览

assembly - 在软盘映像文件中使用 grub 在 bochs 中启动您自己的内核

基本上我已经按照这里的说明http://sig9.com/bochs-grub创建了一个裸映像文件,它什么都不做,只是让 BIOS 启动 GRUB。

问题是:

  • 我正在编写的内核将是 32 位的,首先使用http://www.jamesmolloy.co.uk/tutorial_html/index.html,但我的主机(物理)机器是 x86_64,bochs 配置如下:

    ./configure --prefix=/usr --enable-vbe --without-wx --enable-cpu-level=6 \ --enable-fpu \ --enable-plugins --enable-x86-64 --enable -smp \ --enable-long-phy-address --enable-debugger --enable-disasm --enable-debugger-gui \ --enable-raw-serial --enable-vmx --enable-x86-debugger - -启用-iodebug

所以我不确定这是否可行,即使在解决了下一个问题之后:

  • 当我启动 bochs 时,grub shell 不会启动。

我得到的是:

有谁知道我做错了什么?

我怀疑按照http://sig9.com/bochs-grub的说明将主机的 64 位 grub 二进制文件复制到应该是 32 位仿真系统的 floppy.img 上。

0 投票
2 回答
1728 浏览

memory-management - 简单的玩具操作系统内存管理

我正在用 C 和汇编开发一个简单的小玩具操作系统作为实验,但我开始担心自己对系统内存缺乏了解。

我已经能够编译内核,在 Bochs(由 GRUB 加载)中运行它,并让它打印“Hello, world!” 现在我开始尝试制作一个简单的内存管理器,这样我就可以开始尝试其他东西了。

我找到了一些关于内存管理的资源,但他们并没有足够的代码可以关闭(因为我理解了这个概念,但我不知道如何实现它)。

我尝试了一些或多或少复杂的策略,然后选择了一个非常简单的策略(只需在内存中保留一个偏移量并根据分配对象的大小增加它),直到需要更改。还没有碎片控制、保护或任何东西。

所以我想知道当我确实需要一个更强大的经理时,我可以在哪里找到更多信息。而且我还想了解更多关于分页、分段和其他相关内容的信息。到目前为止,我还没有处理过分页,但我在操作系统开发站点中经常提到它,所以我猜我迟早会处理它。

我还阅读了某种形式的间接指针,其中应用程序持有一个由内存管理器重定向到其实际位置的指针。我敢肯定,这对我来说还有很长的路要走,但如果我想尝试虚拟内存或碎片整理似乎很重要。

而且,我应该把我的记忆偏移量放在哪里?我不知道最好的位置是什么,所以我只是随机选择了0x1000,而且我确信稍后当我覆盖我的内核或其他东西时它会回到我身边。

我还想知道在性能方面我应该期望什么(例如分配和释放的大 O 值)以及内存管理结构与实际托管内存的合理比率是多少。

当然,请随意回答这些问题的一部分。非常感谢任何反馈!

0 投票
3 回答
7479 浏览

filesystems - 简单的内存文件系统

任何人都可以指出一个简单的(不能强调这一点)内存文件系统的实现吗?如果我可以创建一个文件并执行一个简单的 cat file.txt 就足够了。

我想将它用作我的玩具操作系统的一部分。

0 投票
1 回答
2383 浏览

assembly - 如何让鼠标在我自己的操作系统中工作?INT 33h 在 EMU8086 之外不起作用

我已经完全在汇编中开发了自己的操作系统,现在我想实现一个鼠标驱动程序,因为我看到带有 EMU8086 的 Windows 中的 INT 33h 可以工作,但是当我从软盘启动时它不起作用。我尝试过 USB 和 PS/2 鼠标,结果相同。谁能解释我必须做什么才能使操作系统识别鼠标?

0 投票
1 回答
1749 浏览

c# - C# 中的 OS(操作系统)编程

我知道这个项目。问题是“我们可以用托管代码创建一个真正的操作系统,还是用这个项目创建的操作系统是一个 hello world 操作系统?” 操作系统需要完全控制硬件。我们可以用这个来做吗?如果还有其他项目,请告诉我
Cosmos Project

0 投票
1 回答
2487 浏览

x86-64 - x86-64 处理器的 NUMA 文档?

我已经查找了 X86-64 处理器的 NUMA 文档,不幸的是我只找到了 NUMA 的优化文档。

我想要的是:如何在系统中初始化 NUMA(这将包括获取系统的内存拓扑和处理器拓扑)。有谁知道关于 X86-64 AMD 和 Intel 处理器的 NUMA 的好文档?

0 投票
3 回答
27857 浏览

c - 将 C 函数的值返回给 ASM

我正在尝试从 ASM 中调用一个函数。我知道如何调用它,但我无法找到如何获取此函数的返回值。一个例子如下:

C代码:

(N)ASM 代码:

有任何想法吗?