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. 复习数字逻辑
时钟是不可能缺少的,在任何系统都是...
导线
逻辑门
任何的语言: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 诞生 奠定了今天计算机世界的基础
信号、管道、grep
BSD socket
Product
Prompt: 《操作系统》需要解压缩 “toybox-0.1.0.tar.bz2”,但是我是刚选课的新手,应该如何做?
要在《操作系统》课程中解压缩 toybox-0.1.0.tar.bz2
文件,可以按照以下步骤操作:
打开终端:在Linux或macOS系统中,打开终端;在Windows系统中,可以使用命令提示符或PowerShell。
导航到文件目录:使用
cd
命令进入存放toybox-0.1.0.tar.bz2
的目录。解压缩文件:使用
tar
命令解压缩.tar.bz2
文件。命令如下:
tar -xvjf toybox-0.1.0.tar.bz2
其中,-x
表示解压缩,-v
显示解压过程,-j
处理 .bz2
文件,-f
指定文件名。
查看解压结果:解压后,会在当前目录生成一个
toybox-0.1.0
的文件夹,里面包含解压后的文件。完成以上步骤后,你就可以使用解压后的文件了。
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