计算机体系结构:运算器+控制器=CPU中央处理单元 

运算器:就是一个加法器,只能做二进制计算,算数和逻辑运算,如加减乘除,移位

控制器:控制协调运算器和存储器交流,接受控制指令,指示运算器如何运算,指示在存储器里存        储数据存取位置

存储器:编址存储设备,8位一字节,存放数据和指令,不能保存数据,指令,刚加电时里面是空的

I/O设备(输入和输出):硬盘,网卡,性能最差,输入 输出设备,用来人与计算机打交道,硬        盘也属于一种输入输出设备

关系:控制器协调着把存储器的哪个存储单元里面的数据读取到运算器上


主板上的各类总线提供五大部件连接线通路

总线BUS:数据,控制信号传输

1.地址总线:寻址

2.控制总线

3.数据总线

4.线路复用:加数,被加数(数据),指令都可以在此线路传输



Cpu每个针脚代表一种功能(运算方式)

CPU指令集规定了10各种拼凑方式代表什么意义,硬件应该如何执行

CPU时钟频率:Ghz为单位 4Ghz代表最大1秒钟变化40多亿次,传输40多亿个数据,通过晶体管震荡实现开关闭合打开制造出01


缓存:高速存储器,可以从内存中复制部分常用数据,直接交给CPU,也用来协调硬盘与内存CPU速率差异,连接CPU和内存(内存速度跟不上CPU,需要缓存)一级,二级,三级,数字越小和CPU速度相差越小,预取机制,遵循空间局部性和时间局部性,缓存造价高昂

read ahead:预取,预先加载到缓存中


寄存器:CPU中用来暂时存储传入的数据的,让CPU有记忆功能


中断:CPU通过中断控制器来判断和区分输入输出设备是哪一个,外围设备只有靠不停中断来与CPU交互

敲键盘时,键盘会发出中断信号给cpu,告诉cpu键盘发生状况了,来瞧一下

可编程中断控制器:上面每一根线表示通过向量连接多个设备

Tip:中断多了也会影响cpu性能


4G内存需要32个二进制数字编码,因为232次方是4G,所以32位的计算机总线最多寻址4G内存,因为只有32根总线,每根线只表示01  64位就是4G4G



ROM:只读存储器,适用于计算机的指令,这些指令可以映射到内存中,因为RAM没有断电保存的功能。这些指令可以告诉计算机检测输入输出设备等,用于POST加电自检


前端总线(FSB):

北桥:高速总线控制器,需要大量数据,高频率交换(链接CPU和内存)

现在一般把高速的输入输出设备(如固态硬盘直接接到北桥上,速度更快。CPU较近,告诉总线控制器----快速实现数据交换


南桥:低速总线控制器---连接各种外围设备,硬盘,键盘,鼠标,通过总线连接到北桥

如何让系统更快:固态硬盘直接连接在北桥上

 

虚拟机:硬件+软件一起模拟实现硬件功能

CPU虚拟化:将CPU被切割成时间片

内存虚拟:线性地址空间---=每个进程自身认为自己有3G内存空间(还有1G给内核),事实上并不是

虚拟机内存:将本来已经虚拟的内存再进行虚拟,物理地址空间虚拟为线性地址空间



为了方便地和计算机打交道,有了操作系统,可以封装底层计算能力,抽象为统一接口,让程序员无需基于二进制编程,这样程序员就可以面向操作系统写程序了,简单了很多。特权指令只能由内核代为执行,普通指令则程序自己可以调用执行


kernel内核功能:

  1. 进程管理

  2. 内存管理

  3. 文件系统

  4. 网络功能

  5. 硬件驱动

  6. 安全机制


内核调用

system call(内核接收其他程序的请求)

malloc(), free() 申请内存和释放内存的两个系统调用


库调用:封装系统调用 

liberal call 

 

解释器,编译器,虚拟机

 

API(库):一种高级语言与计算机交互的环境  库被调用才可以执行。硬件与编程语言之间的兼容层,让多种语言能在多种硬件平台上运行


库:一堆程序,没有执行入口,可以被其他程序调用执行,不能被独立执行

将底层系统调用组合起来,做成一个更高级的接口,方便程序和硬件打交道,一些公共的程序,所有程序都会用到它


二进制编程--->微码编程(汇编语言)--->系统调用编程(基于操作系统)---->库调用编程(c,c++库)---->高级语言编程(基于各种编译器或解释器)


POS: Portable Operating System  POSIX

一种规则-----可移植操作系统规范,在不同平台写的程序可以相互兼容(API相同)

 

编译  汇编 链接 执行

 

汇编:汇编语言转换为计算机认识的二进制代码

编译:其他语言转换为汇编语言的过程


Windows共享库:.dll文件动态链接库

Linux库:.so文件  共享对象,一份库谁都可以用,极大节约资源,极大地节约了内存


NUMA:非一致性内存访问,每一颗CPU都有自己专有的内存空间,不过需要进程和CPU绑定。

 

程序运行:向内核申请占据CPU执行指令

 

写的程序一旦编译后就只能在特定平台上运行了,但是java不是这样的

应用程序是否能运行还依赖于支持哪种架构的CPU

API:编译前

ABI:编译后

 

CPU架构类型:

    x86

     x64

    arm

    m68000,m68k

    power

    powerpc

    ultrasparc

    alpha

    安腾