深入理解计算机系统---1

程序结构和执行

信息的表示和处理

大多数计算机使用8位也就是1字节来作为最小的可寻内存单位,而不是一个位

机器级程序将内存视为一个非常大的字节数组---称之为虚拟内存

内存每一个字节都有一个独有的数字来标识,也就是地址

所有地址的集合也就是虚拟地址空间

指针是c语言一个重要的特性,它提供了数据结构的元素的机制,他与变量相似,指针也有两个方面值和类型,值表示某个对象的位置,而他的类型表示那个位置所储存对象的类型

一般字节的表示我们使用16进制来表示,原因位:如果使用二进制来表示一个八位的值太过于长了而使用十进制转换又太过于复杂,所以我们一般就用十六进制来表示(二进制表示十六进制是很容易的,从右往左每四个一组就可以转换)所以也可以看出两个十六进制数也就是一字节

在c语言中十六进制是以0x或0X来 作为开头的的数字

每台计算机都有一个字长,知名指针数据的标称大小

因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小(也就是说对于一个字长为s位的机器而言虚拟地址的范围是0-2^s-1,也就是程序最多可以访问2^s个字节0)

现在大多数机器都从32字长换成了64字长的机器(大多数64位子长的的机器可以运行32字长的程序这就是向后兼容)

32字长的虚拟地址空间为4千兆字节(也就是4GB)扩展到64位字长后虚拟地址空间扩展到了16EB大约位1.84*10^19字节

(1EB=1024PB,1PB=1024TB,1TB=1024GB)

32位程序和64位程序的区别在于该程序是如何编译的而不是器运行的机器类型

 寻址和字节顺序

对于跨越多字节的程序对象,我们必须建立两个规则:1这个对象的地址是什么2在内存中如何排列这些字节

多字节对象被储存为连续的字节序列,对象的地址为所使用的字节中最小的地址

某些机器选择在内存中从低到高的有效字节的顺序来储存对象,也有机器是按照从高到低的顺序来储存对象。前一种规则最低有效字节在前面称为小端法,后一种规则最高有效字节在前面称为大端法

 大多数intel机器使用的是小端模式

手机上的操作系统Android和IOS只能运行小端模式

程序的机器级表示

逆向工程:通过研究系统和逆向工作,来了解系统创建的过程

随机访问储存器

类型:静态,动态

静态RAM(SRAM)比动态RAM(DRAM)更快但是也贵的多

SRAM用来作为高速缓存存储器既可以在CPU芯片上也可以在片下

DRAM用来做主存以及图形系统帧缓冲区

猜你喜欢

转载自www.cnblogs.com/fire-works/p/12664702.html