操作系统概述

2023-05-16

Overview


  • Q1(Why):为什么要学操作系统?
  • Q2(What):到底什么是操作系统?
  • Q3(How):怎么学操作系统?

一.为什么要学操作系统?

学习操作系统的目的

你体内的“编程力量”尚未完全觉醒

  • 每天都在用的东西,你还没搞明白
    • 窗口是怎么创建的?为什么Ctrl-C有时不能退出程序?
  • 组里的服务器有128个处理器,但你的程序却只能用一个
  • 你每天都在用的东西,你却实现不出来
    • 浏览器、编译器、IDE、游戏/外挂、任务管理器、杀毒软件、病毒…

《操作系统》给你有关“编程”的全部

  • 悟性好:学完课程就在系统方向“毕业
    • 具有编写一切“能写出来”程序的能力(具备阅读论文的能力)
  • 悟性差:内力大增
    • 可能工作中的某一天想起上课提及的内容

二.到底什么是操作系统?

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)

  • "programs"就完了?那么多复杂的程序呢!
  • ‘’shared memory,interact with devices,…"

"管理软硬/硬件、为程序提供服务"的程序?

在这里插入图片描述

理解操作系统

“精准”的定义毫无意义

  • 问出正确的问题:操作系统如何从一开始变成现在这样的?

  • 三个重要的线索

    • 计算机(硬件)

    • 程序(软件)

    • 操作系统(管理软件的软件)

讨论狭义的操作系统

  • 对单一计算机硬件系统作出抽象、支撑程序执行的软件系统
  • 学术界谈论“操作系统”是更广义的" System"(例子:OSDI/SOSP)

1940s

1940s的计算机

跨时代、非凡的天才设计,但很简单(还不如我们数电实验课做的CPU复杂呢):

  • 计算机系统=状态机(CS课程的 takeaway message)
  • 标准的 Mealy型数字电路
    • ENIAC(1946.2.14;请在这个特殊的节日多陪陪你的电脑)

在这里插入图片描述

电子计算机的实现:

  • 逻辑门:真空电子管
  • 存储器:延迟线(delay lines)
  • 输入/输出:打孔纸带/指示灯

在这里插入图片描述

1940s的程序

ENIAC程序是用物理线路"hard-wire"的

  • 重编程需要重新接线
    • ENIAC Simulator;sieve.e

最早成功运行的一系列程序:打印平方数、素数表、计算弹道…

  • 大家还在和真正的“bugs”战斗

在这里插入图片描述

1940s的操作系统

没有操作系统

能把程序放上去就很了不起了

  • 程序直接用指令操作赢家
  • 不需要画蛇添足的程序来管理它

1950s

1950s的计算机

更快更小的逻辑门(晶体管)、更大的内存(磁芯)、丰富的I/O设备

  • I/O设备的速度已经严重低于处理器的速度,中断机制出现(1953)

在这里插入图片描述

1950s的程序

可以执行更复杂的任务,包括通用的计算任务

  • 希望使用计算机的人越来越多;希望调用API而不是直接访问设备
  • Fortran诞生(1957)

在这里插入图片描述

一行代码,一张卡片

  • 看到上面1,2…80的标号了吧
  • 7-72列才是真正的语句(这就是为什么谭浩强要教你画流程图)

在这里插入图片描述

1950s的操作系统

管理多个程序依次排队运行的库函数和调度器。

写程序、跑程序都是非常费事的(比如你写了个死循环.…)

  • 计算机非常贵( 50000-​1,000,000美元),一个学校只有一台
  • 产生了集中管理计算机的需求:多用户排队共享计算机

操作系统的概念开始形成

  • 操作( operate)任务jobs)的系统( system)
    • “批处理系统” = 程序的自动切换(换卡) + 库函数API
    • Disk Operating Systems(DOS)
      • 操作系统中开始出现“设备”、“文件、“任务等对象和API

1960s

1960s的计算机

集成电路、总线出现

  • 更快的处理器

  • 更快、更大的内存;虚拟存储出现

    • 可以同时载入多个程序而不用”换卡“了
  • 更丰富的I/O设备;完善的中断/异常机制

