对于程序员来说,最莫大的荣耀莫过于自己的软件被大多数人使用了吧。

历史文章请戳

程序员需要了解的硬核知识之内存

程序员需要了解的硬核知识之CPU

程序员需要了解的硬核知识之二进制

程序员需要了解的硬核知识之磁盘

程序员需要了解的硬核知识之压缩算法

本篇文章作为操作系统的入门文章,可能入门都算不上吧,毕竟操作系统太庞大和复杂了。本篇文章主要带你了解一下我们常用的操作系统环境。

操作系统环境

程序中包含着运行环境这一内容,可以说 运行环境 = 操作系统 + 硬件 ,操作系统又可以被称为软件,它是由一系列的指令组成的。我们不介绍操作系统,我们主要来介绍一下硬件的识别。

我们肯定都玩儿过游戏,你玩儿游戏前需要干什么?是不是需要先看一下自己的笔记本或者电脑是不是能肝的起游戏?下面是一个游戏的配置(怀念一下 wow)

图中的主要配置如下

  • 操作系统版本:说的就是应用程序运行在何种系统环境,现在市面上主要有三种操作系统环境,Windows 、Linux 和 Unix ,一般我们玩儿的大型游戏几乎都是在 Windows 上运行,可以说 Windows 是游戏的天堂。Windows 操作系统也会有区分,分为32位操作系统和64位操作系统,互不兼容。

  • 处理器:处理器指的就是 CPU,你的电脑的计算能力,通俗来讲就是每秒钟能处理的指令数,如果你的电脑觉得卡带不起来的话,很可能就是 CPU 的计算能力不足导致的。想要加深理解,请阅读博主的另一篇文章:程序员需要了解的硬核知识之CPU

  • 显卡:显卡承担图形的输出任务,因此又被称为图形处理器(Graphic Processing Unit,GPU),显卡也非常重要,比如我之前玩儿的剑灵开五档(其实就是图像变得更清晰)会卡,其实就是显卡显示不出来的原因。

  • 内存:内存即主存,就是你的应用程序在运行时能够动态分析指令的这部分存储空间,它的大小也能决定你电脑的运行速度,想要加深理解,请阅读博主的另一篇文章 程序员需要了解的硬核知识之内存

  • 存储空间:存储空间指的就是应用程序安装所占用的磁盘空间,由图中可知,此游戏的最低存储空间必须要大于 5GB,其实我们都会遗留很大一部分用来安装游戏。

从程序的运行环境这一角度来考量的话,CPU 的种类是特别重要的参数,为了使程序能够正常运行,必须满足 CPU 所需的最低配置。

CPU 只能解释其自身固有的语言。不同的 CPU 能解释的机器语言的种类也是不同的。机器语言的程序称为 本地代码(native code),程序员用 C 等高级语言编写的程序,仅仅是文本文件。文本文件(排除文字编码的问题)在任何环境下都能显示和编辑。我们称之为源代码。通过对源代码进行编译,就可以得到本地代码。下图反映了这个过程。

Windows 操作系统克服了CPU以外的硬件差异

计算机的硬件并不仅仅是由 CPU 组成的,还包括用于存储程序指令的数据和内存,以及通过 I/O 连接的键盘、显示器、硬盘、打印机等外围设备。

在 WIndows 软件中,键盘输入、显示器输出等并不是直接向硬件发送指令。而是通过向 Windows 发送指令实现的。因此,程序员就不用注意内存和 I/O 地址的不同构成了。Windows 操作的是硬件而不是软件,软件通过操作 Windows 系统可以达到控制硬件的目的。

不同操作系统的 API 差异性

接下来我们看一下操作系统的种类。同样机型的计算机,可安装的操作系统类型也会有多种选择。例如:AT 兼容机除了可以安装 Windows 之外,还可以采用 Unix 系列的 Linux 以及 FreeBSD (也是一种Unix操作系统)等多个操作系统。当然,应用软件则必须根据不同的操作系统类型来专门开发。CPU 的类型不同,所对应机器的语言也不同,同样的道理,操作系统的类型不同,应用程序向操作系统传递指令的途径也不同

应用程序向系统传递指令的途径称为 API(Application Programming Interface)。Windows 以及 Linux 操作系统的 API,提供了任何应用程序都可以利用的函数组合。因为不同操作系统的 API 是有差异的。所以,如何要将同样的应用程序移植到另外的操作系统,就必须要覆盖应用所用到的 API 部分。

