仅为个人学习备忘,方便日后查阅
一、红帽认证培训
红帽5.0培训认证考试
基础(RHCE):
RH033:基础
RH133: 操作系统管理
RH253:服务
红帽架构师(RHCA):
RH401:
RH423: (红帽自己的 LDAP)
RH442: 系统调优 black art,硬件运行的基本原理,操作系统基本原理。
调优 (内存的使用,CPU的使用)
RH436: 集群和存储
RHS333:
集群:基本的负载均衡集群,高可用集群,高性能集群
二、电脑是怎么运行的
程序如何运行
CPU只有加载到指令以后才能执行,指令应该放在辅存上,或称为外存。
外存包括 光盘、U盘、硬盘、软盘。(内存不能用来存数据)
计算机在开机的时候,应该到底到哪个地方去加载指令(程序),需要通过在 BIOS 中的 Boot (启动次序 , boot sequence) 里指定。
包括 :
Removable Devices 移动设备 ,例如 U盘,
Hard Drive 硬盘,
CD-ROM Drive 光盘,
Network boot from Intel E1000
自上而下,如果第一个没有,就去找第二个,如果第一个(例如U盘)有,第二个就不会管了。例如,假设硬盘上已经有系统了,想通过光盘重装一遍系统,就必须把启动次序中的 CD-ROM 调到硬盘上面去。
2. 计算机体系结构
* 计算机体系结构之父 : 冯·诺依曼。
* 计算机由五大部件组成:
(1) 运算器(计算器):calculator,数学运算器,
只能进行加法运算和逻辑运算 (加法器、逻辑运算器),负责运算
(2) 控制器: 负责运算器到哪去取数据
(3) 存储器: 存储数据 -- 指的是内存,
是编址存储设备,每个存储单元是 8 位,称为一个字节,每个字节都是有地址(独立引用单元)的。
内存是平面编址的,内存上的每一个存储单元在全局上有一个唯一的地址。
(平面编址:把整个国家放在一块进行编,1号、2号....
三维编址:国家 - 省 - ...)
(4) 输入设备:
(5) 输出设备:
* 计算器 + 控制器 = CPU 中央处理器(CPU,Central Processing Unit)
* 运算器从存储设备里拿到数据进行计算,再把运算结果放到存储器
计算机的核心部件叫运算器 (加法器)
加法器可能产生近位,从右向左进位,先计算个位,再计算十位,。。。
一个加法器只能运算一位,如果需要进行两个3位数相加(例如 111 + 999)就需要3个加法器。因为每个加法器只能按照对应位进行一位数相加。
电子计算机只支持二进制,为什么不能识别十进制?
计算机是电设备,只支持2进制(0, 1) .
由于电源的线路有电阻,本来输出的电压是1伏,可能最终输出是0.8,会导致不精确。如果是整数不精确还好,如果是小数,比如是0.11346,如何去调整电压会非常困难。所以用十进制来表示加法运算会非常麻烦。
二进制就比较简单,有电就用1来表示(无论1伏,3伏还是8伏,只要有电就用1来表示),没电就用0来表示。这就比较简单,大大降低了计算机本身设计上的复杂度。
每一次要进行加法运算,需要到存储器里面获取加数和被加数。程序由指令和数据组成,指令会告诉CPU,在存储器哪一个存储单元中放的是加数,哪一个存储单元中放的是被加数。
控制器需要接受控制指令。
传输数据的线路,称为数据总线。
对控制器而言,获取控制指令的线路,称为控制总线。
指令也放在存储器当中,所以存储器当中,不仅有数据,还有指令。
运算的结果放在内存中,控制器会告诉运算器内存中哪有空间,将结果放进内存。
这一切都在 运算器、控制器、存储器之间完成。
存储器初始的时候是空的,里面什么都没有,因为内存不能存储数据。对于用户来讲,我们首先需要将要运行的程序(指令+数据),先放到存储器里面去。然后运算器和控制器才能读到数据和指令。
这就需要一个外围设备,将指令和数据存到存储器里面,从而运算器和控制器可以从内存中读指令。
输出结果保存在存储器里面,如果一断电,存储器里面所有数据全部丢失。
如果是32位的计算,需要很多根线,所以需要线路复用。用一根线可以用来传加数,也可以传被加数,还可以传指令。给他一个控制位,在CPU上有个控制线。
如果使用一组线来传输加数和被加数,那就需要将数据记录,如果不能记录,当传入被加数时,加数就没了。所以需要设备将加数存起来,这个设备叫寄存器。
运算器,寄存器,控制器是CPU的核心部件。一级缓存,二级缓存也是CPU的部件,但不是核心部件。但是它决定了CPU的性能。
3. 虚拟机
虚拟机就是用软件的方式模拟出来这样一个运算器、控制器、存储器,等等。
4. 启动开机的时候
程序是由 指令 + 数据 组成的,而指令和数据必须载入内存才能实现。
那加电自检 (POST: Power On and Self Testing ,加电自检,上电自检)如何完成的呢?计算机尚不知道自己有哪些盘,而且这些盘还要排次序(Boot Sequence中显示的结果从哪来的)。这个排次序的过程本身就是指令,谁来指挥这个过程呢?
计算机必须要有 自举 的能力。它是借助于额外设备来实现的。
RAM: Random Access Memory 随机访问存储器 -- 存储器,内存。
ROM: Read Only Memory 只读存储器。里面存储的是适用于这台计算机的一堆指令,它能够映射到内存里面去。
圆芯片。这里面的指令不会丢失,就算没电也不会丢失。一开机,计算机会自动的(通过硬件逻辑完成)将芯片里面的程序映射到内存的最底端,最开始那一段,运算器、控制器就会去读这段指令,这段程序就告诉你的主机,去探测有没有键盘,显卡,网卡等等各种硬件设备的。这个过程就叫加电自检。
三、外围设备
将所有外围设备通过总线跟核心相连,如何尽早得知是敲了键盘,而不是鼠标?
轮询:(poll) CPU不停地查看的方式,叫做轮询。 效率非常低。如果一天都没敲键盘,白看了。
中断:(interrupt) 硬件通知机制。谁敲了键盘,就通知CPU有人敲了键盘。
当一个中断发生的时候,CPU怎么知道是键盘还是鼠标?这就需要一个控制芯片。在计算机内部有一个芯片,叫可编程中断芯片,它跟CPU针脚相连。这个控制器上有多根线,每一根线表示一个设备。举例,如果某个事件在第一根线上发生,就知道这个事件就是键盘的,在第二根线上发生,就知道这是鼠标的。
可以在一根线上标识多个设备,用中断向量来表示。(比如一个服务器上接几百块硬盘)
硬盘也需要中断。
外围I/O设备就是通过不停的中断,来跟CPU或计算机核心进行交互的。如果中断的次数多了,主机的性能就会下降。
很多设备的数据的读入读出都要通过中断来完成。如果是一个非常繁忙的服务器,需要通过网卡接收进来别人的请求,然后把对方请求的数据响应出去。如果网卡上非常繁忙,每秒产生2万个中断是很正常的。这时CPU为了处理中断就已经忙的不可开交了,性能下降。
前端总线:Front Side Bus(FSB)
四、南桥北桥
CPU要不停地跟内存打交道,因此CPU和内存之间需要有总线相连,而且中间还需要一个控制器。
北桥:(North Bridge) 高速总线控制器, 离CPU比较近。需要大量数据传输的,需要工作在比较高的频 率下的,快速实现数据交换的,都在北桥上进行连接。北桥早期是用来连接内存的。
南桥:(South Bridge) 低速总线控制器,离CPU稍微要远一点。(低速,例如敲键盘,敲的再快,一秒钟 能敲几次)。南桥与北桥相比要慢的多,大部分的 I/O 设备都在南桥上连接。南桥是用来连接外 围设备的,比如硬盘、键盘、鼠标、显示器等等。这些设备经过南桥汇总以后通过同一根线传给 北桥,由北桥再转给 CPU 。
设备是在一定的频率下进行工作的。
现在内存直接与CPU相连,北桥只负责连接南桥以及其他的总线的控制。
像现在的显卡,处理大量数据的时候,显存要表现一些图象处理,尤其一些3D渲染的时候,需要处理的数据量也非常大,很可能 VGA 芯片直接做在北桥上。
对于一些文件服务器来讲,比如一个 web 服务器,每个人请求的时候都要请求一个页面,页面要打开,称为网页。网页实际上是一个文件,是在服务器上存储的,一个人访问一个 web 服务器是没所谓的,如果一百万人同时访问一个页面,一个网页里面包括图片打开可能有2 M,一百万人同时访问是多少数据,这些数据如果要都是从硬盘上读,硬盘可能工作实在太繁忙,只有10万人能访问,后面90万人都在等着。所以 I/O 设备可能会变得非常慢。硬盘是接在南桥上的,为了让它工作在更高的频率下,可以把它接在北桥上。如果是机械硬盘,通过盘片旋转,接到北桥上也没用。如果是固态硬盘,可以直接在北桥上接固态硬盘,可以实现快速磁盘 I/O 。
五、CPU主频
赫兹:单位时间内某个事件所发生的周期数。
例如加法器,开关闭合代表1,那闭合多久加法器知道数据已经接收进来,而且暂存进来了呢?如果输入加数需要1秒钟,输入被加数需要1秒钟,计算输出又需要1秒钟,那一个计算周期要3秒钟才能完成。因为电传输非常快,而且里面线缆又非常短,开关闭合之后,电瞬间就能到达加法器。如果开关速度非常快,那就意味着加数和被加数的输入输出非常快。
一次频率就能完成一次事件,这次事件可能是完成加数的输入或被加数的输入。
1G = 10的9次方,1G赫兹代表一秒钟要完成10的9次方次变换。
假设CPU的工作频率是 1G赫兹,而内存工作频率是 1M 赫兹,速度不协调。内存的制造工艺决定,频率就是比较慢。更快的内存,成本要高的多。
将快的和慢的中间放一个中间设备,这个设备能够承上启下。
CPU有缓存,一级缓存,二级缓存,三级缓存。缓存的数字越小,说明他距离CPU越近,速度越快,造价越高,因此它就越小,越大就越贵。
寄存器可以与CPU相同的频率进行工作。一级缓存就慢的多了,一级缓存又分为指令缓存和数据缓存。二级缓存比一级缓存要慢,但它比内存要快。缓存要小于内存,一级缓存要小于二级缓存。
程序的局部性原理:时间上的局部性,空间上的局部性。
时间上的局部性:刚刚访问的数据,一会可能还要访问,缓存下来,从内存放到二级,再放到一级,下 次直接从一级缓存中直接就有了。如果以后不访问了,缓存下来就没有意义。
空间上的局部性:如果访问了一个数据,离这个数据非常近的数据可能马上就会被访问到。所以载入一 个数据的时候,把这个数据周围的数据一起载入进来。
六、程序的移植
计算机的硬件芯片,它的各种功能是通过针脚上有电没电来完成的。
Intel 公司生产的CPU,跟摩托罗拉公司生产的CPU,放在一块,它的运行机制可能不一样。一个程序员开发的程序在 Intel 的CPU 上能运行,在摩托罗拉的CPU上不一定能运行。
程序的移植:因为底层芯片的工作机制不同,而程序是必须要依赖芯片才能工作的。
七、汇编语言
机器语言:芯片运算程序的时候是二进制数,程序无论指令还是数据都是二进制的。用二进制编程使用 的语言,称为机器语言。
微码(汇编语言):为了加快程序员开发速度,这个芯片的生产厂家将这个芯片的机器语言附带了一个微 码,每个芯片都支持微码编程.称为汇编语言。用人类的自然语言所能表示的单词, 例如,MOV。
程序员能理解的语言,机器理解不了,所以需要转换。将汇编语言开发的程序编译成机器语言,所以需要编译器。
八、API
微码是芯片自带的,所以Intel的微码和摩托罗拉的微码是不一样的。
汇编语言尽管人类容易识别,但它跟硬件芯片的结合程度非常紧密,所以这种语言称为低级语言。
高级语言:要能在CPU上运行,必需要转换成二进制格式。它也需要编译器。它先转换成汇编,再翻译成机器语言。高级语言要结合额外的机制,来弥合多种芯片之间的不同。
API: Application Programming Interface 应用程序编程接口。在不同的CPU上,使用汇编语言而写出 来的具有相同功能的程序。
九、常见的CPU系列
硬件平台架构:指的是CPU芯片的不同系列。
ARM: 移动硬件平台架构。 芯片特点是省电,性能也不错。
英国公司,只生产知识产权,负责设计芯片。手持智能设备 andior IOS.
x86: 32位平台。AMD 与 Intel 是兼容的,没有太大区别,都是 x86 系列。
x64: x86 64, AMD 64
安腾:intel 从HP 收购。
alpha: HP
UltraSparc: 斯坦福大学设计,后来卖给 sun,由富士通代为生产。
Power: IBM 第一个主频超过 4G 赫兹的CPU
(现在制造工艺遇到瓶颈,无法再提高,4G是个天花板。开始向多核心发展)
M68000: M68K 摩托罗拉
PowerPC: 苹果,摩托罗拉,IBM 三家联合
苹果Mac OS 是 Unix, IOS 也是 Unix ,是FreeBS Unix
Linux 几乎支持以上所有 CPU 类型。
十、操作系统 (os)
Windows
Linux
Unix:
HP-UX : HP
Solaris: SUN
AIX: IBM
SCO UNIX
Unixware
os/2
十一、进程
早期计算机:
输入设备,穿孔纸带;
输出设备:发光二极管
程序员使用汇编写好程序,转换成二进制,用纸带机做成穿孔纸带。
计算机很快,输入输出很慢。
计算机运行1秒钟的代价都很昂贵,尽可能希望计算机只负责运算,而不干别的事情。
脱机批处理:
两台计算机,一个慢的程序员负责编程,将程序存储在磁带上。一个快的负责从磁带上读 入程序,然后进行运算。磁带的缺点是不能随机访问。
jobs: 计算机上运行的一次完整的计算过程,称为一个作业,job,多个作业称为 jobs 。
早期的作业在磁带上,每一个磁带上放一个作业,作业完成了,将磁带拆下来,换下一 个。后来,在一个磁带上放多个作业。多个作业之间用分隔符隔开。
例如:jobs1$$$$$$$$$$$$$$$jobs2.当第一个完成,自动去加载第二个。
在某一个时刻,仍然只能执行一个程序。因为内存只有一个,这个内存是被这个程序全权访问的。
两个程序交叉运行,第二个程序就会把第一个程序内存里面的数据损毁了。
第一个程序做完了,第二个程序在磁带上,为了把程序从磁带读入内存,这段时间CPU空闲。
计算能力是非常昂贵的,人们希望尽可能地让CPU繁忙起来。
多任务系统:计算机核心部件,CPU、Memory 。
假如两个程序,每个程序执行需要10秒。
将一个资源分成多份,CPU处理第一个程序1秒,停下来,保存现场,处理第二个程序1秒。 然后再处理第一个程序,从保存的现场处开始,向后继续。
CPU: 按时间划分
slice: 计算时间 time slice ,5ms, 5ms
Memory: 分段机制
第一个程序从第一段的 001开始
第二个程序从第二段的 001开始
地址就是相对的了。
程序员仍然使用 001,内部由CPU或硬件来完成分段,从每一段的001开始
虚拟地址空间:(不是虚拟内存) 假设是32位系统,不管真正有多少内存,就假设有4G内存。
32位CPU一共地址总线只有32位,32位最多可以引用 2的32次方,即4G个不同的地址。
32位系统最多只能使用4G的物理内存,这是由它的总线宽度决定的。
64位系统就是2的64次方,即4G个4G 内存 (4亿个4G,可不是16G)
每个程序运行的时候,都有自己的虚拟地址空间。不管你物理内存有多大,它认为有4G.
假设,CPU分配给一个程序5ms,如果时间到了,程序赖着不走,由操作系统负责管理硬件资源。
进程:process 一个正在运行的程序,是一个实例,称为进程。
进程有生命周期,启动,结束。
程序放在硬盘上,如果不删一直存在。
所以程序和进程是两码事。
操作系统就是一个通用软件,这种软件不负责完成具体的工作,它只负责协调其他具体程序工作。
程序有执行入口,C语言的 main 函数,Java 的 public static 静态类
system call:
系统调用:有了操作系统以后,任何程序都不能直接跟硬件打交道,要想使用硬件功能,必须通过操 作系统
库:是一堆程序,没有执行入口,自己不能独立运行,只能被其他程序调用(call)执行。它在执行的时 候,可以提供一个统一的调用机制,调用接口是一样的。
系统调用(system call) 过于底层,将底层系统调用一个或多个功能封装起来,做成更高级的接口, 这个高级接口就是库,即 API 。
在windows上使用 windows提供的库进行编程,在 linux 上使用 linux提供的库进行编程,如果两个操作系统提供的库不一样,那在一个平台上开发的程序,在另一个平台上就运行不了了。
shell: 把计算机的功能,通过人类容易操作的方式输出一个接口,通过这个接口,才能真正去操作计算 机。shell 是人机交互接口,广义的 shell 有图形化的,有命令行的。