一、不同的结构
中央处理器的体系架构可以分为:冯·诺依曼结构和哈佛结构
冯·诺伊曼结构与储存程序型电脑是互相通用的名词,其用法将于下述:8086,ARM7,MIPS
而哈佛结构则是一种将程序指令存储和数据存储分开的存储器结构设计概念:AVR,PIC,ARM9,10,11
二、计算机中的信息
系统中所有信息——包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串位(八位一字节)来表示的。区分数据对象的唯一方法是我们读到这些数据对象时的上下文。
gcc -o hello hello.c
ccl编译为汇编程序hello.s
as翻译为机器语言hello.o
ld链接单独编译好的目标文件(比如printf.o)得到可执行文件hello(可以被加载到内存中由系统执行)
四、硬件系统
PC : Program Counter.(在任何时刻,PC都指向Memory中某条机器语言指令)
ALU: arithmetic/logic unit(计算新的数据和地址)
The register file: a small storage device that consists of a collection of word-sized registers, each with its own unique name
BUS(字中的字节数(字长):四字节,32位,八字节,64位;假设字长四字节,一次传输一个字)
I/O
Main Memory(一组DRAM芯片构成,逻辑上算是线性的字节数组,每个字节有唯一的地址(即数组索引))
Disk
…
shell程序(外壳)执行用户输入的命令行,如果该命令行第一个单词不是一个内置的外壳命令,那么外壳会假设这是个可执行文件的名字,它将加载并运行这个文件(hello)。
五、程序的运行(处理器读取并解释存放在主存里的二进制文件)
1)、从键盘读取hello命令
用户输入”./hello”,shell程序将字符逐一读入寄存器(Register file),再把它放到存储器(Main memory)中,
当“回车”被敲下时,外壳知道我们已经结束了命令的输入。shell会执行一系列命令加载可执行的hello文 件,将hello目标文件中的代码和数据从磁盘复制到Main memory中。数据包括最终会被输出的字符串”hello,world\n”.
2)从磁盘加载可执行文件到Main memory
DAM技术:数据不通过处理器而直接从磁盘到达Main memory
3)将输出字符串从Main memory 写到显示器
目标文件”hello“中的 代码和数据 被加载到Main memory 后,处理器开始执行hello程序中main程序中的机器语言指令。这些指令将”hello,world\n“字符串中的字节从Main memory复制到寄存器文件(Register file),再从寄存器文件复制到显示设备。
4)高速缓存
**存储容量与速度**
较大的存储设备比较小的存储设备运行的慢,
寄存器:几百字节
Main memory:几十亿字节
高速缓存存储器(Cache memories):分层次,数万到数百万字节不等(L1访问速度几乎与寄存器一样快)
无论数据还是代码,都要先复制到Main memory(大,但是不够快),这样很慢,程序员希望减缓时间开销,故采用更小、更快的存储设备(高速缓存)
六、存储设备层次结构
七、操作系统
1.进程
线程:一个进程可以由多个线程作为执行单元
2虚拟存储器
程序代码和数据:代码是从同一固定地址开始,紧接着的是和C全局变量相对应的数据区。 (静态存储空间)
堆:代码和数据区后紧随着的是运行时堆。作为调用malloc和free这样的C标准库函数,堆可以在运行时动态的扩展和收缩。(动态存储区)
共享库:在地址空间的中间附近是一块用来存放像C标准库和数学库这样共享库的代码和数据的区域。(C标准库函数的指令,编译连接阶段加入到编译后的代码)
栈:位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用。和堆一样每次我们从函数返回时,栈就会收缩。
内核虚拟存储器:内核是操作系统总是驻留在存储器中的部分。地址空间顶部的四分之一部分是为内核预留的。
3.文件
在Windows系统中,任何一个进程都被赋予其自己的虚拟地址空间,该虚拟地址空间覆盖了一个相当大的范围,对于32位进程,其地址空间为232=4,294,967,296 Byte,这使得一个指针可以使用从0x00000000到0xFFFFFFFF的4GB范围之内的任何一个值。虽然每一个32位进程可使用4GB的地址空间,但并不意味着每一个进程实际拥有4GB的 物理地址空间,该地址空间仅仅是一个虚拟地址空间,此虚拟地址空间只是内存地址的一个范围。进程实际可以得到的物理内存要远小于其虚拟地址空间。进程的虚拟地址空间是为每个进程所私有的,在进程内运行的线程对内存空间的访问都被限制在调用进程之内,而不能访问属于其他进程的内存空间。这样,在不同的进程中 可以使用相同地址的指针来指向属于各自调用进程的内容而不会由此引起混乱。
关于虚拟地址空间是如何分配的?等更加详细的内容可以看这个博客
http://blog.chinaunix.net/uid-14735472-id-3987296.html
八、网络
…
网络也是一种I/O设备
九、重要概念
1.并发并行(concurrency AND parallelism)
并发:同一时具有多个活动的系统
1.线程级并发
分时系统模拟并发:进程间快速切换
多处理器与超线程:一个线程必须等某些数据被装载到高速缓存中,CPU可以去执行另一个线程Intel Core i7
可以让一个核并行执行两个线程(四核八线程)
2.指令集并行
处理器同时执行多条指令
流水线操作
超标量
3.SIMD
单指令、多数据(一个指令产生多个可以并行执行操作)(并行对4对float 做加法)