CANARYPWN'S NATÏVE BLOG

[ CS140 1-Introduction] Slides 笔记

On the way of Operation System
Canarypwn
Dec 4, 2020
It takes 4 minutes to read this article.

Intro

操作系统概论

原始操作系统

image-20201204140048431

  • 系统一次只能运行一个程序
    • OS 和 硬件都被 APP 唯一占用

多线程

相比原始操作系统,一次可以运行多个程序

但原始的多线程有诸多问题

  • 无限循环

    • 比如叉炸弹
    • 可以利用 权限 来解决
  • 内存访问无限制,会有安全问题

    • 可以用 内存隔离 来解决

多用户操作系统

用户需要什么就给什么,但依旧会存在一些问题:

  • 程序太贪了 (Chrome吃内存)
  • 当每个程序都申请内存的时候,申请内存的总量大于物理内存
    • 解决: 虚拟化 (virtual memory, swap etc.)
  • Super-linear slowdown with increasing demand (thrashing) (原文)
    • 比如开了N个程序,每个程序只能分到 1/N 的资源
    • 随着程序的线性增加,每个程序更处理不完,最终堵马桶

操作系统保护

核心思想:隔离

  • 抢占式: 给应用程序一个资源,如果别的程序需要的话,就移走它
  • 中间层: OS用一些数据结构(比如表)来查询权限,OS会在程序访问底层的时候提供权限管理
  • root / user :特权模式

典型的操作系统

image-20201204141457542

  • 程序在 user 层执行,低权限
  • OS 在 kernal 层执行,高权限

系统调用 (System Call)

image-20201204141729074

  • Applications can invoke kernel through system calls

    • 应用程序可以通过系统调用来调用内核 (用特殊指令)
  • 应用程序

    • printf, scanf, fgets etc.
  • 系统接口

    • open, close, read, write etc. ( POSIX/UNIX )
  • Example

    • printf 调用 write

    • image-20201204142044506

另一个例子

  • type.c (stanford.edu)
  • open 作为一个黑箱、接口返回状态码,便于调用与高级程序使用

保护

一个 CPU 保护的例子

  • 内核时钟每 10ms 刷新一次检查权限
  • 内核每次中断后由程序重新抢占
  • 这样就避免了 CPU 无限循环
  • 坏处是每个程序都很慢(之前提到过)

###如何破坏计算机

  • 把内存占满
  • 叉炸弹

内存隔离

  • 定义
    • 地址空间:一个程序占用的所有内存地址
    • 虚拟地址:程序所见到的内存地址(即进程地址空间)
    • 物理地址:物理的地址(内存)
    • 翻译:将虚拟地址映射到物理地址 (页)
  • 优点:每一个进程都不知道别的进程的地址,因为它们看到的地址是不一样的
  • CPU 负责翻译

现代的内存保护

  • CPU允许仅内核虚拟地址
  • CPU允许OS禁用(无效化)特定的虚拟地址
    • 虚拟内存总大于物理内存
    • 停止内存越界
  • 因此便于优化(内存管理器只管理虚拟地址)

资源分配与调度

  • 一方面把所有资源给一个程序会让他跑得很快,但另一方面其它程序被中断了,会影响执行。
    • 例如同一个任务在连续的物理内存上的访问速度很快
  • 多线程对资源的利用率很高
    • AMD yes
  • 通常情况下,少部分的任务是特别消耗运算的,其它任务加起来所占用的内存却很大。(二八效应?)