Operating system 对于内核/操作系统来说,C仍然是吗?

Operating system 对于内核/操作系统来说,C仍然是吗?,operating-system,kernel,osdev,Operating System,Kernel,Osdev,我喜欢操作系统,并最终希望成为一名主要从事内核开发的操作系统开发人员。在未来,C语言仍然是首选语言,我还应该学习什么呢?C几乎就是它,有相当多的汇编程序。操作系统内核工作的重要主题包括: 缓存和缓存管理的原理 虚拟内存,TLB管理 CPU与系统架构 存储层次结构 并发编程技术(互斥、锁定等) 算法和数据结构 绝对正确!您还应该至少学习一种汇编语言/硬件体系结构。Microsoft正在.NET中重写一些Windows,但我怀疑内核是否会涉及到很多内容 然而,像Cosmos()这样的项目给了我们希

我喜欢操作系统,并最终希望成为一名主要从事内核开发的操作系统开发人员。在未来,C语言仍然是首选语言,我还应该学习什么呢?

C几乎就是它,有相当多的汇编程序。操作系统内核工作的重要主题包括:

  • 缓存和缓存管理的原理
  • 虚拟内存,TLB管理
  • CPU与系统架构
  • 存储层次结构
  • 并发编程技术(互斥、锁定等)
  • 算法和数据结构

    • 绝对正确!您还应该至少学习一种汇编语言/硬件体系结构。

      Microsoft正在.NET中重写一些Windows,但我怀疑内核是否会涉及到很多内容


      然而,像Cosmos()这样的项目给了我们希望。

      科迪不想被打扰回答这个问题,所以我代表他传递这个问题:-P有关以托管语言编写的OSs(与C或汇编相反)的一些示例,请参见:

      当然,科迪也不想提及这一点:

      • 不,不是“它”。内核通常是用C语言编写的,并加入一些汇编程序。但是操作系统是用各种语言编写的。但即使在那里,C++也可以不用太麻烦。许多其他语言也是如此。Linux是由C狂热者编写的,他们害怕和厌恶其他一切,这是他们的问题。Windows是用C和C++的大混合编写的,并且可能还有一些老的PASCAL代码。现在,大量的.NET也出现了。OSX在大部分操作系统代码中使用Objective-C

        同样的建议适用于所有其他编程领域:

        • 了解你的东西
        • 不要把自己局限于一种真正的语言
        内核是唯一应用“特殊”规则的领域。但是内核很小。绝大多数操作系统都可以用任何语言编写


        您当然需要了解C,是的,但仅仅了解C还远远不够。

        您可能想看看Microsoft的项目(也在上):

        Singularity是微软研究院自2003年以来建立的一个实验性操作系统。它是一个高度可靠的操作系统,其中内核、设备驱动程序和应用程序都是用托管代码编写的


        这个操作系统只有一小部分是用C语言编写的,其余部分是用高级语言编写的(Sing#,C#的一个扩展)。在未来,我相信你可以看到更多的这种事情变得可用。

        ,C++的现代操作系统的核心有很大的空间。我只是看了一下,Wi7核心内核树有相当多的C++代码。注意,许多子系统仍然使用简单的C语言。这有几个原因

      • C是基于NT的操作系统的原始语言
      • 关键人物非常非常了解C
      • 编写良好的C可以是最直接的调试代码,特别是在内核模式下
      • 以上所述,许多团队和人员已经找到了良好的C++编写工具,以成为核心OS操作的有效工具。p> < C++ >没有什么可以阻止它被用来编写核心资源管理代码,比如调度器、内存管理器、I/O子系统、图形子系统等等。


        正如其他人所指出的,任何内核工作都需要一些汇编语言

        如果您正在谈论的是内核,那么您需要学习一种能够更轻松、更快地访问底层硬件的语言。我只能想到

        • C语言及其应用
        • 装配
        另外,引导加载程序的某些部分将以汇编的形式编写,从那时起,将以C的形式编写。有许多易于理解的开源操作系统可用,例如最新的Topper。试着调查一下


        我想,作为一名操作系统内核开发人员,您会更担心有效访问底层硬件(如处理器和内存)的方法,而不是语言的选择。我敢打赌,在大多数情况下,我们将尝试使用汇编

        我认为可以肯定的是,操作系统的底层部分(例如内核)将继续使用C编写,因为它的速度很快。正如其他地方提到的,您需要了解内核某些部分的汇编程序(需要将内核加载到内存中)。但是,您可以使用很少或没有汇编知识的内核。一个很好的例子是,如果您正在实现一个文件系统

        不要担心操作系统是用什么语言实现的。重要的是如何使用操作系统,以及可以做些什么来改进它们。一个很好的例子是Unix首次问世时。文件系统在磁盘前面有索引节点,在剩余空间中有数据。这执行得不是很好,因为您正在为所有文件查找磁盘的不同部分。然后创建了一个磁盘感知文件系统。这意味着在其相应数据附近有索引节点。我省略了很多细节,但我希望这说明,更重要的是考虑如何改进操作系统,而不是用什么语言编程

        操作系统的一些最新趋势是虚拟化和分布式计算(见谷歌的文章)。文件系统、安全性、调度(尤其是多核处理器)等一直是人们感兴趣的领域,尽管这些问题并不新鲜

        如果您想了解有关内核开发的更多信息,请参阅以下参考资料:

        • -为那些想要开始修改Linux内核的人提供的资源
        • -Unix版本6的x86端口。麻省理工用来教授操作系统