第1章 关于本书的对话
Three easy pieces: virtualization concurrency persistence
第2章 操作系统介绍
什么是操作系统?
Operating System: A body of software, in fact, that is responsible for making it easy to run programs (even allowing you to seemingly run many at the same time), allowing programs to share memory, enabling programs to interact with devices, and other fun stuff like that. (OSTEP)
操作系统:“管理软/硬件资源、为程序提供服务”的程序。
今天的操作系统:通过 “虚拟化” 硬件资源为程序运行提供服务的软件。
理解操作系统:三个根本问题:
操作系统服务谁? | (设计/应用视角) 操作系统为程序提供什么服务? | (实现/硬件视角) 如何实现操作系统提供的服务? |
---|---|---|
程序 = 状态机 | 操作系统 = 对象 + API | 操作系统 = C 程序 |
课程涉及:多线程 Linux 应用程序 | 课程涉及:POSIX + 部分 Linux 特性 | 课程涉及:xv6, 自制迷你操作系统 |
书上原话:
操作系统实际上做了什么:它取得CPU、内存或磁盘等物理资源,并对它们进行虚拟化。它处理与并发有关的麻烦且棘手的问题。它持久地存储文件、从而使它们长期安全。
命令行 + 浏览器就是世界
第3章 关于虚拟化的对话
引入:虚拟桃子
假设一个计算机只有一个CPU,虚拟化要做的就是将这个CPU虚拟成多个虚拟CPU并分给每一个进程使用,因此,每个应用都以为自己在独占CPU,但实际上只有一个CPU。这样操作系统就创造了美丽的假象——它虚拟化了CPU。
第4章 抽象:进程
操作系统通过虚拟化CPU来提供这种假象。通过让一个进程只运行一个时间片,然后切换到其他进程,操作系统提供了存在多个虚拟CPU的假象,这就是时分共享技术。
调度策略 (scheduling policy) 是在操作系统内做出某种决定的算法。
4.1 抽象:进程概念
操作系统为正在运行的程序提供的抽象,就是所谓的进程(process)。
4.2 进程API
创建/销毁/等待/其他控制/状态
4.3 进程创建:更多细节
函数调用栈;C程序使用栈存放局部变量、函数参数和返回地址。
4.4 进程状态
3种状态:运行、就绪、阻塞
4.5 数据结构
操作系统是一个程序,和其他程序一样,它有一些关键的数据结构来跟踪各种相关的信息。
eg:为了跟踪每个进程的状态,操作系统可能会为所有就绪的进程保留某种进程列表(process list),以及跟踪当前正在进行的进程的一些附加信息。
第5章 插叙:进程API
5.1 fork()系统调用
5.2 wait()系统调用
5.3 最后是exec()系统调用
5.4 为什么这样设计API
这种分离fork()及exec()的做法在构建UNIX shell的时候非常有用,因为这给了shell在fork之后exec之前运行代码的机会,这些代码可以在运行新程序前改变环境,从而让一系列有趣的功能很容易实现。
PS:Get it right!
“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 20 天,点击查看活动详情”