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

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

3天内不再提示

一文解释清楚什么是程序

jf_78858299 来源:码农的荒岛求生 作者:码农的荒岛求生 2023-02-24 14:20 次阅读

虽然在这里我们主要关注的是操作系统,但毕竟操作系统的目的就是能更好的运行用户程序,而且该教程主要是站在程序员的角度来讲解操作系统,作为程序员是绕不开程序这个话题的,因此在深入理解操作系统之前还是有必要来聊一聊程序是怎么一回事。

究竟什么是程序?

我们引用Wikipedia对计算机程序的定义:

A computer program is a collection of instructions that performs a specific task when executed by a computer.

翻译成大白话就是,能指挥计算机干活的一堆指令就叫计算机程序。那怎样才能写出指挥计算机干活的指令呢?这就涉及到程序是怎么来的。

程序是怎么来的呢?

程序是我们广大程序员们用编程语言一个字符一个字符写出来的文本字符串,只不过这些文本字符串是人类可以认识的。无论用的什么程序语言,C/C++JavaPython、JavaScript、C#、Perl、Lua、Shell、汇编语言等等等等,只要是你写出来的文本字符串能指挥计算机干活,这都叫程序。这些程序员认识的文本字符串就是可以指挥计算机完成特定任务的指令。你可能有点糊涂了,这些文本字符串真的就是计算机能用来完成特定任务的指令吗?计算机不是只认识0和1这两个数字吗?

天才的榆木疙瘩

计算机其实是一个数学学得非常差的家伙,以至于差到只能认识两个数,0和1,其它的就都不能认识了,我们要面对的就是这样一个榆木疙瘩。

虽然这个榆木疙瘩数学不好识数不多,但是这家伙有一个我们人类难以望其项背的能力,不,对于人类来说简直就是超能力,那就是这个榆木疙瘩算数非常快,对于简单的加法我们人类可能一般一秒能算不超过10个,但是计算机一秒可以完成数十亿次的计算,简直是天才!虽然计算机能认识的数就只有0和1这么简单,但是其计算速度体现出了简单的威力。

从文本字符串到机器指令

至此,我们知道程序员(人类)和计算机是两个完全不同的物种,不同的物种能理解的语言是完全不同的,就好比普通的人不会明白一群鸟语在说什么一样,我们人类也不能打开vim或者宇宙无敌IDE——Visual Studio直接写0和1吧(虽然这是可以的,早期的程序员确实就是这么干的,牛不牛)。

因此,我们需要某种魔法把人类认识的C/C++、Java、Python之类的翻译出计算机可以认识二进制01指令。这样的魔法就来自两个东西,编译器和解释器。

翻译官编译器和解释器

编译器大家应该都比较熟悉,我们写好C/C++程序后第一步就是编译,这里编译工作就是编译器来完成的。你可以简单的理解为编译器把C/C++程序直接翻译成计算机可以认识的01二进制机器指令。

对于解释器有的同学可能就不是那么熟悉了,写Java、Python、C#程序的时候你从没有听说过要“编译一下Java,编译一下Python,编译一下C#”吧。你可能会说C/C++程序我能理解了,编译器把C/C++程序直接翻译成了01二进制机器指令,那Java、Python一类的程序是怎么运行的呢?

大家可以想一想,你在写Python、Java、C#程序之前是不是要安装一堆东西,称之为“运行时环境”?

如果你想不起来,赶紧重新搭一套环境试试是不是这么回事。

这里的运行时环境其实就是解释器。你可以把这个解释器简单的理解为就是一个程序,只不过。。。注意注意!!!前方高能!!!,只不过是解释器这个程序可以运行你写的Java、Python、C#的程序, 解释器是一个可以运行程序的程序!!! 那解释器这个程序又是怎么来的呢?一般情况下这些解释器其实是用C/C++写出来的。只不过用C/C++写的这个程序专门用来执行你写的Java、Python之类的程序,高能完毕。

伟大的C语言

希望到目前为止你还没有晕,到这里我们知道了,不管我们用的是Java、Python、JavaScript什么的也好最终都逃不出C/C++(Go等语言除外),CPU不直接执行Java、Python、JavaScript之类的解释型语言程序,CPU可以直接执行的是解释器代码,解释器最终来执行Java等程序,这就是解释型语言效率不如编译型语言效率高的原因。因为C/C++程序最终被编译器翻译成了01机器指令,CPU可以直接运行运行机器指令,而对于解释型语言来说CPU首先执行的是解释器的程序,然后解释器再执行你写的程序,性能上当然不及编译型语言。

而C++程序其实在编译过程中也会转化为C程序然后再转为01二进制机器指令,并且们使用的Windows、Linux、MacOS等操作系统同样是用C语言来编写的,从最底层的操作系统到上层的应用程序实际上都逃脱不了C语言。

从这个角度看,C语言真是一门伟大的语言。

回到操作系统

饶了一大圈我们回到操作系统,接下来关于操作系统的讲解中涉及到示例程序没有明确说明的话指的是C语言程序。请注意,如果你对C语言不熟悉也没有关系,我们示例都非常简单不会涉及到复杂的C语言相关概念与用法,有任何语言的使用经验都可轻松应对。

