问题标签 [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 回答
3853 浏览

assembly - 设置 IRQ 映射

我正在关注几个教程和参考资料,试图设置我的内核。我在一个根本没有解释它的教程中遇到了一些不熟悉的代码。我被告知将其映射16 IRQs (0-15)到 ISR 位置的代码32-47

的代码outportb()如下,但我已经清楚地掌握了它的作用:

我应该提一下,这是在保护模式下的 x86 架构上。此源代码工作正常,我了解它的作用,但我不明白它是如何做到的。有人可以向我解释这里发生了什么,以便万一我需要对此进行扩展,我会知道我在做什么?

0 投票
6 回答
6448 浏览

operating-system - 创建自定义操作系统的障碍

在我看来,程序员(尤其是 Comp. Sci. grads)试图解决的最常见的过于雄心勃勃的项目是构建自己的操作系统。(尝试创建自己的编程语言 + 编译器可能更常见,但远没有那么雄心勃勃。)

对于那些(像我一样)愚蠢到尝试尝试的人:除了庞大的规模之外,您在尝试从头开始创建自己的操作系统时遇到的最大问题或意外障碍是什么?

编辑:一个很棒的操作系统问题:操作系统开发入门有哪些资源?

0 投票
25 回答
20767 浏览

operating-system - 操作系统是如何“制造”的?

创建操作系统似乎是一个庞大的项目。怎么会有人开始呢?

例如,当我将 Ubuntu 弹出到我的驱动器中时,我的计算机如何才能运行它? (我想,这才是我真正想知道的。)

或者,从另一个角度来看,可以在磁盘上并且仍然作为操作系统“运行”的最少字节数是多少?

(如果这含糊不清,我很抱歉。我这个主题一无所知,所以我不能很具体。我假装对计算机的工作原理有相当多的了解,但我对这个主题一无所知。 )

0 投票
3 回答
3829 浏览

x86 - SMP多线程如何共享内存和中断?

我正在为我的内核做一些输入缓冲区的工作,我有一些问题。在双核机器上,我知道可以同时运行多个“进程”。我不知道操作系统和各个程序如何保护数据冲突。

关于这个话题,我想知道两件事:

(1) 中断发生在哪里?它们是否保证发生在一个核心上而不是另一个核心上,这是否可以用来确保一个核心上的实时操作不会被另一个核心上可以处理的文件 IO 中断?(我从逻辑上假设中断会发生在第一个核心上,但这总是正确的,你怎么知道?或者也许每个核心都有自己的中断设置?这不会导致每个核心都发生中断吗?核心可以同时对同一个中断做出反应,可能以不同的方式?)

(2) 双核处理器如何处理操作码内存冲突?如果一个核心正在读取内存中的地址,而另一个核心正在写入内存中的同一地址,会发生什么?是抛出异常,还是读取了值?(我假设写入会以任何一种方式工作。)如果读取了一个值,是否保证它是碰撞时的旧值或新值?

我知道理想情况下应该编写程序以避免这些并发症,但操作系统当然不能指望这一点,并且需要能够处理此类事件而不会自己窒息。

0 投票
3 回答
2189 浏览

osdev - 如何以编程方式创建可引导 CD?

我正在使用准系统教程作为我正在开发的操作系统的基础,它似乎是一个较旧的教程:它已经将内核编译为软盘映像,然后使用 GRUB 加载它。

基本上,我仍然想使用 GRUB,但我想让我的操作系统从 CD 上运行。主要原因是我实际上没有可用的真正软盘驱动器(我目前正在 VirtualBox 中进行测试),因此我无法在真正的硬件上测试我的操作系统。

我一直在网上四处寻找,我可以找到很多从软盘映像创建可引导 CD 的实用程序,但这些似乎都需要一个真正的软盘驱动器,而且它并不是我真正想要的。理想情况下,我希望能够在我的制作步骤中获得一张可引导的 CD,而无需首先将映像放在软盘上,这似乎毫无意义。

我想回答这个问题的简单方法是:如何设置 GRUB 以从 CD 读取我的内核映像?我是否需要一个特殊的实用程序才能从 Windows 执行此操作?(内核还不能自己编译,这不是很长时间)

谢谢!

0 投票
4 回答
4604 浏览

assembly - 在从中断处理程序返回之前,我是否必须弹出某些异常推送到堆栈的错误代码?

我已经加载了一个包含 256 个条目的 idt 表,所有条目都指向类似的处理程序:

  • 对于异常 8 和 10-14,推送异常编号(这些异常会自动推送错误代码)
  • 对于其他人,推送“虚拟”错误代码和异常编号;
  • 然后跳转到一个通用处理程序

因此,当公共处理程序进入时,堆栈已正确对齐并包含异常/中断号、错误代码(可能只是一个伪代码)、eflags、cs 和 eip。

我的问题是关于从中断处理程序返回的。我使用iret从堆栈中取出异常编号和错误代码后返回,但这不适用于异常 nr 8;如果我将错误代码留在堆栈上,则返回正常!

问题:

  • 对于将错误代码放在那里的异常,我是否必须将错误代码留在堆栈上?如果是这样,如何iret确定它是否必须弹出错误代码?
  • 一旦我启用中断,我总是会得到异常 8(双重故障),但随后一切正常(我正在开发一个爱好操作系统)。这是正常行为还是我在某处有错误?
0 投票
11 回答
11368 浏览

linux - 什么是适合初学者内核开发的好的准系统 Linux 发行版?

在我的操作系统课程中,我们希望使用我们自己的一些简单的 C 系统调用来修改 Linux 内核。

什么是适合此目的的好发行版?我们不需要任何装饰,没有 GUI,香草内核等。越基本越好。

0 投票
1 回答
3776 浏览

visual-studio - 如何使用 Visual Studio 构建内核映像?

我想使用 Visual C++ 为 x86 机器构建嵌入式内核。我有一些 C 和汇编代码文件要编译,我想以与 GRUB 等 Multiboot 引导加载程序兼容的方式将它们链接在一起。

0 投票
17 回答
4648 浏览

operating-system - 对于内核/操作系统,C 仍然是它吗?

我喜欢操作系统,并最终想成为一名主要从事内核工作的操作系统开发人员。将来 C 语言仍将是首选语言,我还应该尝试学习什么?

0 投票
20 回答
49975 浏览

c - 如何在旧台式计算机上构建小型操作系统?

这可能是徒劳的,因为我知道编写操作系统非常复杂(尤其是自己编写)。

  • 我不希望构建下一个 linux 或 windows。

  • 我知道这会很可怕,而且有问题,而且不会起作用,但这没关系。

我想自己写所有东西,用AssemblyC和(一些)C++

这是一个未来的项目,因为我现在正忙于其他事情,没有时间,但我想我现在会问它,所以也许我可以得到很多答案,它可以建立并成为这种方法的有用资源(我所看到的所有其他事情都涉及构建 minix,使用现有的引导加载程序,在虚拟引导程序中构建它等)。

我想用显示器、键盘和鼠标设置我的旧台式机之一,并开始在空白硬盘驱动器上工作。

我想学习如何编写自己的引导加载程序(我已经找到了很多关于这方面的资源,但为了完整起见,仍然请添加一些好的),我自己的 USB 驱动程序(如果有必要的话),CD 驱动程序(如果有必要的话) 等一切,从头开始。

  • 怎么把代码放到电脑上?最好用软盘来做吗?大多数计算机都可以通过 USB 记忆棒完成吗?

  • 我需要什么驱动程序,你能建议任何关于构建这些驱动程序的参考吗?

  • 在引导序列之后——然后呢?我如何进入保护模式等。

  • 如何在没有操作系统帮助的情况下管理内存?我只是使用我想要的任何地址吗?不需要初始化?

  • 毫无疑问,我会遇到什么让我感到困惑的事情?

  • 我怎样才能让它既是命令行操作系统,又是图形操作系统?

  • 什么是构建的图形操作系统?就像,我将如何做一个命令行、字体和顶部的图片?

  • 我在哪里可以阅读有关设置多任务环境的信息?(即,有两个类似图形的命令行并排运行)。

  • How would I set up a sort of windowing system? How do I display graphics on the screen once simple multitasking is set up?

Believe me, I understand that this is a very complicated project, and I probably will never get around to completing it or writing anything on it of any use.

There are lots of other pieces to this I haven't mentioned, if you think of any, feel free to add those too.

Please put one "topic" per answer--for example, USB drivers, and then maybe a list of resources, things to look out for, etc.

Also, please don't suggest building off of another O/S or pre-existing code. I know I will read a lot of pre-existing code (such as the linux kernel, or example resources, existing drivers, etc) but ultimately I want to do all the writing myself. I know I should build off of something else, and there are lots of other questions on SO about that that I can read if I change my mind and go that route. But this one is all about doing the whole thing from scratch.

Any suggestions on how to get it graphical? Different video modes and how to work with them, etc?