在这里插入图片描述

1960s的程序

更多的高级语言和编译器出现

  • COBOL(1960),APL (1962),BASIC(1965)
    • Bill Gates 和Paul Allen在1975年实现了Altair 8800上的BASIC解释器

计算机科学家们已经在今天难以想象的计算力下开发惊奇的程序

在这里插入图片描述

1960s的操作系统

能载入多个程序到内存且灵活调度它们的管理程序,包括程序可以调用的API。

同时将多个程序载入内存是一项巨大的能力

  • 有了进程 (process))的概念

  • 进程在执行VO时,可以将CPU让给另一个进程

    • 在多个地址空间隔离的程序之间切换

    • 虚拟存储使一个程序出bug不会 crash整个系统

操作系统中自然地增加进程管理API

既然操作系统已经可以在程序之间切换,为什么不让它们定时切换呢?

基于中断(例如时钟)机制

  • 时钟中断:使程序在执行时,异步地插入函数调用
  • 由操作系统(调度策略)决定是否要切换到另一个程序执行·
  • Multics(MT,1965)
    • 现代操作系统诞生

1970s+

1970s+的计算机

集成电路空前发展,个人电脑兴起,”计算机“已与今日无大异

  • CISC指令集;中断、I/O、异常、MMU、网络
  • 个人计算机(PC机)、超级计算机...

1970s+的程序

PASCAL(1970),C(1972),…

  • 今天能办到的,那个时代已经都能办到了–上天入地、图像声音视频、人工智能…
  • 个人开发者走上舞台

1970s+的操作系统

分时系统走向成熟,UNIX诞生并走向完善,奠定了现代操作系统的形态

  • 1973:信号API、管道(对象)、grep(应用程序)
  • 1983:BSD socket(对象)
  • 1984:procfs(对象)
  • UNIX衍生出的大家族
    • 1BSD(1977)GUN(1983)MacOS(1984)Windows(1985)Ubuntu(2004)IOS(2007)Android(2008)…

今天的操作系统

通过"虚拟化”硬件资源为程序运行提供服务的软件。

空前复杂的系统之一

  • 更复杂的处理器和内存

    • 非对称多处理器( ARM big LITTLE; Intel P/ E-cores)

    • Non-uniform Memory Access(NUMA)

    • 更多的硬件机制 Intel-VT/AMD-V, TrustZone/SGX,TSX,

  • 更多的设备和资源

    • 网卡、SSD、GPU、FPGA
  • 复杂的应用需求和应用环境

    • 服务器、个人电脑、智能手机、手表、手环、loT/微控制器∴

理解操作系统:三个根本问题

  • 操作系统服务谁

    • 程序 = 状态机

    • 涉及: 多线程 Linux应用程序

  • (设计/应用视角)操作系统为程序提供什么服务?

    • 操作系统 = 对象+API
    • 涉及:POSIX+部分 Linux特性
  • (实现/硬件视角)如何实现操作系统提供的服务?

    • 操作系统 = C程序
      • 完成初始化后就成为 interrupt/trap/ fault handler
    • 涉及:xv6,自制迷你操作系统

三.怎么学操作系统?

计算机专业学生必须具备的核心素质

1.是一个合格的操作系统用户

  • 会STFW/RTFM自己动手解决问题
  • 不怕使用任何命令行工具
    • vim tmux grep gcc binutils

2.不惧怕写代码

  • 能管理一定规模(数千行)的代码
  • 能在出bug时默念”机器永远是对的、我肯定能调出来“
    • 然后开始用正确的工具/方法调试

感到Linux/ Power Shell很难用?

1.没有建立信心、没有理解基本逻辑

2.没有找对材料( Baidu v.s. Google/Bing/ Github/ Stackoverflow)

3.没有用对工具(man v.s. tldr;该用IDE就别vim)

在这里插入图片描述

学会写代码

写代码 = 创造有趣的东西

  • 命令行 + 浏览器就是世界
    • 我们还有sympy sage z3 rich
  • 不需要讲语言特性、设计模式…
    • 编就对了;你自然而然会需要他们的