C语言程序编译好后生成的可执行程序在Windows中就是我们熟悉的exe程序,在Linux下是elf程序,这些可执行程序编译好后和普通文件一样存放在磁盘当中。

在接下来关于操作系统的讨论当中,没有明确说明的话,以下几个词汇,"程序","用户程序","应用程序"指的都是编译好后放在磁盘上的可执行程序。

操作系统也是程序

一定要认识到,操作系统也是程序,只不过这个程序不是简单的往屏幕上打印helloworld,不能用来文字语音视频聊天,不能用来上网,不能用来看电影,不能用来玩游戏。那么这个貌似什么娱乐设施都提供不了的程序有什么用呢?这个程序的作用无比重要,该程序的作用是为以上用户程序提供一个良好的运行环境,管理计算机硬件资源包括:CPU、内存、磁盘、网卡、外设等等等等,这个程序就是该教程重点关注的操作系统。

总结

这是该教程的第一节,在这一节中我们从各个方面讲解了程序这一话题。

程序分为编译型程序,比如C/C++,以及解释型程序比如Java、Python、JavaScript等。编译型程序被编译器直接翻译成CPU可以直接运行的机器指令,而解释型程序无需编译,其运行依靠的是解释器,解释器是一个可以执行程序的程序,解释器这个程序一般是由C/C++程序编写的。

需要我们注意的是操作系统也是一个程序,只不过这个程序的作用比较特殊,这个程序是用来管理计算机系统中各种软硬件资源的,比如提供进程、线程机制,管理CPU等等,这个程序也是接下来该教程的主角。

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

    关注

    2

    文章

    786

    浏览量

    41575
  • C语言
    +关注

    关注

    180

    文章

    7596

    浏览量

    135999
  • 程序
    +关注

    关注

    116

    文章

    3769

    浏览量

    80795
  • C++
    C++
    +关注

    关注

    21

    文章

    2104

    浏览量

    73463
收藏 人收藏

    评论

    相关推荐

    有关宏的概念不是很清楚

    在用verilog HDL设计FPGA程序时,涉及到“宏”的概念,对此我不是很清楚,有哪位高手帮忙解释一下?谢谢了
    发表于 03-15 15:36

    程序,求大侠给解释一

    ; WriteCommandLCM(X,0);WriteDataLCM(DData); }这是个1602的子程序,求大侠给解释一下,小弟不胜感激!
    发表于 08-29 11:24

    求各位大神帮我解释解释个示波器个滤波器的程序

    快答辩了,求大神们帮忙学渣看不懂这个两个程序图,帮忙解释一下这两个仪器作用,都能测什么希望能细点,救人命胜造七级浮屠啊!
    发表于 06-04 23:18

    AROS程序清楚运行顺序

    在学习基于ZigBee的个ATOS系统,但是不清楚这个程序的执行顺序,望大神指点,可私聊。文件类型是.nc,可用notepad++打开。
    发表于 04-29 15:51

    请问下在开关电源中为什么:uo=Dui。如果哪位清楚的朋友,请帮忙解释下咯

    请问下在开关电源中为什么:uo=Dui。如果哪位清楚的朋友,请帮忙解释下咯,
    发表于 06-20 17:02

    能帮我解释一下这个程序吗?

    能帮我解释一下这个程序吗?
    发表于 12-19 16:05

    把ARM7、ARM9和ARM11的区别解释清楚

    个操作系统下,程序开发人员都是在操作系统给定的API和编程模型下开发程序;操作系统通常只开放个确定的存储器地址空间给用户。这样就带来
    发表于 10-20 17:10

    高级程序设计语言解释程序和编译程序编译器

    if 不匹配,缺分号语义错误:死循环,零除数,其他逻辑错误解释程序的基本原理解释程序是另种语言处理程序,在词法、语法和语义分析方面与编译程序
    发表于 12-21 06:08

    iPhone名词解释(二)

    iPhone名词解释(二) 什么是PwangeTool?什么是QuickPwn?什么是BootNeuter? PwangeTool是款Mac端的用于越狱和破解iPhone的程序。Q
    发表于 01-27 09:34 853次阅读

    计算机程序的构造和解释中文版

    电子发烧友网站提供《计算机程序的构造和解释中文版.txt》资料免费下载
    发表于 01-04 17:24 0次下载

    命令解释程序工作流程

    解释程序种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源
    发表于 03-09 17:18 5153次阅读
    命令<b class='flag-5'>解释程序</b>工作流程

    程序员到底是做什么的

    很多人问程序员是是做什么的?或者问IT是做什么的?对于非IT行业的人很难有时间慢慢解释清楚,下面我结合自己的理解谈谈吧。
    的头像 发表于 02-12 16:17 9298次阅读

    解释程序的功能是

    编译程序的基本功能是把源程序(高级语言)翻译成目标程序。但是,作为个具有实际应用价值的编译系统,除了基本功能之外,还应具备语法检查、调试措施、修改手段、覆盖处理、目标
    的头像 发表于 02-22 15:31 9043次阅读

    了解通信技术的常用名词解释

    了解通信技术的常用名词解释
    的头像 发表于 06-19 17:55 5918次阅读

    设计模式:解释器设计模式

    Java解释器是种将Java程序翻译成机器可执行代码的工具。
    的头像 发表于 06-06 11:22 781次阅读