01 - Operating Systems in the Age of AI

01 - AI 时代的操作系统

教材

Operating Systems...

实验

OS Lab

助教

Kimi、GPT、豆包...

1. 导言

把时间还给大家!!!

课程主页:https://jyywiki.cn/OS/2023/index.html

1.1. 今年不在开设操作系统内核的内容 和 实验

想要从事操作系统内核的可以参考 MIT xv6

1.2. Unit Test

单元测试 框架

只需要 include 头文件,就可以对上面的代码进行测试。

2. Why 为什么要学操作系统?

DeepSeek

果然南大开学也是三板斧...

+黑神话、哪吒...

2.1. 现在在互联网可以学到任何想学的东西

无论专业出身...

通过视频媒体...通过AI对话...等等

2.2. 互联网开源生态

公开代码

2.3. 这是个好老师...

计算机世界...随便一个操作系统都是几千万行的代码...到底是怎么搭起来的???

AI 是一个好工具...

你只需要一个梦想,然后利用 AI 迅速追赶哪些读了本硕博十年书的所谓专家...

3. What 什么是操作系统?

Operating Systems: A body of software, in fact, that is responseible offr making it easy to run programs.

3.1. 操作系统是来帮助我们的!不是来折磨我们的。

  • 我们不需要记住精准的概念定义

    • 帮助我们更好开发程序

  • 操作系统历史

    • 硬件 - 数字逻辑

    • 软件 - 本课程

    • 操作系统

3.2. 复习数字逻辑

  1. 时钟是不可能缺少的,在任何系统都是...

  2. 导线

  3. 逻辑门

任何的语言:Cpp代码

会进行指令序列

变成二进制文件

a.out文件 交给底层的处理器执行...

3.3. 操作系统

狭义:

操作系统:硬件和软件的中间层

4. 操作系统的历史

4.1. ENIAC 1946.2.14

图灵机的数字电路实现

4.2. 1940s 的计算机硬件

逻辑门:真空电子管

存储器:延迟线(delay lines)

输入/输出:打孔纸带/指示灯

还没有操作系统

连编程语言都没有

  • 流程图

  • 机制代码

  • 戳纸带

能把程序跑起来就很好

4.3. 1950s - 1960s 的计算机硬件

硬件改进了!

  • 晶体管

  • 磁芯内存

  • 丰富的 I/O 设备

I/O 设备的速度严重低于处理器的速度...中断机制

4.4. 1950s - 1960s 的计算机软件

一张卡片 80行 就是一行代码

4.5. 1950s - 1960s 的操作系统

库函数 + 管理程序排队运行的调度代码

算力成为服务,操作系统概念形成

  • 多用户轮流共享计算机,operator 负责操作程序切换

  • Operating systems(操作系统/作业系统)

  • 因为古早时期需要一个专门的 operator 来进行程序调控...

操作系统要管理好每个线程

线程想尽可能多占用内存...

4.6. 1960s - 1970s 的计算机硬件

  • 更快的处理器

  • 更丰富的 I/O设备

  • 更高级的语言和编译器...

数字电路模拟器:时钟、导线、NAND、寄存器是数字系统的基本组成部分:数字系统在时钟驱动下离散地更新下一周期的寄存器状态。

这一小段程序模拟数字电路的执行过程,它也是 nvboard 的基本原理。这个例子还展示了 UNIX Philosophy 中命令行工具的协作原理——C 程序 logisim 输出类似 A=0; B=1; ... 的数码管状态,而另一个程序负责解析这些输出并真实地 “画” 出来。

