0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么大部分操作系统都使用C语言来编写

strongerHuang 来源:码农的荒岛求生 作者:小风哥 2022-07-14 09:04 次阅读

你有没有想过,为什么大部分操作系统都使用C语言来编写而不是其它语言呢?这篇文章给你答案。

C语言在处理器界很受欢迎

首先不得不说的是C语言真的非常简单,看看K&R经典的"The C Programming Language",薄薄的一本书就把C语言讲完了。

再去看看JavaC#等,要是介绍这些语言的书不能厚到去垫显示器你都不好意思去读。

由于C语言很简单,被移植到了许多CPU架构上,甚至许多CPU设计者第一件事就是把C语言移植过来。

假设你自己打造了一款CPU,有自己独特的机器指令,现在CPU有了,接下来的问题是你该怎么编写程序让你的CPU开始工作呢?关于CPU的工作原理你可以参考《你管这破玩意叫CPU?》 我们知道,CPU只能执行机器指令,程序员都使用高级语言来编写程序,因此必须将高级语言翻译成机器指令,接下来的问题是选择什么语言呢?使用极为复杂的Java/C#还是简单的C呢?答案不言而喻。

因此你接下来需要的就是为你设计的CPU打造一款C编译器,之前都是通过魔改gcc来完成,现在你也可以使用LLVM(注意,这绝不是一件想象中那么简单的事情)。

看到了吧,处理器设计者想到的第一个用来驱动CPU的高级语言就是C,那么针对该CPU编写的操作系统该用什么语言还用得着说吗?

C语言最独立

为什么说C语言最独立呢? 想一想Java、Python、C#等是不是需要一大坨运行时系统(runtime system),包括解释器、线程模型、垃圾回收等等。

pYYBAGLPbA6AGPGvAACnlKTpgsQ111.jpg




而C语言就简单太多了,C语言不需要依赖任何运行时系统(不考虑标准库),它不需要内存管理系统、不需要解释器、不需要线程模式等等,这就意味着你编写的C语言程序可以直接在硬件上跑起来。

直接操作硬件的能力

让我们来看一下在整个计算机系统中操作系统位于哪里:

pYYBAGLPbC2AKINFAAA_pF0AcbU936.jpg




可以看到操作系统位于应用程序与硬件中间,这就意味着操作系统必须对上层屏蔽硬件,这同时也意味着编写操作系统时必须能直接控制硬件,尤其是内存管理,而C语言就是为此而生的。

C语言本身不像Java等自带内存管理系统,在C语言中这一工作完全由程序员控制,这种控制权在开发操作系统时是极为重要的,再加上指针这一大杀器,程序员可以方便的直接操作内存,像创建页表(page table)、DMA控制器、Memory mapped IO等等。

有的同学可能对指针(pointer)心生畏惧,的确,对于大部分工作在应用层的程序员来说没有指针我们一样可以编写出有用的程序,像Java程序、Python程序等等,这些语言中没有指针,我们也不需要直接面对硬件,而这恰恰是因为操作系统帮我们屏蔽掉了,而在操作系统这一层我们无可逃避,C语言可以干净利落的解决问题。

最接近底层的高级语言

C语言中没有复杂的数据结构,像各种容器、hash表、树等,程序员必须自己来实现这些,这也是很多同学觉得不方便的地方,然而这样设计的初衷是为了让程序员能确切的知道C代码是怎样影响硬件的,C语言也是最接近机器指令的高级语言,C语言是非常透明,而这一点在其它高级语言中几乎不可能,因为C语言的设计哲学之一就是:

Trust the programmer

使用C语言的程序员应该清楚的知道自己在干啥,这非常适合编写操作系统这种贴近硬件涉及大量底层细节需要精密微调的程序,当然缺点就是刚才所说的没有内置的一些常用数据结构。

总结

本篇介绍了为什么大部分操作系统都使用C语言来编写,也介绍了C语言的许多优点,但值得注意的是每种语言都有自己的使用场景,C语言也不例外,C语言非常适合系统编程等偏向底层的方向,但在应用层你的选项则有很多。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18924

    浏览量

    227212
  • 操作系统
    +关注

    关注

    37

    文章

    6545

    浏览量

    122738
  • C语言
    +关注

    关注

    180

    文章

    7575

    浏览量

    134032

