linux基础之操作系统简述(实力干货)
一. 计算机的发展
计算机的发展包括
大家都是使用各种不同的操作系统,但是小编觉得有很多人对操作系统真的是知道的不多,如果你想了解,想研究,想看看计算机是怎么运行的?就速来围观吧! 一. 计算机的发展 计算机的发展包括了硬件和软件的发展,硬件的发展为计算机提供了更快的处理速度,而软件的发展为用户提供了更好的体验。两者相辅相成,密不可分。 二. 计算机基本原理 Copy了点计算机的发展历史,现在可以来看看计算机的基本工作原理了。现代计算机,大部分都是基于冯诺依曼体系结构unix操作系统,而我们这里谈论的也是此问前提。冯诺依曼的核心是:存储程序,顺序执行。所以不管计算机如何发展,基本原理是相同的。计算机程序实际上是告诉计算机做什么。 2.1 CPU指令和编程语言 在了解CPU和存储器工作原理之前,先来了解一下CPU指令和我们编程语言之间的一些关系。 2.2.1.1 CPU指令 因为在计算机中指令和数据都用二进制来表示,也就是说它只认识0和1这样的数字。最早期的计算机程序通过在纸带上打洞来人工操操作的方式来模拟0和1,根据不同的组合来完成一些操作。后来直接通过直0和1编程程序,这种称之为机器语言。这里就会有一个疑问,计算机怎么知道你这些组合的意思? 于是就出现了CPU指令,我们现在买CPU都会听到指令集这一说。CPU指令其实就对应了我们这里说的0和1的一些组合。每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。有了CPU指令集的文档你就可以通过这个编写CPU认识的机器代码了。所以对于不同CPU来说可能会有不同的机器码。比如下面我们就定义了一套我们CPU硬件电路可以完成的CPU指令。 指令 格式 说明 0001 [address][register] 读取存储取值到寄存器 0010 [register][address] 写入寄存器的值到存储器 0011 [register1][register2] 加法操作 随着计算机的发展,CPU支持的指令也越来越多,功能也越来越强,上图就是现在Core I5处理器支持的指令集。 2.2.1.2 汇编语言 使用0和1这样的机器语言好处是CPU认识,可以直接执行,但是对于程序本身来说,没有可读性,难以维护,容易出错。所以就出现了汇编语言,它用助记符(代替操作码指令,用地址符号代替地址码。实际是对机器语言的一种映射,可读性高。 指令汇编指令格式说明 0001 READ [addLable][regLab] 读取存储取值到寄存器 0010 WRITE [addLable][regLab] 写入寄存器的值到存储器 0011 ADD [var1][var2] 加法操作 把汇编语言转换为机器语言需要一个叫做汇编器的工具。对于目前的CPU厂商,在推出的CPU指令时都会同时退出新的汇编器。如果你还在使用老版本的汇编器那么只能使用机器码来使用新的指令了。 2.2.1.3 高级语言 汇编语言的出现大大提高了编程效率,但是有一个问题就是不同CPU的指令集可能不同,这样就需要为不同的CPU编写不同的汇编程序。于是又出现了高级语言比如C,或者是后来的C++,JAVA,C#。 高级语言把多条汇编指令合成成为了一个表达式,并且去除了许多操作细节(比如堆栈操作,寄存器操作),而是以一种更直观的方式来编写程序,而面向对象的语言的出现使得程序编写更加符合我们的思维方式。我们不必把尽力放到低层的细节上,而更多的关注程序的本身的逻辑的实现。 对于高级语言来说需要一个编译器来完成高级语言到汇编语言的转换。所以对比不同的CPU结构,只需要有不同编译器和汇编器就能使得我们的程序在不同CPU上都能运行了。如下图在VS2010中,我们可以选择程序编译的目标平台,X86,X64,ARM等。当然除了这些编译类的语言之外还有解释类型的语言如JS,就不在此讨论范围内。 到这里有一个疑问:当CPU的指令集更新后高级语言会有什么影响和变化?对于目前来说,一般出现了新的指令,会有对应的新的汇编器和编译器。所以编译器可以把一些高级语言的表达式编译成新的汇编指令,这样对于高级来说不会有任何变化; 当然还有一种情况就是高级语言会增加新的语法来对应一些新的汇编语言和指令。但是这种情况出现的几率很小。所以如果编译器不支持新的指令,那么只有只用汇编会来实现了。 2.2.1.4 小结 从上面的我们可以看出,我们写的程序最终都将变成机器认识的二进制可执行程序,然后加载到内存顺序的执行。 从机器码到汇编到高级语言,我们可以看到计算机中无处不在的分层,抽象的思想。不光光是软件,硬件同样适用。最后留下一个问题在这里: C#和JAVA程序编译出来的文件不是二进制的机器码,而是中间语言,那么他们又是怎么运行的呢? 2.2.2 CPU工作原理 前面已经了解了现代计算机的大致结构,也知道CPU是按照CPU指令来执行操作,那么就看看CPU的结构和他是如何执行顺序操作的。 2.2.2.1 CPU功能 指令控制: 指令控制也称为程序的顺序控制,控制程序严格按照规定的顺序执行。 操作控制: 将取出的指令的产生一系列的控制信号(微指令),分别送往相应的部件,从而控制这些部件按指令的要求进行工作。 时间控制: 有些控制信号在时间上有严格的先后顺序,如读取存储器的数据,只有当地址线信号稳定以后,才能通过数据线将所需的数据读出,否则读出的数据是不正确的数据,这样计算机才能有条不紊地工作。 数据加工: 所谓数据加工,就是对数据进行算术运算和逻辑运算处理。 所谓数据加工,就是对数据进行算术运算和逻辑运算处理 2.2.2.2 CPU基本组成 以前CPU主要由运算器和控制器两大部分组成,随着集成电路的发展,目前CPU芯片集成了一些其它逻辑功能部件来扩充CPU的功能,如浮点运算器、内存管理单元、cache和MMX等。下面2张图分别是8086和Pentium CPU的结构图。 对于一个通用的CPU来说,我们只需要关注他的核心部件算数逻辑单元和操作控制单元。 1. 控制器的组成和功能: 控制器由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成。它是计算机指挥系统,完成计算机的指挥工作。尽管不同计算机的控制器结构上有很大的区别,当就其基本功能而言,具有如下功能: 2. 运算器的组成和功能: 运算器由算术逻辑单元(ALU)、累加寄存器、数据缓冲寄存器和状态条件寄存器组成,它是数据加工处理部件,完成计算机的各种算术和逻辑运算。相对控制器而言,运算器接受控制器的命令而进行动作,即运算器所进行的全部操作都是由控制器发出的控制信号来指挥的,所以它是执行部件。运算器有两个主要功能: 2.2.2.3 CPU工作流程 CPU的基本工作是执行存储的指令序列,即程序。程序的执行过程实际上是不断地取出指令、分析指令、执行指令的过程。几乎所有的冯?诺伊曼型计算机的CPU,其工作都可以分为5个阶段:取指令、指令译码、执行指令、访存取数和结果写回。 2.2.2.4 指令周期 指令周期: CPU取出一条指令并执行该指令所需的时间称为指令周期。指令周期的长短与指令的复杂程度有关。 CPU周期:从主存读取一条指令的最短时间来规定CPU周期。指令周期常常用若干个CPU周期数来表示。 时钟周期:时钟周期是处理操作的最基本时间单位,由机器的主频决定。一个CPU周期包含有若干个时钟周期。 从上面的定义可以知道,对于CPU来说取出和执行任何一条指令所需的最短时间为两个CPU周期。所以频率越高,那么时钟周期越短,这样CPU周期和指令周期也就越短,理论上程序执行的速度也越快。但是频率不能无限的提高,而且频率的提高也带来了功耗,发热等问题,所以目前也有超线程,流水线等技术来提高CPU执行的速度。 2.2.2.5 时序发生器 时序信号: 在计算机高速运行的过程中,计算机内各部件的每一个动作都必须严格遵守时间规定,不能有任何差错。计算机内各部件的协调动作需要时间标志,而时间标志则是用时序信号来体现的。计算机各部分工作所需的时序信号,在CPU中统一由时序发生器来产生。 时序发生器: 时序信号发生器是产生指令周期控制时序信号的部件,当CPU开始取指令并执行指令时,操作控制器利用时序信号发生器产生的定时脉冲的顺序和不同的脉冲间隔,提供计算机各部分工作时所需的各种微操作定时控制信号,有条理、有节奏地指挥机器各个部件按规定时间动作。 在这里有一个疑问:指令和数据都存放在内存中,那么CPU怎么区分是指令还是数据呢? 从时间上来说,取指令事件发生在指令周期的第一个CPU周期中,即发生在“取指令”阶段,而取数据事件发生在指令周期的后面几个CPU周期中,即发生在“执行指令”阶段。从空间上来说,如果取出的代码是指令,那么一定送往指令寄存器,如果取出的代码是数据,那么一定送往运算器。 三,计算机的构成: (冯·诺依曼体系结构) 四,操作系统构成: 1、核心与其提供的接口工具、 核心(Kernel):核心是控制整个硬件支持的东西,也是一个操作系统的最底层, 2、利用核心提供的接口工具所开发出来的软件 五、核心必备项: 1、系统呼叫接口(System call interface) : 为了方便程序开发者可以轻易的透过与 kernel 的沟 通,将硬件的资源进一步的利用, 于是需要有这个简易的接口来方便程序开发者。 2、行程管理(Process control) : 总有听过所谓的『多任务环境』吧?一部计算机可能同时间有很 多的工作跑到 CPU 等待运算处理, Kernel 这个时候必须要能够控制这些工作,让 CPU 的资源 作有效的分配 3、内存管理(Memory management) : 控制整个系统的内存管理,若内存不足, Kernel 最好还能够 提供虚拟内存的功能 4、档案系统管理(File system management) : 档案系统的管理,例如数据的输入输出 (I/O) 等等 的工作啦! 还有不同档案格式的支持啦等等,如果你的核心不认识某个档案系统, 那么您将无 法使用该档案格式的档案啰!例如: Windows 98 就不认识 NTFS 档案格式的硬盘; 5、装置的驱动(Device drivers) : 就如同上面提到的,硬件的管理是 Kernel 的主要工作之一, 当然啰,装置的驱动程序就是核心需要做的事情啦! 好在目前都有所谓的『可加载模块』功能, 可以将驱动程序编辑成模块, 就不需要重新的编译核心啦!这个也会在后续的核心编译当中提到 的! 六、linux来源 创始人:托瓦兹 Torvalds (ps:这是linux出生的时候,神级人物Torvalds在linux发布的时候说的一句话,一个新时代就这样来临了!) 1、linux发展史介绍: ? Unix 的前身是由贝尔实验室(Bell lab.)的 Ken Thompson 利用组译语言写成的, 后来在 1971-1973 年间由 Dennis Ritchie 以 C 程序语言进行改写,才称为 Unix。 ? 1977 年由 Bill Joy 释出 BSD (Berkeley Software Distribution),这些称为 Unix-like 的操 作系统。 ? 1984 年由 Andrew Tannenbaum 制作出 Minix 操作系统,该系统可以提供原始码以及软件; ? 1984 年由 Richard Stallman 提倡 GNU 计划,倡导自由软件(Free software), 强调其软件可 以『自由的取得、复制、修改与再发行』,并规范出 GPL 授权模式, 任何 GPL (General Public License) 软件均不可单纯仅贩卖其软件,也不可修改软件授权。 ? 1991 年由芬兰人 Linus Torvalds 开发出 Linux 操作系统。简而言之,Linux 成功的地方主要 在于: Minix(Unix), GNU, Internet, POSIX 及虚拟团队的产生。 ? Linux 本身就是个最阳春的操作系统,其开发网站设立在 ,我们亦称 Linux 操作系统最底层的数据为『核心, Kernel』。 ? 目前 Linux 的发展分为两种版本,分别是稳定版本的偶数版,如 2.6.X,适合于商业与家用环境 使用; 一种是发展中版本如 2.5.X 版,适合开发特殊功能的环境。 ? Linux distributions 为 Linux 的 Kernel + Tools + Free Software + Documentations + 可 完整安装的程序所制成的一套完整的系统。 2、什么是POSIX ? POSIX 是一种标准规范,主要针对在 Unix 操作系统上面跑的程序来进行规范。 若您的操作系统 符合 POSIX ,则符合 POSIX 的程序就可以在您的操作系统上面运作。 Linux 由于支持 POSIX , 因此很多 Unix 上的程序可以直接在 Linux 上运作, 因此程序的移植相当简易!也让大家容易 转换平台,提升 Linux 的使用率。 (核心网站) ~ckhung/a/c_83.php 3、 linux分支 ? Red Hat: ? Fedora: ? Mandriva: ? Novell SuSE: ? Debian: ? Slackware: ? Linpus: ? Gentoo: ? Ubuntu: ? CentOS: Linux 其实就是一个操作系统最底层的核心及其提供的核心工具。 他 是 GNU 授权模式,所以,任何人均可取得原始码与可执行这个核心程序,并且可以修改。 此外,因为 Linux 参考 POSIX 设计规范,于是兼容于 Unix 操作系统, 故亦可称之为 Unix Like 的一种。 4、linux体系结构 Linux 提供了一个完整癿操作系统当中最底层的硬件控制与资源管理的完整架构 愿这篇文章能给您带来帮助,错误之处还希望大家多多指正,小编一定及时改正!愿老司机勿喷!愿世界和平!如果您觉得还行,就动手点个赞关注我们吧!(ps:后期小编会推出各种实用的干货,如果你喜欢并且能给你带来帮助!快来关注我吧!) (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |