Linux(1):开始

计算机组成概述

计算机:接受用户输入指令与数据,经由中央处理器的数学与逻辑单元处理后,以产生或存储有用的信息。
主要可以分为3个部分:输入单元、主机单元、输出单元。

中央处理器(Central Processing Unit, CPU) 为一个具有特定功能的芯片,内部含有微指令集。
因为CPU的主要工作在于管理和运算,因此,CPU 内又可以分为两个主要单元:
1.算数逻辑单元:负责程序运算与逻辑判断;
2.控制单元:协调各周边组件与各单元间的工作。

CPU 读取的数据都是从主存储器来的。主存储器内的数据则是从输入单元所传输进来。CPU 处理完毕的数据也必须要先写回主存储器中,最后数据才从主存储器传输到输出单元。
基本上数据都是流经过主存储器再转出去的

CPU 架构

CPU目前有两种主要的架构: 精简指令集(RISC)复杂指令集(CISC) 系统。
精简指令集(RISC) :微指令集较为精简,每个指令的运行时间都很短,完成的动作也很单纯,指令的执行效能较佳: 但是若要做复杂的事情,就要由多个指令来完成。
复杂指令集(CISC) :CISC 在微指令集的每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂, 每条指令的长度并不相同。因为指令执行较为复杂所以每条指令花费的时间较长, 但每条个别指令可以处理的工作较为丰富。常见的 CISC 微指令集 CPU 主要有 AMD、Intel、VIA 等的 x86 架构的 CPU。

CPU 所谓的位指的是 CPU 一次数据读取的最大量。32(64)位 CPU 则是 CPU 一次只能读取 32(64)位的意思。

CPU 的工作频率:外频与倍频

频率就是CPU每秒钟可以进行的工作次数。

不同的 CPU 之间不能单纯的以频率来判断运算效能
因为不同 CPU 的微指令集不相同,架构也不见得一样,可使用的第二层快取及其计算器制可能也不同, 加上每次频率能够进行的工作指令数也不同。所以,频率目前仅能用来比较同款 CPU 的速度。

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

超频 指的是: 将 CPU 的倍频或者是外Tips频透过主板的设定功能更改成较高频率的一种方式。但因为 CPU 的倍频通常在出厂时已经被锁定而无法修改,因此较常被超频的为外频

32 位与 64 位的 CPU 与总线

CPU 每次能够处理的数据量称为 字组大小(word size),字组大小依据 CPU 的设计而有 32 位与 64 位。
现在所称的计算机是 32 或 64 位主要是依据这个 CPU 解析的字组大小而来的。

超线程(Hyper-Threading,HT)

在每一个 CPU内部将重要的缓存器 (register) 分成两群, 而让程序分别使用这两群缓存器。也就是说,可以有两个程序同时竞争 CPU 的运算单元,而非透过操作系统的多任务切换! 这一过程就会像同时拥有两个核心一样。

计算机上常用的计算单位

容量单位
0/1 这个二进制的的单位称为 bit。但 bit 实在太小了,所以在储存数据时每份简单的数据都会使用到 8bits 的大小来记录,因此定义出 byte 这个单位,他们的关系为:1 Byte = 8 bitsK 代表 1024 byte,M 代表 1024K

速度单位
CPU 的指令周期常使用 MHZ 或者是 GH 之类的单位,这个 H 其实就是秒分之一
在网络传输方面,由于网络使用的是 bit 为单位,因此网络常使用的单位为 MbpsMbits per second,亦即是每秒多少 Mbit

内存

个人计算机的主存储器主要组件为动态随机存取内存(DynamicRandom Access Memory,DRAM), 随机存取内存只有在通电时才能记录与使用,断电后数据就消失了。因此也称这种 RAM 为挥发性内存

SDRAM 与DDR SDRAM 两种DRAM:差别除了在于脚位与工作电压上的不同之外,DDR 是所谓的双倍数据传送速度(DoubleData Rate), 他可以在一次工作周期中进行两次数据的传送,感觉上就好像是 CPU 的倍频,所以传输频率方面比 SDRAM 还要好。
现在的 PC 机,DDR内存用的多。

主存储器除了频率/带宽与型号需要考虑之外,内存的容量也很重要。
因为所有的数据都得要加载内存当中才能够被 CPU 判读,如果内存容量不够大的话将会导致某些大容量数据无法被完整的加载,此时已存在内存当中但暂时没有被使用到的数据必须要先被释放,使得可用内存容量大于该数据,那份新数据才能够被加载。所以,通常越大的内存代表越快速的系统,这是因为系统不用常常释放一些内存内部的数据。
以服务器来说,主存储器的容量有时比 CPU 的速度还要来的重要的。

多通道设计

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

要启用双信道的功能必须要安插两支(或四支)主存储器,这两支内存最好连型号都一模一样比较好, 这是因为启动双信道内存功能时,数据是同步写入/读出这一对主存储器中,如此才能够提升整体的带宽。除了容量大小要一致之外,型号也最好相同。

DRAM 与 SRAM

某些很常用的程序或数据可以放置到 CPU 内部,CPU 数据的读取就不需要跑到主存储器重新读取了,效能大大提升。<第二层快取高速缓存>
静态随机存取内存(Static Random Access Memory,SRAM)的引入:因为第二层快取(L2 cache)整合到 CPU 内部,因此这个 L2 内存的速度必须要 CPU 频率相同。

只读存储器(ROM)

BIOS(Basic Input Output System) 对计算机系统来讲是非常重要的一套程序,因为他掌握了系统硬件的详细信息与开机设备的选择等等。这套程序是写死到只读存储器(Read OnlyMemory,ROM)。ROM 是一种非挥发性的内存。另外,BIOS 对于个人计算机来说是非常重要的,因为他是系统在开机的时候首先会去读取的一个小程序。

其他计算机设备组件

显示适配器

显示适配器又称为 VGA(Video Graphics Array),对于图形影像的显示重点在于分辨率与颜色深度,因为每个图像显示的颜色会占用掉内存, 因此显示适配器上面会有一个内存的容量,这个显示适配器内存容量将会影响到屏幕分辨率与颜色深度。

硬盘与储存设备

在硬盘盒里面由许许多多的圆形磁盘盘、机械手臂、 磁盘读取头与主轴马达所组成的,整个内部如同下图所示:
Linux(1):开始_第1张图片
由于单一磁盘盘的容量有限,因此有的硬盘内部会有两个以上的磁盘盘。
磁盘盘上头的数据写入:
Linux(1):开始_第2张图片
由于磁盘盘是圆的,并且透过机器手臂去读写数据,磁盘盘要转动才能够让机器手臂读写。因此,通常数据写入当然就是以圆圈转圈的方式读写。 所以,当初设计就是在类似磁盘盘同心圆上面切出个一个的小区块,这些小区块整合成一个圆形,让机器手臂上的读写头去存取。 这个小区块就是磁盘的最小物理储存单位,称之为 扇区 (sector),那同一个同心圆的扇区组合成的圆就是所谓的 磁道(track)。 由于磁盘里面可能会有多个磁盘盘,因此在所有磁盘盘上面的同一个磁道可以组合成所谓的 磁柱(cylinder)

固态硬盘 最大的好处是,它没有马达不需要转动,而是透过内存直接读写的特性,因此除了没数据延迟且快速之外,还很省电。

主板

I/O 地址 有点类似每个装置的门牌号码,每个装置都有他自己的地址,一般来说,不能有两个装置使用同一个 I/O 地址, 否则系统就会不晓得该如何运作这两个装置了。而除了 I/O 地址之外,还有个IRQ 中断(Interrupt)

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

数据表示方式

常用的英文编码表为 ASCII 系统,这个编码系统中, 每个符号(英文、数字或符号等)都会占用 1 bytes的记录,因此总共会有 2^8 = 256 种变化。
至于中文字当中的编码系统早期最常用的就是 big5 这个编码表了。每个中文字会占用 2 bytes,理论上最多可以有 2^16 = 65536,亦即最多可达 6 万多个中文字

Unicode 编码系统, 我们常常称呼的UTF8 或万国码的编码,打破了所有国家的不同编码。

软件程序运作

操作系统

操作系统(Operating System,OS) 其实也是一组程序, 这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件
操作系统核心主要在管控硬件与提供相关的能力(例如存取硬盘、网络功能、CPU 资源取得等)。
这些管理的动作是非常的重要的,如果使用者能够直接使用到核心的话,万一用户不小心将核心程序停止或破坏, 将会导致整个系统的崩溃!因此核心程序所放置到内存当中的区块是受保护的,并且开机后就一直常驻在内存当中。

系统呼叫(System Call)

计算机系统主要由硬件构成,然后核心程序主要在管理硬件,提供合理的计算机系统资源分配(包括CPU 资源、内存使用资源等等), 因此只要硬件不同(如 x86 架构与 RISC 架构的 CPU),核心就得要进行修改才行 。而由于核心只会进行计算机系统的资源分配,所以在上头还需要有应用程序的提供用户才能够操作系统的。
为了保护核心,并且让程序设计师比较容易开发软件,因此操作系统除了核心程序之外,通常还会提供一整组开发接口,那就是系统呼叫层

核心功能

系统呼叫接口(System call interface)
为了方便程序开发者可以轻易的透过与核心的沟通,将硬件的资源进一步的利用,于是需要有这个简易的接口来方便程序开发者。

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

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

文件系统管理(Filesystem management)
文件系统的管理,例如数据的输入输出(IO)等等的工作,还有不同文件格式的支持等等,如果你的核心不认识某个文件系统,那么您、将无法使用该文件格式的文件。例如: Windows 98 就不认识 NTFS 文件格式的硬盘;

装置的驱动(Device drivers)
就如同上面提到的,硬件的管理是核心的主要工作之一,当然,装置的驱动程序就是核心需要做的事情,好在目前都有所谓的[可加载模块] 功能,可以将驱动程序编辑成模块,就不需要重新的编译核心了。

《鸟哥的Linux私房菜-基础篇》学习笔记

你可能感兴趣的:(操作系统,linux,运维,大数据)