CSAPP 计算机系统漫游 笔记

2023-05-09 14:36:02 浏览数 (1)

我听到的我会忘记 我看到的我能记住 只有我做过的,我才能理解

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

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

  • 用户角度:操作系统是一个控制软件
    • 管理应用程序
    • 为应用程序提供公共服务(比如底层的 IO、以及网络协议栈等各种底层 API)
    • 进程管理
  • 硬件角度:资源管理
    • 管理外设、分配资源
      • CPU 调度器
      • 物理内存管理
      • 虚拟内存管理
      • 文件系统管理
      • 中断处理与设备驱动
  • 所处位置:硬件之上,应用程序之下
  • 操作系统内核特征
    • 并发(注意区分并发与并行,并发强调的是一段时间,并行是一个时间点,所以并行必须是多核)
    • 共享:
      • “同时”访问
      • 互斥共享
    • 虚拟(为上层提供底层的抽象)
    • 异步
  • 内核时被信任的第三方
  • 只有内核可以执行特权指令

操作系统实验:

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

信息 = 位 上下文

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

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

编译过程:

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

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

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

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

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

系统的硬件组成

计算机:

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

组成:

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

运行 hello 程序

高速缓存至关重要

存储设备形成层次结构

操作系统管理硬件

进程

线程

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

虚拟内存

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

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

文件

系统之间利用网络通信

Amdahl 定律

并发和并行

抽象的重要性

CPU => 进程

磁盘 => 文件

内存 => 地址空间

0 人点赞