键盘输入、鼠标输入、显示器输出、文件输入和输出等同外围设备进行交互的功能,都是通过 API 提供的。

这也就是为什么 Windows 应用程序不能直接移植到 Linux 操作系统上的原因,API 差异太大了。

在同类型的操作系统下,不论硬件如何,API 几乎相同。但是,由于不同种类 CPU 的机器语言不同,因此本地代码也不尽相同。

FreeBSD Port 帮你轻松使用源代码

不知道你有没有这个想法:“既然 CPU 不同会导致本地代码不同,那为何不将源代码直接发送给程序呢?”这确实是一种解决办法,Unix 系列的 FreeBSD 操作系统就使用了这种方式。

Unix 系列操作系统 FreeBSD 中,存在一种名为 Ports 的机制。该机制能够结合当前运行环境的硬件环境来编译应用的源代码,进而得到可以运行的本地代码。如果目标应用的源代码在硬件上找不到,Ports 就会自动使用 FTP 连接到相应站点下载代码。

全球有很多站点都提供适用于 FreeBSD 的应用源代码。通过使用 Ports 可以利用的程序源代码,大约有 16000 种。根据不同的领域进行分类,可以随时使用。

FreeBSD 上应用的源代码,大部分是用 C 语言来标注的,C 编译器可以结合 FreeBSD 的运行环境来生成合适的本地代码。

FTP( File Transfer Protocol) 是连接到互联网上的计算机之间的传送文件的协议。

可以使用虚拟机获取其他环境

即使不通过应用程序的移植,在同一个操作系统上仍然可以使用其他的操作系统,那就是使用 虚拟机软件。虚拟机(Virtual Machine)指通过软件的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。

提供相同运行环境的 Java 虚拟机

总算是提到大 Java 了, Java 大法好,除了虚拟机的方法之外,还有一种方法能够提供不依赖于特定硬件和操作系统的程序运行环境,那就是 Java。

大家说的 Java 其实有两层意思,一种是作为编程语言的 Java;一种是作为程序运行环境的 Java。Java 与其他语言相同,都是通过源代码编译后运行的。不过,编译后生成的不是特定 CPU 使用的本地代码,而是名为字节代码 的程序。直接代码的运行环境就称为 Java 虚拟机(Java Virtual Machine)。Java 虚拟机是一边把 Java 字节代码逐一转换为本地代码一边在运行着。

程序运行时,将编译后的字节代码转换为本地代码,这样的操作看上去有些迂回,但由此可以实现相同的字节码可以在不同的操作系统环境下运行。

想象一下,你开发完成的应用部署到 Linux 环境下,是不是什么都不用管?

Windows 有专门的 Windows 虚拟机,Macintosh 有 Macintosh 专门的虚拟机。从操作系统来看,Java虚拟机就是一个应用,从运行环境上来看,Java 虚拟机就是运行环境。

BIOS 和引导

最后对一些比较基础的部分做一些补充说明。程序的运行环境,存在着名为 BIOS(Basic Input/Output System)的系统。BIOS 存储在 ROM 中,是预先内置在计算机主机内部的程序。BIOS 除了键盘、磁盘和显卡等基本控制外,还有引导程序的功能。引导程序是存储在启动驱动器启示区域的小程序。操作系统的启动驱动器一般硬盘。不过有时也可能是 CD-ROM 或软盘。

电脑开机后,BIOS 会确认硬件是否正常运行,没有异常的话会直接启动引导程序。引导程序的功能是把在硬盘等记录的 OS 加载到内存中运行。虽然启动应用是 OS 的功能,但 OS 不能启动自己,是通过引导程序来启动的。

文章参考:

《程序是怎样跑起来的》第七章

关注公众号后台回复 191106 即可获得《程序是怎样跑起来的》电子书

