Linux开山篇2

作者: 杭sing | 来源:发表于2017-05-09 23:53 被阅读26次

    这两天在学习KVM  KVM是内核级虚拟化技术 所以昨天我停止了

    一天,大脑的疲惫能够将精神面貌这个东西和程序员挂不上勾

    在后面的学习里面我应该会专门抽一点时间出来稍微做一下这

    方面的总结。

    开始做知识管理的到现在,我严重发现了自己知识的匮乏,

    在计算机这个海洋或者要用宇宙来比喻的知识域中,

    一个人能掌握的知识点是有限的。做一个做知识总结

    不是在写教科书,而是要将自己在实践中碰到的一系列的

    问题能够有效的将解决办法传递出来。

    但是今天我还是继续讲我的开山篇,不了解硬件方面的知识

    对于一些理解只能死记硬背,要融汇贯通的要下功夫。

    这里提一点,人的记忆终归是有限的。可能你现在连前任的名字都已经记不得了,已经被现任覆盖。

    代码多敲,读书百遍,其义自见。

    上次提到个人计算机架构还有相关设备组件已经到了内存这里

    CPU所使用的数据都是来自于主储存器,不论是软件程序还是数据,都必须要读入主存储器才能使用,个人计算机的主存储器主要组件为动态随机存取内存(DRAM),随机存取只有在通电时才能记录与使用,断电后数据就消失,所以这种RAM也称为发挥性内存。

    考虑主存储器的时候就要考虑频率/带宽/型号/内存容量

    多通道设计:

    所有的数据都必须存放在主存储器,所以主存储器的数据宽度当然是越大越好。但传统的总线宽度一般大约仅达到64位,为了加大这个宽度,因此芯片组厂商就将两个主存储器汇整在一起,如果一支内存可达64位,两支内存就可达128位了,这就是双通道的设计理念。

    DRAM和SRAM

    除了主存储器之外,事实上整部个人计算机当中还有许许多多的内存存在。CPU的数据有主存储器提供,中间需要通过内存控制器,为了CPU读取某些常用的程序和数据,就有了CPU第二层快取,就是CPU内的第二层高速缓存。但是第二层快取整合到了CPU内部,是哟个DRAM是无法达到这个频率速度的,此时就需要静态存取内存(SRAM),SRAM在设计上使用晶体管数量比较多,价格较高,不易做成大容量,不过由于速度快,所以整合到CPU内部成为高速缓存来加快数据的存取是一个不错的方式。

    只读存储器(ROM)

    主板上面的组件是非常多的,而每个组件的参数又具有可调整性。CPU和内存的频率是可以调整的;主板上面如果有内建的网络卡或者是显示适配器时,该功能时否需要启动与该功能的各项参数,是被记录主板上头的一个称为CMOS的芯片上,这个芯片要借助额外的电源来发挥记录功能,所以主板上面会有一颗电池。

    那CMOS内的数据如何读取与更新,在计算机开机的时候可以按下Del按键来进入一个名为BIOS的画面。BIOS(Basic Input Output System)是一套程序,这套程序是写死在主板上面的一个内存芯片中,这个内存芯片在没有通电时也能将数据记录下来,那就时只读存储器(Read Only Memory ,ROM)。ROM是一种非挥发性的内存,另外,BIOS 对于个人计算机来说是非常重要的,因为他是系统在开机的时候首先会去读取一个小程序。

    韧体很多也是使用ROM来进行软件写入的。韧体像软件一样也是一个被计算机所执行的程序,然而他是对于硬件内部而言更加重要的一部分。例如BIOS就是一个韧体,对日常的操作系统没有太大的关系,但是控制着开机时各项硬件参数的取得,所以很多硬件上头都会有ROM来写入韧体这个软件。

    BIOS对计算机系统来讲是非常重要的,因为他掌握了系统硬件的详细信息与开机设备选择等。为了适度的修改BIOS代码,现在BIOS通常是写入类似闪存或EEPROM中。

    可以这样想,韧体就是绑在硬件上面的控制软件。

    CMOS的主要功能为记录主板上面的重要参数,包括系统时间CPU电压与频率,各项设备的I/o地址与IRQ等,由于这些记录数据的记录要花费电力,因此主板上面才会有电池,BIOS为写入到主板上某一块flash或EEPROM的程序,他可以在开机的时候执行,以加载CMOS当中的参数,并尝试呼叫储存装置中的开机程序,进一步进入操作系统当中。BIOS程序也可以修改CMOS中的数据,每种主板呼叫BIOS设定程序的按键都不相同,常见的就是Del 。

    显示适配器

    显示适配器又称为VGA,也是通过CPU的控制芯片来与CPU,主存储器沟通。他对于图形影像的显示扮演相当关键的角色。一般对于图形影像的显示重点在于分辨率与颜色深度,因为每个图像显示的颜色会占用掉内存,因此显示适配器上面会有一个内存的容量,这个显示适配器内存容量将会影响到你的屏幕分辨率与颜色深度。

    GPU就是在显示适配器上面嵌入一个3D加速芯片。

    硬盘与储存设备

    计算机总是需要记录与读取数据,而这些数据不可能每次通过用户输入,所以需要储存设备。计算机储存设备包括:硬盘,软盘,MO,CD,DVD,磁带机,闪存,新一代蓝光光驱。

    硬盘的物理组成

    在硬盘盒里面其实是由许许多多的圆形磁盘盘,机械手臂,磁盘读取头与主轴马达所组成的。实际的数据都是卸载具有磁性物质的磁盘盘上头,然后机械手臂可伸展让读取头在磁盘盘上头进行读写的动作,单一的磁盘盘的容量有限,所以由的硬盘内会有两个以上的磁盘盘。

    磁盘盘上头的数据

    磁盘盘是圆形的,转动通过机械手臂读写。所以设计就是在类似磁盘盘同心圆上面切出一个一个小区块,这些小区块整合成一个圆形,让机械手臂上的读写头去存取。这个小区块就是磁盘的最小物理储存单位,称之为善区(sector),那通一个同心圆的扇区组合的圆就是所谓的磁盘(track)。由于磁盘里面可能会有多个磁盘盘,因此所有磁盘盘上面的同一个磁道可以组合成所谓的磁柱(cylinder)。

    同心圆的外圈的圆比较大,占用的面积比内圈多,所以为了善用这些空间外圈的圆会具有更多的扇区,通常数据的读写会由外圈往内写,这是默认值。

    传输界面

    为了提升磁盘的传输速度,磁盘与主板的连接界面也经过多次的改版,因此有许多不同的界面。传统磁盘界面包括有SATA,SAS,IDE与SCSI等等。若考虑外接式磁盘,那就还包括了USB,eSATA等界面。

    固态硬盘(SSD)传统硬盘有个很致命的问题,就是需要驱动马达去转动磁盘盘,这会造成很严重的磁盘读取延迟。要知道数据在哪个扇区,再命令马达转动,之后读取头去读取正确的数据。如果数据放置的比较离散(扇区分布比较广又不连续),那么读写的速度就会延迟更明显。固态硬盘就是用闪存制作成的高容量设备,这些设备的连接界面也是通过SATA或SAS,而且外形还做的和传统磁盘一样(已经没有读写头和磁盘盘了)。

    固态硬盘最大的好处就是,他没有马达不需要转动,而是通过内存直接读写的特性,因此除了没数据延迟且快速外,还省电。不过闪存有写入次数的限制,使用寿命两年顶天了。

    这里提一点小知识:电脑不正常关机的,硬盘的机械手臂不能回归原位,这是影响寿命的。

    主板

    主板是负责各个计算机组件之间的沟通,但是计算机组件实在太多了,有输出/输入/同步的储存装置等,主板芯片就是通过I/o地址与IRQ 来连接。

    I/o地址类似每个装置的门牌号,IRQ就是连接到CPU的专门路劲。

    数据表示方式

    数字系统

    早期的计算机使用的是通电与否的特性的真空管,如果通电就是1,没有通电就是0,这种只有0/1的环境称为二进制。

    十进制:3456=3*10^3+4*10^2+5*10^1+3*10^0

    二进制:1101010=1*2^6+1*2^5+1*2^3+1*2^1(这里我直接把0省略,手写伤不起啊)

    十进制转二进制用的是除法,相关知识参考计算机概论。

    文字编码系统

    编码系统就是一个字码对照表,输入文字数据时,该文字数据会由编码对照表将该文字转成数字后在存入文件中。反之就是拿出文本。乱码的原因就是编码对照表写错。

    常用的英文编码为ASCII系统,每个符号占用1个字节,所以会有256变化。国际组织ISO/IEC 制定了Unicode编码系统,称为UTF8或万国码。方正就是变成标准。

    软件程序运作

    没有插电的计算机就是一堆废铁,那么插了电的计算机就是一堆会电人的废铁,因为没有软件的运作,计算机的功能就没有办法发挥。

    机器程序与编译程序

    计算机最重要的运算与逻辑判断是在CPU内部,而CPU其实是具有微指令集的,因此CPU工作时,就要参考微指令集的内容了,然后编写让CPU读的懂的脚本给CPU执行,这样就能让CPU运作了。

    这样的流程会出现麻烦:

    需要了解机器语言

    需要了解所有硬件的相关功能函数

    程序不具有可移植性

    程序具有专一性

    所以为了解决这个问题,计算机科学家设计出了一种让人类看得懂的程序语言,然后编译程序就隆重登场了,就是java C,C++等等

    操作系统

    如同前面提到的,在早期想要让计算机执行程序就要参考一堆硬件功能参数,并且学习机器语言才能够编写程序,同时每次写程序时都必须要重新改写,因为硬件与软件功能不见得都一致。如果能将所有的硬件都驱动,并且提供一个发展软件的参考接口来给我们开发软件的话,发展软件就变得简单了。所以下面就不得不提操作系统了。

    操作系统核心

    操作系统其实也是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。操作系统的功能就是让CPU可以开始判断逻辑与运算数值,让主存储器开始加载/读出数据与程序代码,让硬盘可以开始被存取,让网卡可以开始传输数据,让所有周边可以开始运转等等。

    上述的功能就是操作系统的核心了,计算机能不能做到某些事都与核心有关,只有核心有提供的功能,计算机系统才能完成。比如说你的核心u支持TCP/IP的网络协议,那么无论用什么网卡这个核心都无法提供网络能力。

    但是单有核心我们使用者也不知道做啥事,因为核心主要在管控硬件与提供相关的能力,这些管理的动作是非常重要的,如果使用者能够直接使用到核心的话,核心程序很容易被停止或者破坏,导致整个系统奔溃,所以核心程序所放置的内存区块是受保护的,并且开机就被带到内存当中。

    核心帮忙运作好了计算机系统,我们要操作他这时候就需要软件的帮忙了。

    系统呼叫

    硬件现在变成了由核心管理,那么如果我要开发软件的话,自然就要去参考这个核心的相关功能,如此就从原本的参考硬件函数变成参考核心功能。还是麻烦。为了解决这个问题,操作系统通常会提供一整组的开发接口给工程师来开发软件。所以我们只要遵循接口就可以了。例如:学习C语言只要参考C程序语言的函数即可,核心的系统呼叫接口会主动将C程序语言的相关语法变成核心可以了解的任务函数,核心自然能顺利的运作该程序了。

    计算机系统主要由硬件构成,然后核心程序主要在管理硬件,提供合理的计算机系统资源分配(包括CPU资源,内存资源),因此只要硬件不同,核心就要进行修改才行。而由于核心只会进行计算机系统的资源分配,所以在上头还需要应用程序的提供,用户才能操作系统。

    为了保护核心,并且让我们比较容易开发软件,因此操作系统除了核心程序以外,通常会提供一整组开发接口,那就是系统呼叫层。软件工程师只要遵循工人的系统呼叫参数来开发软件,该软件就能在核心上头工作。所以你可以发现,软件与核心有比较大的关系,与硬件关系则不大。与用户相关的就是应用程序了。

    简单说一下概念:

    操作系统的核心层直接参考硬件规格写成,所以通过一个操作系统程序不能够在不一样的硬件架构下运作。举例说:个人计算机版的Windows 10 不能直接在ARM架构(手机)的计算机下运作。

    操作系统知识在管理整个硬件资源,包括CPU,内存,输入输出装置及文件系统文件。如果没有其他的应用程序辅助,操作系统只能让计算机准备妥当,并不能运作其他功能,所以需要相关的运作就需要相关的软件。

    应用程序的开发都是参考操作系统提供的接口,所以该应用程序只能在该操作系统上运作而已,不可以在其他操作系统上运行。

    核心功能

    核心主要是在负责整个计算机系统相关的资源分配与管理,那我们知道其实整部计算机系统最重要的就是CPU与主存储器,所以核心至少包括一下功能:

    系统呼叫接口

    方便程序开发者可以通过和核心的沟通,将硬件的资源进一步利用,于是需要简易的接口开方便程序开发者。

    程序管理

    多任务环境,一部计算机可能同时间有很多工作跑到CPU等待运算处理,核心这个时候必须要能够控制这些工作,让CPU的资源作有效的分配才行。另外,良好的CPU排程机制(就是CPU先运作哪个工作的排列顺序)将会有效的加快整体系统效能。

    内存管理

    控制整个系统的内存管理,这个内存控制是非常重要的,因为系统所有的程序代码与数据都必须要先存放在内存当中,通常核心会提供虚拟内存的功能,当内存不足时可以提供内存置换的功能。

    文件系统管理

    文件系统管理,例如数据的输入输出(I/O)等巩固走,如果你的核心不认识某个文件系统,那么将无法使用该文件格式的文件。

    装置的驱动

    装置的驱动程序就是核心要做的事,目前都有所谓的可加载模块,可以将驱动程序编辑成模块,就不需要重新的编译文件了。

    操作系统和驱动程序

    驱动程序可以说是操作系统里面相当重要的一环,硬件在不断的进步,较新的硬件操作系统可能会不认识,那操作系统如何驱动这快新的硬件。为了克服这个问题,操作系统会提供一个接口给硬件开发商。让他们可以设计驱动他们硬件的驱动程序。

    操作系统必须要能够驱动硬件,如此应用程序才能够使用该硬件功能。

    一般来说,操作系统会提供开发接口,让开发商制作他们的驱动程序

    要使用新硬件功能,必须安装厂商提供的驱动程序

    驱动程序是由厂商提供的,与操作系统开发者无关

    应用程序

    应用程序是参考操作系统提供的开发接口所开发出来的软件,这些软件可以让用户操作,达到某些计算机的功能

    说到这里 硬件这方面的知识已经大致讲了一遍,很多细节忽略,要了解自行谷歌。

    下面开始划重点了!

    1:计算器的定义为:接受用户输入指令与数据,经过中央处理器的数学与逻辑单元运算处理后,以产生或储存有用的信息。

    2:计算机的五大单元包括:输入单元,输出单元,控制单元,算数逻辑单元,记忆单元。其中CPU占有控制,算术逻辑单元,记忆单元又包含主存储器与辅助内存

    3:数据会流进/流出是内存是CPU所发布的控制指令,而CPU实际要处理的数据则完全来自于主存储器

    4:CPU设计理念主要分为:精简指令集和复杂指令集

    5:关于CPU频率部分:外频指的是CPU与外部组件进行数据传输时的速度,倍频则是CPU内部用来加速工作效能的一个倍数,两者相乘才是CPU的频率速度

    6:新的CPU设计中,已经将北桥的内存控制芯片整合到CPU内,而CPU与主存储器,显示适配器沟通的总线通常称为系统总线,南桥就是所谓的输入输出总线,主要在联系硬盘,USB,网络卡等接口设备。

    7:CPU每次能够处理的数据量称为字组大小,字组大小依据CPU的设计而有32位与64位。我们现在常称的32位54位计算机就是依据这个CPU解析字组大小而来的。

    8:个人计算机的主存储器主要组件为动态随机存取内存,至于CPU内部的第二层快取则使用静态随机存取内存。

    9:BIOS是一套程序,这套程序是写死到主板上面的一个芯片中,这个内存芯片在没有通电时也能将数据保存下来,那就是只读存储器(ROM)

    10:传统硬盘的组成为:圆形磁盘盘,机械手臂,磁盘读取头与主轴马达所组成,其中磁盘盘的组成为扇区,磁道与磁柱。

    11:常见的文字编码为ASCII,目前主流的时UTF8

    12:计算机操作系统也是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件

    13:计算机主要以二进制作为单位,常用的磁盘容量的单位是bytes,其单位换算为1byte=8bit

    14:最阳春的操作系统仅在驱动与管理硬件,而要使用硬件时,就得需要透过应用软件或者是壳程序(shell)的功能,来呼唤操作系统操作硬件工作。

    其中不免会出现错误,不过比敲代码累啊。欢迎大家到我的公众号交流

    相关文章

      网友评论

        本文标题:Linux开山篇2

        本文链接:https://www.haomeiwen.com/subject/rpfwtxtx.html