Linux概述

计算机组成概述

计算机组成原理.png

计算机组成原理

如上图计算机的组成结构,CPU运行速度远远高于内存,而内存运行速度又远远高于I/O;
由于三者运行速度巨大差异,如果系统仅运行一个任务(单任务系统),那么将有大量的CPU空闲时间等待缓慢的I/O及内存的读取。为提高CPU的使用效率,于是便产生了多任务系统系统的需求。

多任务系统

多任务实现的基础,我们知道计算机处理任务主要靠CPU和存储,我们分别针对以上两个重要组成部分讨论如何时间多任务处理。

首先考虑单个CPU如何处理多个事件呢?
其实CPU无法真正实现同时处理多个事件,CPU将时间分割成为时间片,第一个时间时间片用于处理task1,第二个时间片用于处理task2……依次类推。这种方式为CPU的时分复用(时分复用概念在计算机领域应用非常广泛)。

其次存储是如何实现多个事件处理,而互不干扰呢?
内存将自身分为指定大小的存储单元,8位2进制为一个存储单元,称之为一个Byte,这些存储单元都拥有自己的地址。为一个程序分配一定数量的存储单元用于存储程序指令与数据,各程序所获得的存储单元地址互不重复,以此实现存储的复用,与时分复用不同,存储采用的是空间的分割复用。

附:内存寻址基础
8bit –> 1Byte
1024Bytes –> 1KB
1024KB –> 1MB
1024MB –> 1GB
以上是位到字节个单位的换算关系,我们考虑考虑一下32bit 的寻址范围:即232

附:内存寻址基础
8bit –> 1Byte
1024Bytes –> 1KB
1024KB –> 1MB
1024MB –> 1GB
以上是位到字节个单位的换算关系,我们考虑考虑一下32bit 的寻址范围:即232


32bit寻址范围计算.png

32位CPU内存寻址范围计

回到正题,CPU与内存实现了复用机制,CPU时间片依次从指定内存段中存取指令与数据进行事件处理,实现多任务:

多任务处理机制.png

显而易见,要实现CPU时间片与内存地址段之间的调度与管理,我们需要一套有效的监控机制,于是多任务的需求便引出了操作系统的诞生。

操作系统发展史

现在流行修家谱,我们看看Unix/Linux的族谱

162406575.gif

该图援引自 http://os.51cto.com/art/200810/92024.htm 