Talk is Cheap. Show Me the Code

应用视角/操作系统设计:操作系统 = 对象 + API

  • demo小程序(X86-64为主)
  • 各类系统工具的实现( strace,gdb,)

硬件视角/操作系统实现:操作系统 = C程序

  • xv6
    • 2006年 Russ cox, Frans Kaashoek, Robert Morris在MT重写的UNIX系统
    • 大家熟悉的RISC-V版本

最重要的:Get Your Hands Dirty

参考视频

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统概述 的相关文章

  • 跟着LearnOpenGL文档做的纹理显示不出来,但也不报错

    跟着LearnOpenGL文档入门章的纹理一节 xff0c 把源代码复制下载都运行不了 xff0c 有这么3条要注意的点 一 下载完stb image h xff0c 引用时要加上 define STB IMAGE IMPLEMENTATI
  • 【C++】一文搞懂C++中的std::是什么

    1 C 43 43 中的std 是什么 xff1f std 是个名称空间标示符 xff0c C 43 43 标准库中的函数或者对象都是在命名空间std中定义的 xff0c 所以我们要使用标准函数库中的函数或对象都要使用std来限定 标准库在
  • 详解GMM高斯混合模型EM模型

    一般讲到GMM就会讲到EM 我不过多的介绍EM算法 这里只是举一些例子来看看真实的GMM怎么用EM算的 一 GMM的作用 记住GMM的作用 xff0c 就是聚类 xff01 二 GMM有hard和soft两种 hard GMM和soft G
  • MiniAlphaGo黑白棋 蒙特卡洛搜索

    做个笔记 一 蒙特卡洛在黑白棋的应用 输入 xff1a 棋盘 x1d44f x1d45c x1d44e x1d45f x1d451 当前执子方 x1d450 x1d45c x1d459 x1d45c x1d45f 搜索时间 x1d461 x
  • 基于LLVM的C编译器--lcc——以CLion用SSH连接WSL Ubuntu22.04为例

    Windows 10 22H2CLion 2022 3 1Ubuntu 20 04 xff08 Microsoft Store内的WSL发行版 xff09 一 下载WSL xff0c 换源 xff0c 切换到WSL2 1 1 保证windo
  • Windows有CUDA但是没有nvcc命令

    明明有CUDA xff0c 但是cmd中输入nvcc V无效 但是如果打开anaconda prompt xff0c 输入nvcc V就有效 这可能是因为直接用的pytorch官网命令conda下载安装的 xff0c 然后又没有把anaco
  • win下配置pytorch3d

    一 配置好的环境 xff1a py 3 9 43 pytorch 1 8 0 43 cuda 11 1 cudnn 8 0 43 pytorch3d 0 6 0 43 CUB 1 11 0 你可能觉得pytorch3d 0 6 0版本有点低
  • 【pytorch3d】running build_ext error: [WinError 2] 系统找不到指定的文件

    在win10上安装pytorch3d时 xff0c 遇到如下错误 xff1a running build ext error span class token punctuation span WinError span class tok
  • windows下安装jax

    一 首先下载jaxlib 需要去这个非官方网站去找到适合自己的版本 xff0c 下载到本地 然后使用对应的虚拟环境pip install 该文件名即可 二 然后下载对应的jax 一行命令即可 pip span class token fun
  • STM32 HAL库串口收发数据

    STM32 HAL库串口收发数据 许多传感器的使用方法是 xff1a 单片机给传感器发送一帧数据 xff0c 然后传感器返回单片机一帧有用数据 xff0c 所以串口的收发功能十分重要 STM32cubeMX的配置 时钟和下载方式就不讲了 串
  • W7,显卡型号nvidia geforce 840M,安装tensorflow-gpu

    记录一下 xff0c 以防忘记 1 首先我拿驱动精灵把显卡驱动升到最新 xff0c 然后在NVIDIA 控制面板里查看支持CUDA9 1 xff0c 但是我下载了CUDA9 0 43 cudnn7 0 xff0c 先不用安装 注意 xff0
  • IP和MAC的作用

    IP地址的作用以及MAC地址的作用 MAC地址是一个硬件地址 xff0c 用来定义网络设备的位置 xff0c 主要是数据链路层负责 IP地址是IP协议提供的统一的地址格式 xff0c 为互联网上的每一个网络和每一台主机分配一个逻辑地址 xf
  • SPI简介

    SPI全称是Serial Perripheral Interface xff0c 也就是串行外围设备接口 SPI是Motorola公司推出的一种同步串行接口技术 xff0c 是一种高速 xff0c 全双工的同步通信总线 SPI时钟频率相比I
  • npm 错误码 EMISSINGARG

    EMISSINGARG Error npm ERR node v6 6 0 npm ERR npm v3 10 3 npm ERR code EMISSINGARG npm ERR typeerror Error Missing requi
  • axios.response返回数据格式

    axios response接口中存储的是如下内容 xff1a 96 data 96 是服务器的提供的回复 xff08 相对于请求 xff09 data 96 status 96 是服务器返回的http状态码 status 200 96 s
  • flask实现下载文件、前后端

    采用前后端分离的过程中 xff0c 前端只能下载静态文件中的文件或者url下载文件 但是 xff0c 一般情况下文件要么是远程或者存在于其他文件夹 这种情况就需要采用后端预先下载文件 xff0c 传递给前端 flask有几种文件传输方式 x
  • python+flask 简单并发,使用gevent库

    pip install geventfrom gevent wsgi import WSGIServer 关键这个WSGIServer 127 0 0 1 5000 app serve forever
  • java中Array.remove()方法,源码中不对负索引进行检查

    public E remove int index 检查remove源码是 xff0c 发现 其中对index 的检查仅限于上溢出检查 没有显示的对下溢出进行检查 xff1f rangeCheck index modCount 43 43
  • java- 类名.this.成员 和 this.成员 的区别

    this 成员 xff1a this用于本类中 xff0c 自身的引用 xff0c 调用自身对象属性 类名 this 成员 用于内部内 xff0c 调用外部类的成员 用 外部类 this 表示外部类的引用 xff0c 用以 和 自身类进行区

