wywwzjj's Blog

CSAPP 计算机系统漫游 笔记

字数统计: 790阅读时长: 2 min
2019/09/01 Share

我听到的我会忘记

我看到的我能记住

只有我做过的,我才能理解

CSAPP 最大的魅力在于,每章的前言会站在程序员的角度跟你分析,为什么要学这些知识,然后在正文里清晰的阐述这些问题的答案。

操作系统是什么?提供了什么功能?

  • 用户角度:操作系统是一个控制软件

    • 管理应用程序
    • 为应用程序提供公共服务(比如底层的 IO、以及网络协议栈等各种底层 API)
    • 进程管理
  • 硬件角度:资源管理

    • 管理外设、分配资源
      • CPU 调度器
      • 物理内存管理
      • 虚拟内存管理
      • 文件系统管理
      • 中断处理与设备驱动
  • 所处位置:硬件之上,应用程序之下

  • 操作系统内核特征

    • 并发(注意区分并发与并行,并发强调的是一段时间,并行是一个时间点,所以并行必须是多核)
    • 共享:
      • “同时”访问
      • 互斥共享
    • 虚拟(为上层提供底层的抽象)
    • 异步
  • 内核时被信任的第三方

  • 只有内核可以执行特权指令

操作系统实验:

  • 系统启动及中断
  • 物理内存管理
  • 虚拟内存管理
  • 内核线程管理
  • 用户进程管理
  • CPU 调度
  • 同步与互斥
  • 文件系统

信息 = 位 + 上下文

编码是一切信息处理的基础。

程序被其他程序翻译成不同的格式

编译过程:

源程序(hello.c)=> 预处理器 (hello.i) => 编译器(hello.s) => 汇编器(hello.o) => 链接器(可执行)

  • 预处理:以 # 开头的,直接修改源程序。比如 #include <stdio.h>,将直接把文件插入进来。
  • 编译器:将此文本文件翻译成汇编语句。
  • 汇编器:将汇编语句翻译成机器语言指令。
  • 链接器:将用到的链接库合并。

了解编译系统如何工作大有益处

  • 优化程序性能
  • 理解链接时出现的错误
  • 避免安全漏洞

处理器读并解释储存在内存中的指令

系统的硬件组成

计算机:

  • 以硬件为基础
  • 以软件扩充其功能
  • 以执行程序的方式提现功能

组成:

  • 总线:bus,各部件信息传输的渠道
  • I/O 设备:输入输出设备。输入信息 => 处理信息 => 输出信息
  • 主存
  • 处理器

运行 hello 程序

高速缓存至关重要

存储设备形成层次结构

操作系统管理硬件

进程

线程

一个进程可以由多个线程构成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。

虚拟内存

为每个进程提供了一个假象,就好像每个进程都独占了主存。

每个程序执行时,内存起点都是一样的。

文件

系统之间利用网络通信

Amdahl 定律

并发和并行

抽象的重要性

CPU => 进程

磁盘 => 文件

内存 => 地址空间

CATALOG
  1. 1. 信息 = 位 + 上下文
  2. 2. 程序被其他程序翻译成不同的格式
  3. 3. 了解编译系统如何工作大有益处
  4. 4. 处理器读并解释储存在内存中的指令
    1. 4.1. 系统的硬件组成
    2. 4.2. 运行 hello 程序
  5. 5. 高速缓存至关重要
  6. 6. 存储设备形成层次结构
  7. 7. 操作系统管理硬件
    1. 7.1. 进程
    2. 7.2. 线程
    3. 7.3. 虚拟内存
    4. 7.4. 文件
  8. 8. 系统之间利用网络通信
  9. 9. Amdahl 定律
  10. 10. 并发和并行
  11. 11. 抽象的重要性