伴随着GNU的需求,Linux最终千呼万唤始出来,1994年Linux 1.0发布。
对以上历史感兴趣的话,可以参考该文《Unix/Linux历史和大事记》(http://os.51cto.com/art/200810/92024.htm )此处不再赘言。

操作系统基础

计算机只能识别二进制机器语言,然而我们是基本上不可能理解复杂的二进制语言的,如何让CPU、内存、I/O这些硬件设备工作?如何让多个任务并行执行而互不冲突?这就是操作系统所要完成的最重要的任务

操作系统的核心功能

  1. 硬件驱动

  2. 进程管理

  3. 安全管理

  4. 网络管理

  5. 内存管理

  6. 文件系统管理

操作系统充当着人与机器之间的翻译官,尽管操作系统仍然难于理解,但相比于010101串已经更容易让人理解了。基于这种思想,我们在系统之上不断增加层次,内核之上的系统调用,系统调用之上的类库,再之上的高级程序语言,由此,操作系统以其相对友好的接口与人类建立了沟通渠道。当然,类库,系统调用,内核,汇编程序这些还是需要人类编写的,但这些工作就交给哪些只可仰望的牛人吧。

系统结构.png

上图描述了操作系统的组成结构,就是这样一层层组织起来的,与OSI七层模型一样,分层的思想充斥着计算机世界。

这里引入两个概念:
API:应用程序接口
ABI:应用程序二进制接口
这两个概念涉及到程序的可移植性,这里仅提出,包括程序编译等相关知识原理,欲知详情请问google。

Linux发行版本

所谓Linux发行版本,就是将Linux内核包括一些常用APP,打包编译好,从而使得我们这些无法掌握编译安装的“小白们”能够更容易安装和使用操作系统。

想了解更全面的Linux发行版本信息详见《Linux发行版本时间线》,这里只对主要分支进行说明。

绘图1.png

Slackware与redhat背后是有商业公司支撑的,而Debian则没有。国内RHEL与Centos的应用较为广泛。

开源软件为Linux发展提供了巨大的推动力,开源软件以提供源码的方式将软件与外界共享。目前的开源协定主要有GNU的GPL, BSD licenses,Apache licenses,相比于GPL后两者的限定较为宽松,协议详情参考wikipedia

闭源软件为用户提供编译完成的二进制可执行程序,源码不对外公开。目前流行的做法是对某软件进行双线授权,分为社区(Community)版本和企业(Enterprise)版本,企业版本提供更为强大的功能和服务,而社区版本在软件基本功能的前提下,在水平足够的时候可以进行你的私人定制(二次开发)。

一个完整的程序包括:二进制可执行文件、配置文件、库文件(程序库)、帮助文件。如果众多文件杂乱无章对于我们进行软件管理来说将带来巨大不便。还好,我们有软件包管理器,它用于将众多文件打包,在安装时展开到文件系统指定位置,卸载时找到程序相关文件并删除,查询软件信息等功能。

不同的Linux发行版本中使用不同的软件包管理工具:

发行版本        软件包管理工具            前段管理工具
Debian          dpkg                   apt-get
Redhat          rpm                    yum(dnf 即将开始使用)
S.u.S.E         rpm                    zypper

最后,介绍一个极具挑战版本,LFS(Linux from Scratch),是一本从零开始编译安装Linux的指导书。

原创文章,作者:N24_雪狼,如若转载,请注明出处:http://www.178linux.com/61945

(0)
N24_雪狼N24_雪狼
上一篇 2016-12-01
下一篇 2016-12-02

相关推荐

  • MySQL 字符集乱码及解决方案

    1、简介         字符集是一套符号和编码的规则,不论是在oracle数据库还是在mysql数据库,都存在字符集的选择问题,而且如果在数据库创建阶段没有正确选择字符集,那么可能在后期需要更换字符集,而字符集的更换是代价比较高的操作,也存在一定的风险,所以,我们推荐在应用开始阶段,就按…

    Linux干货 2015-09-27
  • shell脚本清空系统message日志

      1 #/bin/bash   2 #此脚本用来清空系统message日志文件   3 #author:wyf date:16/10/30   4 LOG_DIR=/var/log   5 ROOT…

    Linux干货 2016-10-30
  • cache: 缓存相关

    cache: 缓存相关 —————————————————— 以下所陈述的缓存概念多是相对web服务而言 缓存所起的作用就是加速,减轻后端服务器压力。一般而言,我们请求的web服务资源往往不是由后端 服务器所响应的(对于颇具规模的站点来说),而是由前端的缓存服务器所缓存的内容直接响应,所以, 我们得到的资源可能不实最新的,因为缓存的数据于后端服务器不一定时同…

    Linux干货 2016-11-08
  • shell脚本编写规范

    1 脚本名以.sh结尾,名称尽量见名之意,比如ClearLog.sh Clear_Log.sh clearlog.sh SerRestart.sh Ser_Restart.sh;2 尽量使用UTF-8编码,注释及输出尽量使用英文;3 一般给到执行权限,但一些关于变量的配置文件不用加执行权限;4 执行的时候可以使用bash 执行,或者使用bash -x执行,可…

    Linux干货 2017-04-16
  • 马哥教育网络班20期+第2周课程练习

    1、Linux上的文件管理命令有哪些?其常用的使用方法及相关示例演示。 答: cp 复制、 mv 移动、rm 删除 (1)cp :复制文件或目录         用法:    cp [OPTION]… [-T] SOURCE DEST    cp [OPTI…

    Linux干货 2016-06-16
  • yum与rpm生产中最频繁使用

    yum 命令 使用方法: yum [选项] [包名称] 常用选项: install #安装软件,后面跟包名称,例如:yum install wget 安装wget软件包list #列出所有软件,一般和grep一起使用,例如:yum list | grep java ,查看所有java安装包,一般情况下不使用search,grep可以更大范围搜索包,例如只记得…

    Linux干货 2017-04-18