[ CS140 1-Introduction] Slides 笔记
On the way of Operation System
Canarypwn
Dec 4, 2020
Intro
- This page is based on CS 140: Operating Systems (stanford.edu)
- Homework and Slides can be found at CS140 Lecture notes (stanford.edu)
- Backup on my Onedrive
- 论抄书 - 知乎 (zhihu.com)
操作系统概论
原始操作系统
- 系统一次只能运行一个程序
- OS 和 硬件都被 APP 唯一占用
多线程
相比原始操作系统,一次可以运行多个程序
但原始的多线程有诸多问题
-
无限循环
- 比如叉炸弹
- 可以利用 权限 来解决
-
内存访问无限制,会有安全问题
- 可以用 内存隔离 来解决
多用户操作系统
用户需要什么就给什么,但依旧会存在一些问题:
- 程序太贪了 (Chrome吃内存)
- 当每个程序都申请内存的时候,申请内存的总量大于物理内存
- 解决: 虚拟化 (virtual memory, swap etc.)
- Super-linear slowdown with increasing demand (thrashing) (原文)
- 比如开了N个程序,每个程序只能分到 1/N 的资源
- 随着程序的线性增加,每个程序更处理不完,最终
堵马桶
操作系统保护
核心思想:隔离
- 抢占式: 给应用程序一个资源,如果别的程序需要的话,就移走它
- 中间层: OS用一些数据结构(比如表)来查询权限,OS会在程序访问底层的时候提供权限管理
- root / user :特权模式
典型的操作系统
- 程序在 user 层执行,低权限
- OS 在 kernal 层执行,高权限
系统调用 (System Call)
-
Applications can invoke kernel through system calls
- 应用程序可以通过系统调用来调用内核 (用特殊指令)
-
应用程序
- printf, scanf, fgets etc.
-
系统接口
- open, close, read, write etc. ( POSIX/UNIX )
-
Example
-
printf 调用 write
-
-
另一个例子
- 见 type.c (stanford.edu)
- open 作为一个黑箱、接口返回状态码,便于调用与高级程序使用
保护
一个 CPU 保护的例子
- 内核时钟每 10ms 刷新一次检查权限
- 内核每次中断后由程序重新抢占
- 这样就避免了 CPU 无限循环
- 坏处是每个程序都很慢(之前提到过)
###如何破坏计算机
- 把内存占满
- 叉炸弹
内存隔离
- 定义
- 地址空间:一个程序占用的所有内存地址
- 虚拟地址:程序所见到的内存地址(即进程地址空间)
- 物理地址:物理的地址(内存)
- 翻译:将虚拟地址映射到物理地址 (页)
- 优点:每一个进程都不知道别的进程的地址,因为它们看到的地址是不一样的
- CPU 负责翻译
现代的内存保护
- CPU允许仅内核虚拟地址
- CPU允许OS禁用(无效化)特定的虚拟地址
- 虚拟内存总大于物理内存
- 停止内存越界
- 因此便于优化(内存管理器只管理虚拟地址)
资源分配与调度
- 一方面把所有资源给一个程序会让他跑得很快,但另一方面其它程序被中断了,会影响执行。
- 例如同一个任务在连续的物理内存上的访问速度很快
- 多线程对资源的利用率很高
- AMD yes
- 通常情况下,少部分的任务是特别消耗运算的,其它任务加起来所占用的内存却很大。(二八效应?)