8

目前我正在学习objective c 2.0,很快我计划学习汇编语言,这样我就可以编写一个操作系统。我知道这并不容易,而且我知道这需要几个月甚至几年的时间和耐心。但是,我计划用 Objective-C 编写大部分内容(不包括你必须用汇编编写的东西),因为我不仅比我对 C 的了解更好(我几乎不了解任何 C),而且我,个人而言,也更喜欢objective-c。这可能吗??如果不是,我需要知道多少 C?我应该通过一本书对C有很好的了解吗?或者只是在线学习基础知识?

4

5 回答 5

10

如果不是,我需要知道多少 C?

所有的。Objective-CC,然后是一些,所以在你了解 C 之前,你真的不能声称自己了解 Objective-C。

于 2011-03-22T01:25:29.290 回答
4

这是可能的...

您将遇到的最大问题是运行时。

操作系统需要组装,这是正确的。引导加载程序、HAL、GDT 等...

然后你可以使用另一种编程语言。

C 很好,因为它不需要运行时,所以你可以直接编码。

Objective-C 依赖于巨大的运行时,用于消息传递、多态性等......

恕我直言,用 C++ 编写操作系统会更容易,因为运行时不像在 Objective-C 中那么重要......

也就是说,有可能...

我用 C 编写了自己的一个小操作系统,作为一个 Objective-C 爱好者,我也想使用 Objective-C ......它是开源的,顺便说一句,如果你想看看: http://www。 eosgarden.com/en/opensource/xeos/

但请记住,Objective-C 是基于 C 的。这意味着您必须在编写 Objective-C 代码之前编写一个标准 C 库,因为它只是依赖于它。这是一件很难的事情,即使可能......

这意味着您必须编写 stdlib、stdio 等代码......

您还可以尝试移植现有的标准 C 库。然后你可以看看 GNUStep,如果你不想重新编码所有的 Objective-C 的东西......

祝你好运 : )

于 2011-03-22T00:59:14.363 回答
1

好吧,我也有一些类似的计划,所以也许合作?我想开源我的项目,所以如果你也愿意......

这是一个大工程。我最好的建议是坚持使用带有 GNUstep 的 OS X 或 Linux。但如果你坚持,我确实有一个计划,一个微内核:

  • 整个东西都是用 clang/LLVM 构建的,只要我可以启用 ARC。

  • 内核本身是最小的。它的唯一目的是加载使其工作的 kext。内核中内置了一些功能:

    • ELF 二进制文件支持。还没有动态链接。

    • GNU tar 的“文件系统”驱动程序。这对于一个合理的 ramdisk 来说已经足够了。

    • 部分libc(系统调用)libobjc2,足以使用 ARC 运行 Objective-C 以及加载 kexts 所需的一些反射。还没有内置其他花哨的功能。

    • Foundation允许NSBundle通过路径加载 s 并加载它们的类和内核命令行处理的部分。

    • 所有内核提供的功能都将在用户空间中重新实现。

  • 早期的 kexts(在 ramdisk 中的)包括文件系统驱动程序和终端驱动程序。

  • 加载完 FS 和终端 kext 后,内核将继续并从那里挂载根 FS 和 loadkexts,包括:

    • Foundation的剩余部分。系统调用由分布式对象通过套接字实现。libobjc2libc

    • POSIX 系统调用。

    • 多线程和调度程序(基于 的接口libdispatch,或者如果您愿意,可以使用 GCD)

    • 硬件抽象层,它将枚举具有最少可加载驱动程序的所有设备,并将它们公开为低延迟设备节点。(这是将硬件访问权限暴露给用户空间的微内核——守护进程是新的驱动程序。)

在用户区:

  • Userland libc(调用通过内核分布式对象接口公​​开的系统调用)

  • 一个完整的用户态 GNUstep

  • 一个动态链接器,将与 Apple 风格的 ELF 一起工作(例如尊重框架、库注入等)

  • launchd,谁想要 sysvinit?

还有什么想法吗?

于 2013-06-06T08:51:06.753 回答
0

看看 Julien Le Comte 的博客。他开始编写 Simplix 以“提高他的核心 CS 技能”。http://www.julienlecomte.net/blog/category/system-programming/

于 2011-03-24T19:41:38.117 回答
0

通过使用GRUB 的多重引导环境,您可以最大限度地减少简单操作系统所需的汇编代码量。GRUB 可以为您将 CPU 带入 32 位保护模式(或在较新的芯片上为 64 位模式 :),并轻松将控制权交给内核代码。

如果您的 Objective C 工具链可以准备 ELF 对象,那么 Objective C 应该可以用于内核,尽管您可能需要自己提供一些“免费”服务。(例如,C 标准指定free()用于分配内存,但在内核内部分配内存不能只使用标准库——因此内核必须提供自己的内存分配例程。)

当然,在某些时候,您将需要使用汇编来编写用于自旋锁、互斥锁、页表映射、PCI 总线配置等的工具,但希望到那时您将学到很多更简单的操作系统设计。

于 2011-03-22T00:57:59.090 回答