Loading... # 范围 书封面-书P34 # 笔记 ## 1 不同的程序写法往往是致命的,x<y并不能用x-y<0来替代,也不能用-y<-x来替代。(P-XIV) ## 2 编译器的四个阶段 编译器的四个阶段(P3): ![](https://cdn.jsdelivr.net/gh/MapleWithered/img-storehouse@latest/picgo/img-2021-09-02-02-16-51.png) 1. C语言源代码 2. 预处理器 -> 修改后的C(比如说加了include的头文件)(后缀.i) 3. 编译器 -> ASM代码(汇编代码)(后缀.s) 4. 汇编器 -> **可重定位**目标程序(二进制程序)(后缀.o) 5. 链接器 -> **可执行**目标程序(二进制程序)(此时链接了需要用到的库) ## 3 存储器层级结构 存储器层级结构(P10): ![](https://cdn.jsdelivr.net/gh/MapleWithered/img-storehouse@latest/picgo/img-2021-09-02-02-19-46.png) 注意: 1. 寄存器是L1的高速缓存! 2. L3在多核处理器上经常以多核共享高速缓存的形式存在,L1与L2为每核独享 3. 虚拟内存很大,进程虚拟内存的内容**存储在磁盘上**,**主存作为磁盘的高速缓存**(P14) ## 4 进程与线程 (P11-12) 进程并发通过进程间切换实现,此机制称为*上下文切换*。 Linux中,上下文包括**程序计数器(PC)、寄存器、以及主存的内容** 上下文切换时,操作系统保存当前进程上下文,恢复新进程的上下文,将控制权传递给新进程。 进程*可以*由多个线程组成 线程运行在进程的上下文中,共享同样的代码和全局数据。 多线程比多进程更容易共享数据,线程一般比进程更高效。 进程并发需要上下文切换,而线程共享上下文。 ## 5 并发与并行 按照系统层次结构中由高到低的顺序强调三个层次(P17-19): 1. 线程级并发(多处理器多核、超线程环境下多线程同时运行) 2. 指令级并行(单指令周期执行多条指令,猜测是依靠预测等手段进行的)(超标量处理器,super-scalar) 3. 单指令、多数据并行(SIMD,向量运算) ## 6 (P22) 浮点运算是不可结合的!(会因为精度原因造成不同的结果) e.g. 3.14+(1e20-1e20) != (3.14+1e20)-1e20 ## 7 信息单位 (P27) 1. `Byte`: 8 2. `WORD`:根据机型而定,32或64,决定了虚拟内存范围(内存的地址为一个WORD) 3. `char`:1 Byte(256) 4. `short`:2 Byte(65536) 5. `int`:4 Byte 6. `long`:在64位机器上为8 Byte 7. `p*`:32位为4 Byte(32 bit),64位为8 Byte(64 bit) 8. `double`:即使在32位环境下也为8 Byte(64 bit) 可以指定int的大小,如:`int32_t`与`uint64_t`等。 ## 8 大端法和小端法(字节顺序) (P29) 如:(int, 4Byte) 0x 00 AB CD EF, 小端法(数据小端靠近数据地址): | 内存地址 | 内容 | | :-: | :-: | | ... | ... | | 0x103 | 00 | | 0x102 | AB | | 0x101 | CD | | <u>**0x100**</u> | EF | | ... | ... | | 0 | ... | 大端法(数据大端靠近数据地址): | 内存地址 | 内容 | | :-: | :-: | | 0 | ... | | ... | ... | | <u>**0x100**</u> | 00 | | 0x101 | AB | | 0x102 | CD | | 0x103 | EF | | ... | ... | ![](https://cdn.jsdelivr.net/gh/MapleWithered/img-storehouse@latest/picgo/img-2021-09-02-02-54-20.png) # 问题 1. (P12)系统调用(System Call)与键盘上SysRq键之间的关系? 2. (P13)进程的虚拟地址空间中,堆向高地址扩张,栈向低地址扩张? 3. (P13)内核虚拟内存不允许通过地址访问,只允许调用内核来访问,为什么还要放在进程虚拟地址空间中? 4. (P27)`uint32_t`中的`t`代表什么?(A:typedef) 5. (P27)好奇32位环境下`double`是如何计算的,会不会牺牲性能,为什么会牺牲性能,64位环境下速度会不会更快?64位环境下double会不会和float是同一量级的运行速度? 最后修改:2021 年 09 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得这篇文章对你有用,请随意赞赏~