目录
计算机体系原理
从算术运算1+2开始
汇编语言程序 | 对应的机器指令 | 对应的操作 |
---|---|---|
MOV AL, 1 | 10110000 00000001 | 将立即数1传送到累加寄存器AL中 |
ADD AL, 2 | 00000100 00000010 | 计算两个数的和,结果存放到AL中 |
MOV [0008], AL | 10100010 00001001 00000000 | 将AL中的数传送到地址单元0008 |
类比:跳来跳去的性格测试题
- 公交车靠站,车上已经挤满了人, 下一班车要15分钟后才到,你会怎么办呢?
不想再等下去了,再挤也要上车——请 答第2题
人太多了,还是等一班吧! ——请答第 4题 - 旅行途中的你突然头很疼,这时正 好有热心人拿药给你吃,你会如何抉择呢?
说声谢谢后马上吃药一请答第6题
找理由拒绝对方的药——请答第3题
程序的装载与执行
- 物理和虚拟寻址
- 每个程序都有自己独立的虚拟地址空间
- 和其他程序互不干扰
- 可能方便地放在屋里内存的任何区域
- 程序的组成
- 《链接、装载与库》
程序的分时复用调度
- 每个程序轮流占用CPU的时间片(进程/线程)
- 何时放弃CPU?
- 程序的时间片到了
- 请求慢速设备
- CPU需要响应中断
- 上下文切换
- 上下文context :程序运行的环境(寄存器、PC)
- 放弃CPU时,保存上下文
- 拥有CPU时,恢复上下文
什么是操作系统
- 欺上瞒下:
- 对上层提供统一的API,简化应用开发逻辑
- 对下层通过硬件驱动提供兼容性
- 例如:
- 通过Windows的CreateProcessA方法创建新的进程
- 通过Unix的fork系统调用创建新的进程
线程与进程
- 共同点:
- 都拥有独立的PC,可以独立地执行程序(性格测试题?)
- 在Linux上甚至用同一种数据结构处理进程和线程
- 进程:拥有独立的内存地址空间、文件等资源
- 线程:和其他线程共享内存地址空间、文件等资源
文件系统与IO
- 文件的本质是字节流
- 文件与文件指针
- 缓存与缓冲区
从源代码到ast (编译器前端)
- 源代码-〉tokens
- tokens -> AST
- 让我们看看AST长什么样子
从AST到目标代码
- AST ->字节码
- AST ->平台相关的目标代码
(编译器后端)