第 6 周¶
软件和硬件的接口¶
制作一个目标模块¶
就是汇编器或者编译器把一种比较高级的语言转化为机器指令的过程。
生成的东西有这些部分:
- Header:描述了目标模块的内容。
- Text segment:翻译后产生的指令。
- Static data segment:程序整个生命周期所需要的数据。
- Relocation info:关于那些依赖于程序的绝对位置的内容。
- Symbol table:全局定义和外部引用。
- Debug info:给你调试用的信息。
链接那些目标模块¶
- 合并那些段(segments)。
- 重新处理一下标签(地址可能会变)。
- 把那些地址相关的依赖和外部依赖拿过来。
动态链接(Dynamic Linking):在一个东西被调用的时候才把它链接 / 加载过来。
加载一个程序¶
- 读 header 看看段长。
- 给它分配虚拟的内存空间。
- 把 text segment 和 initialized data 放到内存里面。
- 安排栈的那些环境。
- 安排寄存器的那些环境。
- 跳到程序开始的地方。
操作系统:开始¶
操作系统是啥?¶
- 执行用户的程序,帮助处理用户的问题,让用户的生活更加美好。
- 让计算机系统易于使用。
- 高效地利用计算机的硬件。
操作系统的目标¶
- 资源的分配:管理计算机的所有资源。
- 程序的控制:阻止错误和不合理使用。
操作系统的结构¶
批处理 Multiprogramming¶
- 一个用户的任务基本没法让计算机的 CPU 和 I/O 每时每刻跑满
- 而操作系统可以安排哪些任务来让 CPU 时刻有活干
- 比如等 I/O 的时候就去偷偷干其他的事情
多任务 Timesharing / multitasking¶
- CPU 可以快速地在不同任务间切换
操作系统的指令¶
中断 Interrupt¶
操作系统的任务¶
- 进程管理
- 内存管理
- 存储管理
- I/O 子系统
- 保护和安全