'''
操作系统1. 内存管理2. 驱动管理3. 进程线程协程4. 文件系统1. 内存
32位电脑 4GDOS 内存是程序自己控制Windows 统一的内存空间 4G虚拟存储器1. CPU n核心 ALU cpu寄存器2. 每个核心 L1 L23. 整个CPu L3 3M4. 内存 很大很大8G5. 硬盘6. 网络传输虚拟存储器,统一的内存模型
一个程序 4G 内存+硬盘电脑4Ga 1G -> 内存中 页表b 1G -> 内存中 页表c 3G -> 把a存储,把c load进来
a => page fault
''''''操作系统1. 内存管理2. 驱动管理3. 进程线程协程4. 文件系统1. 内存
32位电脑 4GDOS 内存是程序自己控制Windows 统一的内存空间 4G虚拟存储器1. CPU n核心 ALU cpu寄存器2. 每个核心 L1 L2 cache miss3. 整个CPu L3 3M4. 内存 很大很大8G5. 硬盘6. 网络传输虚拟存储器,统一的内存模型
一个程序 4G 内存+硬盘电脑4Ga 1G -> 内存中 页表b 1G -> 内存中 页表c 3G -> 把a存储,把c load进来
a => page fault => page load => 正常运行
2. 驱动
ps/2 usb bluetooth flopy disk linux: 统一成文件 read write seek3. 文件系统 数组 [meta元信息 对应的文件位置(偏移量) 对应的文件大小] 格式化: 会把所有信息抹掉 快速格式化:meta清空所有的问价你,存在同一个file
/main/main.py -> file load -> execute''''''
1. 进程 pid 时间片2. 多线程3. 线程和进程 进程间通信 pipe file socket 线程通信 n线程来说 我都可以看到进程中的全局数据对于一个进程来说,你持有了一个页表
对于同一个进程内的线程,你共享同一张页表4. 多线程同步问题数组 支持add
1. 把数组size + 1 2. 把add的这个数字放在 data[size]两个线程 同时add
1. A线程 走了1 2. B线程 也走了1 3. A存了数据 data[size] = xxx 4. B也存了数据 data[size] = xxx核心在于
你的操作被拆分 解决方案呢? 1. atomic swap_and_cmp 2. 加锁,mutex,信号量,读写锁,自旋锁。加锁以后,我对这个资源有所有权,
在我所有操作没有结束前, 其他操作这个数据的人,就要等待数组 支持add
1. 加锁 2. 把数组size + 1 3. 把add的这个数字放在 data[size] 4. 解锁两个线程 同时add
1. A线程 走了1 2. B线程 也走了1 3. A 2 4. A 3 5. A 解锁 4. b走2,3,4同步会有问题?产生了死锁
哲学家进餐1. 为什么死锁?获取资源的顺序不一样
对于底下哲学家 先1后2 对于上面哲学家 先2后1所有的哲学家都是先1后2
1. 调整最后一个人的顺序 2. 如果我那不到右手,那我左手的也不要线程安全的交换数据的函数
swap(a,b) id(a) id(b) a.lock() b.lock() exchange(a.data, b.data) a.unlock() b.unlock()swap(a,b) ------ swap(b,a)
Python? GIL global interpreter lock
并发 并行
不管你多少个线程,只要你系统能处理多个事情,就是并发的 并行 这些事情都是在同一时间执行的 多线程 多进程同步异步 事件发生与否,需要你自己去检查
事件的发生与否,这个是别人通知给你的 阻塞非阻塞 阻塞 等 不等,就是非阻塞''''''
编译 解释 JIT编译? 一个代码编译成另外一种代码,编译到机器码,目标代码就是机器码解释? c语言是统一的,那我用c语言写出一个虚拟机,这个机器是可以部署到任何机器的 python语言,语言逐条转换成对应的虚拟机指令JIT just in time compiler 把最热的代码替换成编译到机器码动态VS静态
a = ''a = 1a = Truea = ''
a = 'hello'a = 'test'强类型弱类型
1 + '1'1 + 1有GC 无GC garbage collection
new delete // malloc free c, c++有gc: java golang python ruby scala jsnew1. mark & sweep concurrent mark sweep2. ref countingpython
1. ref counting2. mark & sweepa b
a.parent = bb.child = aweakref