原文标题:为什么用C语言编写操作系统?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    浅谈Linux操作系统的三大部分

    Linux操作系统是一种基于Unix的操作系统,它是由Linus Torvalds在1991年开发的。它是一个自由和开放源代码的操作系统,因此任何人都可以自由地使用、修改和发布它。Linux
    发表于 07-23 12:59 2415次阅读
    浅谈Linux<b class='flag-5'>操作系统</b>的三<b class='flag-5'>大部分</b>

    μC/OS-II操作系统在各种处理器上的移植

    的工作就是操作系统的移植。本文选取使用较多的51单片机、LPC2210、NiosII三种处理器进行介绍。 1 μC/OS-II操作系统移植条件μC/OS-II
    发表于 08-14 09:46

    为什么你觉得C语言什么都不能做

    对于大部分初学者,学习C语言的目的是希望做一名合格的程序员,开发出靠谱的软件。但是学了C语言
    发表于 07-19 06:43

    C语言相对于其他语言有哪些特点

    操作系统(包括内核、驱动等)是使用C语言和汇编编写的,Windows,UNIX,Linux都是这样的。绝大部分
    发表于 10-27 08:25

    开源操作系统大全

    ,重启后不会影响用户数据;KnightOS 内核具有独立特性,它采用类 Unix 的环 境,使用 Z80 的汇编语言编写,开发者可以用它编写自己的
    发表于 10-27 15:13

    C语言实时操作系统源代码

    C语言实时操作系统源代码
    发表于 06-05 12:36 63次下载

    Linux操作系统-C语言编程入门-pdf

    Linux操作系统-C语言编程入门介绍在LINUX 下进行C 语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容:⣷
    发表于 12-08 09:55 193次下载
    Linux<b class='flag-5'>操作系统</b>-<b class='flag-5'>C</b><b class='flag-5'>语言</b>编程入门-pdf

    基于WRK的操作系统课程设计

    WRK的全称是Windows Research Kernel ,它是微软为高校操作系统课程提供的可修改和跟踪的操作系统教学平台。它给出了 Windows 这个成功的商业操作系统的内核大部分
    发表于 04-17 23:34 37次下载

    TESTLICHENGlpc大部分历程

    电子发烧友网站提供《TESTLICHENGlpc大部分历程.rar》资料免费下载
    发表于 03-23 17:23 0次下载

    基于Linux操作系统C语言编程入门

    基于Linux操作系统C语言编程入门
    发表于 10-27 15:36 11次下载
    基于Linux<b class='flag-5'>操作系统</b>下<b class='flag-5'>C</b><b class='flag-5'>语言</b>编程入门

    Linux操作系统C语言编程入门.pdf

    Linux操作系统C语言编程入门
    发表于 05-17 10:08 95次下载

    如何提高你的C语言编程能力?带你提升C语言编程能力

      C语言: 1.Windows、Linux、Unix 等操作系统的内核90%以上都使C语言
    发表于 09-14 10:53 36次下载
    如何提高你的<b class='flag-5'>C</b><b class='flag-5'>语言</b>编程能力?带你提升<b class='flag-5'>C</b><b class='flag-5'>语言</b>编程能力

    生活中为什么大部分采用交流电

    生活中为什么采用交流电,既然交流输电损耗比直流多,而且除少数设备能直接使用交流电以外,大部分电子设备都使用直流电。那我们生活中大部分电为什么还是采用交流电呢?
    的头像 发表于 11-16 10:44 1.7w次阅读

    嵌入式底层开发为什么选择C语言

    操作系统(包括内核、驱动等)是使用C语言和汇编编写的,Windows,UNIX,Linux都是这样的。绝大部分
    发表于 10-20 13:35 2次下载
    嵌入式底层开发为什么选择<b class='flag-5'>C</b><b class='flag-5'>语言</b>

    如何利用C语言控制LED灯的实现

    实际工作中很少会使用到汇编去编写嵌入式驱动,毕竟汇编太难,写出来也不好理解,大部分情况下都使C语言
    的头像 发表于 11-30 09:58 7258次阅读