首页 > 代码库 > 02 计算机基础

02 计算机基础

仅为个人学习备忘,方便日后查阅  


一、红帽认证培训


红帽5.0培训认证考试


基础(RHCE):

  RH033:基础

  RH133: 操作系统管理

  RH253:服务


红帽架构师(RHCA):

  RH401:

  RH423: (红帽自己的 LDAP)

  RH442: 系统调优 black art,硬件运行的基本原理,操作系统基本原理。

       调优 (内存的使用,CPU的使用)

  RH436: 集群和存储

  RHS333:


集群:基本的负载均衡集群,高可用集群,高性能集群


二、电脑是怎么运行的


  1. 程序如何运行

  

  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 有图形化的,有命令行的。

02 计算机基础