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

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

3天内不再提示

解析C语言与操作系统

jf_78858299 来源:码农的荒岛求生 作者:码农的荒岛求生 2023-02-15 11:38 次阅读

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

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

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

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

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

假设你自己打造了一款CPU,有自己独特的机器指令,现在CPU有了,接下来的问题是你该怎么编写程序让你的CPU开始工作呢?

我们知道,CPU只能执行机器指令,程序员都使用高级语言来编写程序,因此必须将高级语言翻译成机器指令,接下来的问题是选择什么语言呢?使用极为复杂的Java/C#还是简单的C呢?答案不言而喻。

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

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

C语言最独立

为什么说C语言最独立呢?

想一想Java、Python、C#等是不是需要一大坨运行时系统(runtime system),包括解释器、线程模型、垃圾回收等等。

图片

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

直接操作硬件的能力

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

图片

可以看到操作系统位于应用程序与硬件中间,这就意味着操作系统必须对上层屏蔽硬件,这同时也意味着编写操作系统时必须能直接控制硬件,尤其是内存管理,而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语言非常适合系统编程等偏向底层的方向,但在应用层你的选择则有很多。

希望这篇文章对大家理解C语言与操作系统有所帮助。

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

    关注

    21

    文章

    4951

    浏览量

    139830
  • JAVA
    +关注

    关注

    19

    文章

    2959

    浏览量

    104553
  • C语言
    +关注

    关注

    180

    文章

    7598

    浏览量

    136210
收藏 人收藏

    评论

    相关推荐

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

    Linux操作系统C语言编程入门
    发表于 08-26 20:43

    书籍教程:linux操作系统c语言编程入门

    本资料是linux操作系统c语言编程入门教材。目 录第一章 基础知识 ……………………………………………………………………………4第二章 进程介绍
    发表于 07-26 22:34

    深入解析WINDOWS操作系统(第4版)

    本帖最后由 lee_st 于 2018-3-4 01:08 编辑 深入解析WINDOWS操作系统(第4版)
    发表于 03-02 23:45

    没有操作系统真的不能使用LwIP套接字和域名解析吗?

    裸机移植了LwIP协议栈,整体感觉不错但是在使用套接字(Socket)功能和域名解析(lwip_gethostbyname)时发现编译通不过,说是要启用操作系统。如果不用操作系统就只能用RAW
    发表于 08-22 22:25

    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

    基于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 96次下载

    米尔科技嵌入式实时操作系统介绍

    《嵌入式实时操作系统μC/OS-Ⅱ经典实例:基于STM32处理器》紧紧围绕“μC/OS-Ⅱ系统设计”这一主题,立足实践解析了嵌入式实时
    的头像 发表于 11-25 09:02 2298次阅读
    米尔科技嵌入式实时<b class='flag-5'>操作系统</b>介绍

    解析操作系统的概念、结构和机制

    全面。解析操作系统的概念、结构和机制。
    发表于 03-26 14:19 8次下载

    STM32操作系统系列使用C语言的教程

    C语言,相对于汇编有更好的可读性,便于维护等优点。下面实验将使用C语言实现点亮LED灯。C语言
    的头像 发表于 08-10 23:26 3403次阅读

    课堂笔记之嵌入式Linux操作系统

    :嵌入式操作系统、开发工具、系统应用开发(&GUI)、系统移植、驱动、内核。4、所具备的知识体系:C语言、单片机、嵌入式
    发表于 11-02 09:51 15次下载
    课堂笔记之嵌入式Linux<b class='flag-5'>操作系统</b>

    基于STM32从零写操作系统系列---使用C语言

    如有不详细的描述、错误或疑问,欢迎留言!!!基于STM32从零写操作系统系列---前言与目录目的  C语言,相对于汇编有更好的可读性,便于维护等优点。下面实验将使用C
    发表于 01-13 14:05 31次下载
    基于STM32从零写<b class='flag-5'>操作系统</b>系列---使用<b class='flag-5'>C</b><b class='flag-5'>语言</b>

    为什么不用Go开发操作系统

    操作系统 (OS) 是计算机系统的心脏和灵魂,它管理着计算机的硬件和软件资源,并为用户提供与计算机交互的方式。传统上,C 和 Assembly 等语言因其低开销和 “接近机器码” 的特
    的头像 发表于 05-26 15:09 528次阅读
    为什么不用Go开发<b class='flag-5'>操作系统</b>?

    深度解析全球操作系统格局

    操作系统是负责协调、管理和控制计算机硬件与软件资源的程序,是整个计算机的核心系统软件。 按照操作系统面向的设备类型,通用操作系统主要包括桌面操作系统
    的头像 发表于 01-18 15:00 1062次阅读
    深度<b class='flag-5'>解析</b>全球<b class='flag-5'>操作系统</b>格局