系统级编程
Bit Operation / 位运算
isNonNegative
1 | // return 1 if x >= 0, return 0 otherwise |
isEqual
1 | // return 1 if x == y, return 0 otherwise |
SetByte
1 | /* |
NegativeNum
1 | /* |
tMIN
1 | /* |
CountNoneZeroByte
1 | /* |
getByte
1 | /* |
negate
1 | // return -x |
isPositive
1 | // return 1 if x > 0, return 0 otherwise |
shiftsAreArithmetic
逻辑右移:补0
算术右移:如果符号位为1则补1,符号位为0则补0
1 | /* |
isEven
1 | /* |
copyMSB
1 | /* |
leastBitPos
1 | /* |
Exception/异常
异常类型
异步异常
- 中断(Interrupt):I/O设备的信号
- 计时器中断
- I/O中断
同步异常
流控:在计算机执行指令的过程中,从一个指令跳转到下一个指令的过程。
Caused by events that occur as a result of executing an instruction
异常:异常是控制流的突变,用来响应处理器状态中的某些变化。
- 陷阱(Trap):策划的异常
- 系统调用
- 断点
- 故障(Fault):潜在的可恢复错误
- 分页故障
- 保护故障
- 浮点数异常
- 终止(Abolt):不可恢复错误
- 不合法指令
- ECC内存确认
异常与操作系统的关系
异常提供了基本的构建块,为操作系统提供进程的概念。
GC 伪代码 / 描述
什么是垃圾收集
垃圾收集就是在可分配内存空间不够时,检测并回收那些垃圾内存块,使得这些内存单元能够被重新使用。
mark/sweep 伪代码
1 | void GC(){ |
Copying Collection / 复制法
维护两个堆,一个是正在使用的,一个是垃圾回收时使用的,在没空间时,将正在使用的堆上可以到达的内存块,都复制到另一个堆上,然后清空正在使用的堆,转换角色。
优点:比标记清除法更快,因为只遍历了一遍堆空间。
缺点:1. 只能使用一半的堆空间。2. 和标记清除一样有不可预测的周期性中断。
Reference counting / 引用计数法
- 保持对每个对象的指针数量的跟踪,即引用数。
- 当引用数为0时,对象变为不可达到的垃圾。
优点:动态和增量的方式,当有赋值或其他堆操作时进行。
缺点:1. 引用计数的花费。2. 不能解决循环结构。
Generation Garbage Collection / 分代式垃圾回收法
通过经验观察: 频繁扫描新对象,不频繁扫描旧对象。
优点:无需遍历整棵引用树。