4. 数学视角的操作系统
1 程序正确性证明
数千年来,数学的“严格性”都是由人类保证的
1.1 程序的本质
程序是一种 “数学严格” 的对象
Everything is a state machine
程序 = 初始状态 + 迁移函数
在这个视角下,程序和数学对象已经无限接近了
f(s)=s′f(s) = s'
f(s)=s′
我们经常写出 “似是而非” 的代码
类似于细节有错但可以修正的数学证明
for (int j = 0; j < n; i++)
(有时候也会疏忽,导致设计全错)
为什么会有程序?
是因为我们有无情的执行指令的机器 (计算机)
只有程序才配得上它
程序天生是 “人类” 的,也是 “反人类” 的
人类的一面:程序连接了人类世界需求
程序写的一切都能在现实生活观测到
我们并不是在实现 “uniform-random” 的 𝑓
反人类的一面:程序会在机器上执行
初学者对 “机器严格” 普遍不太适应
部分原因是对程序的行为没有 100% 的掌控
使用秘技:debug来观察程序的行为
1.2 当我们谈论数学的时候,我们想 ...
2.应用视角的操作系统
1. 操作系统上的最小应用程序
要想理解 “操作系统”,就要理解什么是 “程序”
一个Hello World示例
123int main() { printf("Hello, World\n");}
实际上,这个Hello World并不小
当我们使用objdump工具查看这个Hello World后可以发现:
--verbose可以查看所有编译选项 (真不少)
printf 变成了 puts@plt
-Wl,--verbose可以查看所有链接选项 (真不少)
原来链接了那么多东西
还解释了 end 符号的由来
-static 会链接 libc (大量的代码)
Hello World的最小实现
1234567891011121314151617#include <sys/syscall.h>.globl _start_start: movq $SYS_write, %rax # write( movq $1, %rdi # fd=1, movq $s ...
3.硬件视角的操作系统
1 计算机系统的状态机模型
1.1 一切皆为状态机
C 代码 = 状态机
SimpleC & GDB (TUI source)
汇编代码 = 状态机
GDB (TUI assembly)
处理器 = 状态机
mini-rv32ima; ICS PA
数字电路 = 状态机
Logisim
1.2 计算机系统的状态机模型
状态
内存、寄存器的数值
初始状态
由系统设计者规定 (CPU Reset)
状态迁移
从 PC 取指令执行
基本准确;但我们可以做一些补充
1.2.1 计算机系统:状态
寄存器、内存
12345struct CPUState { uint32_t regs[32], csrs[CSR_COUNT]; uint8_t *mem; uint32_t mem_offset, mem_size;};
还有外部世界的态
设备上的寄存器 (memory-mapped I/O 可以访问)
Interrupt/Reset Line
客观存在,但计算机系统不能直接访问
类比:进程只能通 ...
1. 操作系统概述
课程来源:b站-绿导师原谅你了“操作系统:设计与实现”(蒋炎岩)
教材
1. 为什么要学操作系统
1.1 为什么要学xxx
理解这门学科为了解决什么样的问题
重走一遍前人的发现历程
最终为了做到应用、创新、革命
了解到这门学科能做什么,不能做什么,知道这门技术的边界在哪里
2. 什么是操作系统
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)
2.1 什么是操作系统
简单的说,操作系统就是管理软/硬件资源、为程序提供服务的程序。
操作系统如何从一开始变成现在这样的?
三 ...
第一篇文章
测试
这篇测试文章将会是我的第一篇文章,立下flag,今后我将会记录我的一些:
学习笔记
遇到并解决的问题
随笔