问题标签 [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 投票
1 回答
140 浏览

operating-system - 编写虚拟主机需要什么?

我现在不打算这样做,因为我目前没有这方面的经验来尝试它,但我对某些事情感到好奇。

如果从头开始实现一个操作系统,构建一个像 VirtualBox 这样的应用程序需要什么?不一定是用户友好的图形用户界面或其他任何东西,而是能够启动其他操作系统并允许您与它们交互的东西?

我脑子里有一个想法,关于一个使用虚拟化处理一些关键事情的操作系统(可能已经有这样的想法),我只是好奇构建它需要什么。

0 投票
5 回答
7408 浏览

assembly - 如何在 NASM 程序集中使用 BIOS int 13h 从磁盘加载内核?

我已经坚持了好几个星期了,不知道我哪里出错了,因为 NASM 没有给我任何错误。由于注释,代码非常自我解释。

这是从 BIOS 加载的代码

这是应该(但不是)加载的代码

任何帮助将不胜感激。

帕特里克

0 投票
3 回答
3057 浏览

c# - 如何使用 C# 构建操作系统

我正在阅读关于Singularity的文章,它部分是用 C# 开发的,但我如何才能部分用 C# 开发操作系统?(因为引导加载程序需要在 Assembly 中,我知道)我想知道的是从哪里开始(教程,图书馆...)?

PS:恭喜 Singularity 的开发者们,干得漂亮!;)

0 投票
2 回答
1327 浏览

bios - BIOS INT 0x15 Function 0x88 总是返回相同的内存大小

我在我的 Bochs 模拟器上使用 BIOS int 0x15,但是无论我配置了什么,它总是返回相同的内存大小(34440):

我知道有更好的内存检测方法,但我想了解为什么这没有按预期工作(以防万一我做了什么)

为什么是这样?bochs bios 是否只是硬编码以返回此值?

0 投票
1 回答
2086 浏览

assembly - 如何为 MIPS 编写 Hello World 引导加载程序?

我正在通过MIPS Assembly Language Programming一书学习 MIPS 汇编,但我刚刚开始学习 MIPS,因为我想构建 MIPS 操作系统,但现在我可以看到,没有任何文档谈论引导和这些事物。然后我在这里要求已经这样做的人将我指向正确的位置。

我已经在 x86 Assembly 中开发了一个简单的操作系统

0 投票
3 回答
944 浏览

c - 用 C 编写内核的资源

我不想编写自己的引导加载程序——很高兴使用 Grub。

我只想实现抢占式多线程、基本文件系统和虚拟内存。

我想要一些可以在 qemu 上运行的东西。

什么是实现这一目标的好资源(书籍/教程)?

谢谢!

0 投票
9 回答
8186 浏览

operating-system - 最好的学习教育操作系统?

为了从头开始编写自己的 x86 操作系统,最好学习什么操作系统?

0 投票
2 回答
1084 浏览

x86 - 操作系统的引导加载程序不起作用

我正在制作一个自定义操作系统。我有两个 nasm 文件:

启动.asm:

开始.asm:

我使用以下命令将它们编译成 .bin 文件:

然后使用以下命令将它们添加到软盘映像中:

当我从 VirtualBox 中的软盘映像启动时,它显示 2 个感叹号而不是 1 个,甚至在 QEmu (Q.app) 中也无法启动。我是操作系统开发的新手,所以如果有人能告诉我我做错了什么并给我一些关于如何更好地设置我的操作系统的指导,那就太好了。

0 投票
1 回答
538 浏览

c - 有人可以解释我如何使用来自 grub 的这个 C 数据结构吗?我不明白 hi mem 和 lo mem

Grub 是一个兼容多重引导的引导加载程序。当它启动操作系统时,它会创建一个定义可用内存的结构,并在内存中留下一个指向该结构的指针。

我在这里得到了这些信息:

http://wiki.osdev.org/Detecting_Memory_(x86)#Memory_Map_Via_GRUB

这是我认为我感兴趣的结构:

所以我有一组内存映射结构。如上页所述,您可以通过在 grub 提示符下键入“displaymem”来查看内存映射。这是我的输出

但我不完全了解结构....

为什么长度设置为 0 (0x0)?我必须结合低内存和高内存吗?

它说这些值是 64 位的,所以它是否像这样将“低内存和高内存”放在一起:

__int64 full_address = (low_mem_addr + high_mem_addr);

还是我得到 1 个列表,其中包含低地址和高地址?

并且由于我使用的是 32 位机器,所以我基本上是指每个具有两个值的唯一地址吗?

我期待一个地址列表,例如displaymem节目,但填充了实际长度字段,但我没有看到。有什么我不明白的吗?

0 投票
1 回答
2671 浏览

x86 - 使用 in/out 指令的内存映射 i/o 操作(在英特尔处理器中)......仍然被缓存吗?

如果映射 i/o 的地址范围被键入为回写 (WB),即使我使用 in/out 指令,内存映射 i/o 操作(在英特尔处理器中)是否仍会被缓存?

编辑:这个问题解决了。我发现 MMIO 是可缓存的,并且 MMIO 操作可以根据其内存类型重新排序。这就是为什么英特尔建议使用 MTRR 将 MMIO 设置为 UC(不可缓存)的原因。我在英特尔软件开发人员手册 v3A 上找到了它,它也可能适用于 amd 处理器...