root@LAPTOP-GT06V0GS:/mnt/d/CSLab/osCourse/lec1/logisim# ./logisim
A = 1; B = 1; C = 1; D = 1; E = 1; F = 1; G = 0;
A = 0; B = 1; C = 1; D = 0; E = 0; F = 0; G = 0;
A = 1; B = 1; C = 0; D = 1; E = 1; F = 0; G = 1;
A = 1; B = 1; C = 1; D = 1; E = 1; F = 1; G = 0;
A = 0; B = 1; C = 1; D = 0; E = 0; F = 0; G = 0;
A = 1; B = 1; C = 0; D = 1; E = 1; F = 0; G = 1;
A = 1; B = 1; C = 1; D = 1; E = 1; F = 1; G = 0;
A = 0; B = 1; C = 1; D = 0; E = 0; F = 0; G = 0;
A = 1; B = 1; C = 0; D = 1; E = 1; F = 0; G = 1;
A = 1; B = 1; C = 1; D = 1; E = 1; F = 1; G = 0;
A = 0; B = 1; C = 1; D = 0; E = 0; F = 0; G = 0;
A = 1; B = 1; C = 0; D = 1; E = 1; F = 0; G = 1;
A = 1; B = 1; C = 1; D = 1; E = 1; F = 1; G = 0;
     █████████
    ██       ██
    ██       ██
    ██       ██
    ██       ██
     ░░░░░░░░
   ██       ██
   ██       ██
   ██       ██
   ██       ██
    █████████

     ░░░░░░░░░
    ░░       ██
    ░░       ██
    ░░       ██
    ░░       ██
     ░░░░░░░░
   ░░       ██
   ░░       ██
   ░░       ██
   ░░       ██
    ░░░░░░░░░

     █████████
    ░░       ██
    ░░       ██
    ░░       ██
    ░░       ██
     ████████
   ██       ░░
   ██       ░░
   ██       ░░
   ██       ░░
    █████████

     █████████
    ██       ██
    ██       ██
    ██       ██
    ██       ██
     ░░░░░░░░
   ██       ██
   ██       ██
   ██       ██
   ██       ██
    █████████

4.7. 1960s - 1970s 的操作系统

分时间片运行

能载入多个程序

操作系统进行调度、分片运行...

虚拟内存:操作系统自然增加进程管理的API

...