程序员需要了解的硬核知识之操作系统入门相关推荐

  1. 程序员需要了解的硬核知识之操作系统和应用

    作者 | cxuan 责编 | maozz 利用计算机运行程序大部分都是为了提高处理效率.例如,Microsoft Word 这样的文字处理软件,是用来提高文本文件处理效率的程序,Microsoft ...

  2. 多余的读写端口什么时候会对程序造成影响_程序员需要了解的硬核知识之控制硬件...

    应用和硬件的关系 我们作为程序员一般很少直接操控硬件,我们一般通过 C.Java 等高级语言编写的程序起到间接控制硬件的作用.所以大家很少直接接触到硬件的指令,硬件的控制是由 Windows 操作系统 ...

  3. 程序员需要了解的硬核知识之控制硬件

    应用和硬件的关系 我们作为程序员一般很少直接操控硬件,我们一般通过 C.Java 等高级语言编写的程序起到间接控制硬件的作用.所以大家很少直接接触到硬件的指令,硬件的控制是由 Windows 操作系统 ...

  4. aomei动态磁盘管理器_程序员需要了解的硬核知识之磁盘

    点击蓝色"Java建设者"关注我哟 加个"星标",阅读我的文章,一起学习成长. 这是Java建设者的第 42篇原创文章 此篇文章是 <程序员需要了解的硬核 ...

  5. 程序员不得不了解的硬核知识大全!

    我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了.在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远 ...

  6. 程序员需要了解的硬核知识之压缩算法

    程序员需要了解的硬核知识之压缩算法 文章目录 程序员需要了解的硬核知识之压缩算法 认识压缩算法 文件存储 压缩算法的定义 几种常用压缩算法的理解 RLE 算法的机制 RLE 算法的缺点 哈夫曼算法和莫 ...

  7. 程序员需要了解的硬核知识之汇编语言(全)

    之前的系列文章从 CPU 和内存方面简单介绍了一下汇编语言,但是还没有系统的了解一下汇编语言,汇编语言作为第二代计算机语言,会用一些容易理解和记忆的字母,单词来代替一个特定的指令,作为高级编程语言的基 ...

  8. 计算机编程基础知识:程序员必知的硬核知识大全

    了解系统的底层原理,让您的编程能力如虎添翼.关键字:程序员 编程 底层 cpu 内存 磁盘 操作系统 硬件 汇编语言 算法 压缩算法 下载地址:点我下载

  9. -32767转化为二进制_程序员需要了解的硬核知识之二进制

    我们都知道,计算机的底层都是使用二进制数据进行数据流传输的,那么为什么会使用二进制表示计算机呢?或者说,什么是二进制数呢?在拓展一步,如何使用二进制进行加减乘除?二进制数如何表示负数呢?本文将一一为你 ...

最新文章

  1. oracle01003,ORA-01003:nostatementparsed-Oracle
  2. 2.3.9 读者-写者问题
  3. iOS13 已越狱 iOS12.4 已越狱
  4. 为什么 muduo 的 shutdown() 没有直接关闭 TCP 连接?
  5. XCode9 拖入文件 不自动添加 compile sources
  6. 【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 赛后总结、46页论文及代码
  7. 不动产 - 权属性质代码
  8. 十几减9的口算题_一年级数学《口算十几减9》教案
  9. 10.5亿人次观看珠海航展!图扑助力展商数字孪生演示,太震撼!
  10. 【svn】 如何在Linux服务器上添加svn账户的教程
  11. matlab圆锥曲线,圆锥曲线:MATLAB绘制椭圆方程的图像 来充电吧
  12. 国外问卷调查到底能不能赚钱?
  13. 《惊涛大冒险》观后感
  14. NWJS(NodeJS)调用打印机 - 打印小票
  15. 打开EXCEL总提示 您尝试打开的文件*.xls格式与文件扩展名指定的格式不相符
  16. PlecsMMA学习1
  17. 多叉树的python实现
  18. 三星n9008 android 6.0,三星note3_三星n9008s_三星n9008s更新6.0
  19. 分析报告-网站搜索引擎优化诊断
  20. BUI Webapp 入门教程

热门文章

  1. python散点图中如何添加拟合线并显示拟合方程与R方?
  2. 三菱FX2NPLC CMP比较指令
  3. 面试时如何用英语自我介绍?
  4. C:求一个3x3的整型矩阵对角线元素之和
  5. js中isNaN和Number.isNaN的区别
  6. 面向边缘计算的视频监控系统架构方案
  7. 理解LSTMs (Long Short Term Memory Networks)
  8. 柯尼卡美能达打印机无法使用ID打印
  9. 软件开发,重点在设计
  10. 4 、python学习笔记第四课:对象、标识符、变量、赋值、常量