前言
本系列博客主要作为学习记录的笔记,仅个人使用。
书籍:深入理解计算机系统 第三版
1 第一章
1.1 系统硬件组成
-
总线:携带信息字节,并负责在各个部件间传递
-
I/O设备:与外部联系的通道
-
主存:存放程序和程序处理的数据
-
处理器:PC指向主存的某条机器语言指令,cpu在指令的要求下执行相应的操作
1.2 运行hello程序
1.2.1 程序的翻译
1.2.2 程序的运行
1.2.3 存储器层次结构
运用不同的高速缓存,提高程序的运行性能
2 第二章 信息的处理与表示
2.1 信息存储
2.1.2 寻址与字节顺序
大端:高位在低地址处。
小端:高位在高地址处。
在去年暑假做的一个项目中,PowerPC与个人计算机要进行数据交互,一开始没有考虑大小端的问题,收发的数据总是不对。其中PowerPC使用的是大端模式,个人笔记本电脑使用的是小端模式。
从软件的角度看,不同端模式的处理器进行数据传递时需要考虑端模式的问题。互联网使用的网络字节顺序采用大端模式进行编址,这样大端模式处理器的字节序到网络字节序不需要转换;而小端模式处理器的字节序到网络字节必须进行转换。
2.1.3 按字节输出和按位输出
- 按字节输出:可根据输出的字节序,判断大小端。
- 按位输出: 输出内存中的二进制序列。对于整数而言,输出的是补码。 方式:
头文件:#include <bitset>
short n = -5;
cout << "补码: " << bitset<sizeof(short) * 8>(n) << endl;
结果:补码: 1111111111111011
- 有符号数与无符号数之间的转换
都是针对补码的。
对于正数,转换之后还是本身。eg: 5(char)——0000 0101(char)——0000 0101(uchar)——5(uchar)
对于负数,转换之后是一个大的正数。eg: -5(char)——1111 1011(char)——1111 1011(uchar)——251(uchar)