RISC-V 处理器模拟器:C 语言实现的 single-header RISC-V32IMA 系统模拟器 (项目源自[mini-rv32ima](https://github.com/cnlohr/mini-rv32ima))。因为有 M-Mode,这个模拟器可以运行几乎 “任意复杂” 的程序——甚至是没有 MMU 的 Linux。我们稍稍修改了这份代码,更好地体现《操作系 统》课程的教学目标。

root@LAPTOP-GT06V0GS:/mnt/d/CSLab/osCourse/lec1/mini-rv32ima# ./mini-rv32ima testcase.bin
[mini-rv32ima] load image file: testcase.bin
[mini-rv32ima] alloc ram size = 0x4000000
[mini-rv32ima] mainargs:
initially:
 PC:00000000 [03174291]
  Z:00000000  ra:00000000  sp:04000000  gp:00000000
 tp:00000000  t0:00000000  t1:00000000  t2:00000000
 s0:00000000  s1:00000000  a0:00000000  a1:04000000
 a2:00000000  a3:00000000  a4:00000000  a5:00000000
 a6:00000000  a7:00000000  s2:00000000  s3:00000000
 s4:00000000  s5:00000000  s6:00000000  s7:00000000
 s8:00000000  s9:00000000 s10:00000000 s11:00000000
 t3:00000000  t4:00000000  t5:00000000  t6:00000000
CYCLEL:00000000 CYCLEH:00000000 EXTRAFLAGS:00000000
stack (sp:04000000):
0x4000000

finally:
 PC:00000000 [03174291]
  Z:00000000  ra:00000000  sp:04000000  gp:00000000
 tp:00000000  t0:00000000  t1:00000000  t2:00000000
 s0:00000000  s1:00000000  a0:00000000  a1:04000000
 a2:00000000  a3:00000000  a4:00000000  a5:00000000
 a6:00000000  a7:00000000  s2:00000000  s3:00000000
 s4:00000000  s5:00000000  s6:00000000  s7:00000000
 s8:00000000  s9:00000000 s10:00000000 s11:00000000
 t3:00000000  t4:00000000  t5:00000000  t6:00000000
CYCLEL:00000001 CYCLEH:00000000 EXTRAFLAGS:00000003
stack (sp:04000000):
0x4000000

内部代码很简单?

struct CPUState {
    // Processor internal state
    uint32_t regs[32], csrs[CSR_COUNT];

    // Memory state
    uint8_t *mem;
    uint32_t mem_offset, mem_size;
};

只有几个状态 和 变量

4.8. 1970s 的操作系统

Unix 诞生 奠定了今天计算机世界的基础

  1. 信号、管道、grep

  2. BSD socket

  3. Product

Prompt: 《操作系统》需要解压缩 “toybox-0.1.0.tar.bz2”,但是我是刚选课的新手,应该如何做?

要在《操作系统》课程中解压缩 toybox-0.1.0.tar.bz2 文件,可以按照以下步骤操作:

  1. 打开终端:在Linux或macOS系统中,打开终端;在Windows系统中,可以使用命令提示符或PowerShell。

  2. 导航到文件目录:使用 cd 命令进入存放 toybox-0.1.0.tar.bz2 的目录。

  3. 解压缩文件:使用 tar 命令解压缩 .tar.bz2 文件。命令如下:

tar -xvjf toybox-0.1.0.tar.bz2

其中,-x 表示解压缩,-v 显示解压过程,-j 处理 .bz2 文件,-f 指定文件名。

  1. 查看解压结果:解压后,会在当前目录生成一个 toybox-0.1.0 的文件夹,里面包含解压后的文件。

  2. 完成以上步骤后,你就可以使用解压后的文件了。

root@LAPTOP-GT06V0GS:/mnt/d/CSLab/osCourse/lec1/tar# ls
README.md  toybox-0.1.0.tar.bz2
root@LAPTOP-GT06V0GS:/mnt/d/CSLab/osCourse/lec1/tar# cat README.md
**toybox-0.1.0**:这是早前版本的 toybox,包含一些 “最小” 系统所需的工具。现在,Android 内置了 toybox。当你打开手机的 “开发者模式” 后 ,通过 adb shell 连接到手机,其中的命令行工具就是 toybox。
root@LAPTOP-GT06V0GS:/mnt/d/CSLab/osCourse/lec1/tar# tar -xjf toybox-0.1.0.tar.bz2
root@LAPTOP-GT06V0GS:/mnt/d/CSLab/osCourse/lec1/tar# ls
README.md  toybox-0.1.0  toybox-0.1.0.tar.bz2
root@LAPTOP-GT06V0GS:/mnt/d/CSLab/osCourse/lec1/tar# cd toybox-0.1.0
root@LAPTOP-GT06V0GS:/mnt/d/CSLab/osCourse/lec1/tar/toybox-0.1.0# ls
Config.in  LICENSE  Makefile  configure  generated  kconfig  lib  main.c  scripts  toynet.h  toys  toys.h  www
root@LAPTOP-GT06V0GS:/mnt/d/CSLab/osCourse/lec1/tar/toybox-0.1.0#

4.9. 这门课

不关心操作系统如何实现,而是聚焦应用...

5. How 怎样学操作系统

5.1. 忘掉 GPA

试着去成为一个有,梦想的 CS 人。

5.2. 知道“编码”是在手中的利剑

在大预言模型的帮助下自己动手解决问题

  • 什么都不怕:vim tmux grep binutils 前端...

享受创造的乐趣

  • 出bug时:机器永远是对的、我肯定能调出来...

  • 我这么做显得专业嘛?合适吗?是一个合格的开发者吗?还能更好吗?

5.3. Academic Integrity 坚守学术诚信

Lab 不应该使用 AI?

日常学习鼓励使用大模型

  • 解释概念、命令行工具、API等

  • 获取方法指导、什么工具?如何调试?有何技巧

MiniLab

禁止将一段实验描述输入到大语言模型...

但是可以使用大模型帮你阅读API文档,给你一些简单的提示(仅限单个API)

AI的好处

提醒你进行错误处理...在实验中往往不注意...但是实际上后果很严重...

5.4. 成为 Power User

成为好工具的使用者!!!

所以呢

5.5. 从现在开始写代码

!!!

保持好奇心

命令行 + 浏览器就是全世界!

  • 不需要讲语言特性、设计模式……编程中自然而然会有体会

开始你的《操作系统》课旅程!

Last updated