随机推荐

  • java异常 Exception in thread “main“ java.lang.IllegalArgumentException: Comparison method violates its

    Exception in thread 34 main 34 java lang IllegalArgumentException Comparison method violates its general contract at jav
  • 速查matplotlib-python中画图曲线的形状和颜色

    速查matplotlib python中画图曲线的形状和颜色 在属性值先写颜色 xff0c 后写形状如 xff1a r 红色曲线 b 蓝色短横线 等 字符描述 39 39 实线样式 39 39 短横线样式 39 39 点划线样式 39 39
  • python-pyplot直方图,标注直方图数据

    话不多说 由于自己一直忘记直方图的一些细节 xff0c 经常不用 xff0c 老得百度 xff0c 干脆自己记下来好了 这是直方图的写法与标注直方图的数据写法 如下 from matplotlib import pyplot as plt
  • 从零开始学JetsonTX2----can bus开发

    step by step implementation 搞硬件开发 xff0c 先把技术手册搞到手 这个网页把几乎Jetson tx2的开发资料都汇总了一下 找教程开始配置can所需要系统环境 NIVIDA社区的教程 xff1a https
  • CAN总线详解

    目录 CAN 协议简介1 xff0c 何为CAN 1 1 CAN的应用实例1 2 总线拓扑图1 3 CAN的特点 2 xff0c CAN 电气属性3 xff0c CAN 协议3 1 数据帧3 2 遥控帧3 3 错误帧3 4 过载帧3 5 间
  • 内存对齐规则总结

    由于某些硬件平台不能任意访问地址数据 xff0c 只能在某些地址处取某些特定类型的数据 xff1b 并且处理器访问未对齐的内存时 xff0c 需要多次读取并对多余数据进行剔除 xff0c 相较于对齐内存访问 xff0c 耗费了更多的时间 x
  • 一些常用库的使用(CMAKE部分)

    opencv span class token function find package span span class token punctuation span OpenCV span class token number 3 1
  • 将RTKLIB编译成静态库

    rtklib编译 在写自己的程序时 xff0c 想要调用rtklib h xff0c 和它的一些文件来进行运行 xff0c 想要将rtklib编译成静态库安装在系统的目录下 xff0c 这样基于rtklib的二次开发就不用再使用源码了 xf
  • TIM_SetCompare2()

    对于 void TIM SetCompare2 TIM TypeDef TIMx uint16 t Compare2 的理解 void TIM SetCompare2 TIM TypeDef TIMx uint16 t Compare2 C
  • C语言语句YPR[0]=(BUF[1]<<8|BUF[2]),以及 >> 8 &0xFF如何理解?

    C语言语句 YPR 0 61 BUF 1 lt lt 8 BUF 2 如何理解 这是一个赋值语句 xff0c 把等式右边的值赋给左边 xff1b 先来看右边是怎么运算的 xff0c 由于移位运算符 lt lt 的优先级大于位运算符 xff0
  • word文档编辑时字体突然发生变化解决方法

    word文档在编辑时字体突然发生变化 xff0c 第1步 点击 开始 xff0c 图片中右下角 箭头 第2步 选择需要的字体 xff0c 第3步 设置默认字体 xff0c 确定
  • AD(Altium Designer)如何铺铜

    在PCB PcbDoc文件中 xff1a 在软件下方选择 34 Top Layer 顶层 34 xff08 1 xff09 执行 34 放置 34 gt 铺铜 xff1b 或者快捷键 34 PG 34 会弹出 34 Properties 属
  • 嵌入式硬件-读懂原理图

    学习硬件的第一节课 学习读懂原理图 读懂原理图对嵌入式软件工程师和程序员尤为重要 在深入细节之前请注意 对所有的嵌入式设计人员来说 能懂得硬件工程师创建和使用的来描述其硬件设计的原理图和符号是非常重要的 无论硬件设计得多么复杂 不管有多少设
  • 校招行测笔试-图形推理

    校招行测笔试 图形推理 面对校招笔试的行政能力测试 xff08 简称 行测 xff09 环节 xff0c 刚开始接触有些束手无策 摸不到头脑 xff0c 其实是有技可循的 xff0c 本文就帮助大家总结一下行测的相关技巧 如果对你有所帮助
  • 统一建模语言UML详解附思维导图

    UML图 概述 构成 事物 Things xff1a UML模型中最基本的构成元素 xff0c 是具有代表性的成分的抽象 构件事物 xff1a UML模型的静态部分 xff0c 描述概念或物理元素 类 xff1a 具有相同属性相同操作 相同
  • 比特率与波特率

    比特率 xff1a 单位 Bps bit per second xff0c 即每秒传输的 bit 数 波特率 xff1a 单位 Baud xff0c 即每秒传输的 码元 数 这里涉及到码元 码元 xff1a 持续一段固定时间的通信信道有效状
  • 嵌入式相关开源项目、库、资料------持续更新中

    学习初期最难找的就是找学习资料了 xff0c 本贴精心汇总了一些嵌入式相关资源 xff0c 包括但不限于编程语言 单片机 开源项目 物联网 操作系统 Linux 计算机等资源 xff0c 并且在不断地更新中 xff0c 致力于打造全网最全的
  • 嵌入式系统QNX概述-微内核架构进程管理安全性

    一 微内核架构 QNX操作系统由微内核以及一组协作的系统服务进程组成服务进程与操作系统内核是相互隔离开的 当服务进程出问题时并不会影响内核微内核提供软件总线供各个软件模块进行通信和协作内核只提供最小化的基础 公共服务高度模块化设计带来良好的
  • 三万字长文总结C语言规范

    1 头文件 若包含了头文件aa h xff0c 则就引入了新的依赖 xff1a 一旦aa h被修改 xff0c 任何直接和间接包含aa h代码都会被重新编译 如果aa h又包含了其他头文件如bb h xff0c 那么bb h的任何改变都将导
  • 操作系统概述

    Overview Q1 xff08 Why xff09 为什么要学操作系统 xff1f Q2 xff08 What xff09 xff1a 到底什么是操作系统 xff1f Q3 xff08 How xff09 xff1a 怎么学操作系统 x