虽然在这里咱们主要关注的是操做系统,但毕竟操做系统的目的就是能更好的运行用户程序,并且该教程主要是站在程序员的角度来说解操做系统的,做为程序员是绕不开程序这个话题的。所以在深刻理解操做系统以前仍是有必要来聊一聊程序是怎么一回事。程序员
咱们引用Wikipedia对计算机程序的定义:编程
A computer program is a collection of instructions that performs a specific task when executed by a computer.
翻译成大白话就是,能指挥计算机干活的一堆指令就叫计算机程序。那怎样才能写出指挥计算机干活的指令呢?这就涉及到程序是怎么来的。vim
程序是咱们伟大的可敬的广大程序员们用编程语言一个字符一个字符写出来的文本字符串,只不过这些文本字符串是人类能够认识的。不管用的什么程序语言,C/C++、Java、Python、JavaScript、C#、Perl、Lua、Shell、汇编语言等等等等,只要是你写出来的文本字符串能指挥计算机干活,这都叫程序。这些程序员认识的文本字符串就是能够指挥计算机完成特定任务的指令。你可能有点糊涂了,这些文本字符串真的就是计算机能用来完成特定任务的指令吗?计算机不是只认识0和1这两个数字吗?微信
计算机实际上是一个数学学得很是差的家伙,以致于差到只能认识两个数,0和1,其它的就都不能认识了,咱们要面对的就是这样一个榆木疙瘩。编程语言
虽然这个榆木疙瘩数学很差识数很少,可是这家伙有一个咱们人类难以望其项背的能力,不,对于人类来讲简直就是超能力,那就是这个榆木疙瘩算数很是快,对于简单的加法咱们人类可能通常一秒能算不超过10个,可是计算机一秒能够完成数十亿次的计算,简直是天才!虽然计算机能认识的数就只有0和1这么简单,可是其计算速度体现出了简单的威力。性能
至此,咱们知道程序员(人类)和计算机是两个彻底不一样的物种,不一样的物种能理解的语言是彻底不一样的,就比如普通的人不会明白一群鸟语在说什么同样,咱们人类也不能打开vim或者宇宙无敌IDE——Visual Studio直接写0和1吧(虽然这是能够的,早期的程序员确实就是这么干的,牛不牛)。spa
所以,咱们须要某种魔法把人类认识的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之类的程序,高能完毕。
但愿到目前为止你尚未晕,到这里咱们知道了,无论咱们用的是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等等,这个程序也是接下来该教材的主角。
更多计算机内功文章,欢迎关注微信公共帐号:码农的荒岛求生。
计算机内功决定程序员职业生涯高度