├── 操作系统.assets ├── image-20200924101443074.png ├── image-20200924103641215.png ├── image-20200924105845722.png ├── image-20200924111519857.png ├── image-20200924111540096.png ├── image-20200924114539228.png ├── image-20200925082639253.png ├── image-20200925082912189.png ├── image-20200925083001939.png ├── image-20200925083333197.png ├── image-20200925083725490.png ├── image-20200925083814248.png ├── image-20200925083841678.png ├── image-20200925091156514.png ├── image-20200925095213035.png ├── image-20200925095905501.png ├── image-20200925100149212.png ├── image-20200925102048288.png ├── image-20200925105834381.png ├── image-20200925110348782.png ├── image-20200925110405618.png ├── image-20200926091212170.png ├── image-20200926092159763.png ├── image-20200926093112640.png ├── image-20200926111957131.png ├── image-20200929104327221.png ├── image-20200929104624791.png ├── image-20200929105104148.png ├── image-20200929105155084.png ├── image-20200929105714306.png ├── image-20200929110159715.png ├── image-20200929110410677.png ├── image-20200929111037893.png ├── image-20200929111207283.png ├── image-20200929111351296.png ├── image-20200929111746243.png ├── image-20200929112336910.png ├── image-20200929112735419.png ├── image-20200929115319528.png ├── image-20200929115434158.png ├── image-20200929115802695.png ├── image-20200929115845052.png ├── image-20200929120526880.png ├── image-20201014184137133.png ├── image-20201027142809887.png ├── image-20201028124111861.png ├── image-20201028124149462.png ├── image-20201028124322783.png ├── image-20201028124359943.png ├── 屏幕截图 2020-09-23 175053.png ├── 屏幕截图 2020-09-23 180446-1601000647171.png ├── 屏幕截图 2020-09-23 180446.png ├── 屏幕截图 2020-09-23 181006.png ├── 屏幕截图 2020-09-23 181023.png ├── 屏幕截图 2020-09-23 181345.png ├── 屏幕截图 2020-09-23 181400.png ├── 屏幕截图 2020-09-23 211204.png ├── 屏幕截图 2020-09-23 211625.png ├── 屏幕截图 2020-09-23 211822.png ├── 屏幕截图 2020-09-23 212152.png ├── 屏幕截图 2020-09-24 081549.png ├── 屏幕截图 2020-09-24 081838.png ├── 屏幕截图 2020-09-24 101358.png ├── 屏幕截图 2020-09-24 141446.png ├── 屏幕截图 2020-09-24 142518.png ├── 屏幕截图 2020-09-24 142529-1600928776216.png ├── 屏幕截图 2020-09-24 142529.png ├── 屏幕截图 2020-09-24 142630-1600928800389.png └── 屏幕截图 2020-09-24 142630.png └── 操作系统.md /操作系统.assets/image-20200924101443074.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200924101443074.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200924103641215.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200924103641215.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200924105845722.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200924105845722.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200924111519857.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200924111519857.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200924111540096.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200924111540096.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200924114539228.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200924114539228.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925082639253.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925082639253.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925082912189.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925082912189.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925083001939.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925083001939.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925083333197.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925083333197.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925083725490.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925083725490.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925083814248.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925083814248.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925083841678.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925083841678.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925091156514.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925091156514.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925095213035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925095213035.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925095905501.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925095905501.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925100149212.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925100149212.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925102048288.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925102048288.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925105834381.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925105834381.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925110348782.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925110348782.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200925110405618.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200925110405618.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200926091212170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200926091212170.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200926092159763.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200926092159763.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200926093112640.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200926093112640.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200926111957131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200926111957131.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929104327221.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929104327221.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929104624791.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929104624791.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929105104148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929105104148.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929105155084.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929105155084.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929105714306.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929105714306.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929110159715.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929110159715.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929110410677.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929110410677.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929111037893.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929111037893.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929111207283.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929111207283.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929111351296.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929111351296.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929111746243.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929111746243.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929112336910.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929112336910.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929112735419.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929112735419.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929115319528.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929115319528.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929115434158.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929115434158.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929115802695.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929115802695.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929115845052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929115845052.png -------------------------------------------------------------------------------- /操作系统.assets/image-20200929120526880.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20200929120526880.png -------------------------------------------------------------------------------- /操作系统.assets/image-20201014184137133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20201014184137133.png -------------------------------------------------------------------------------- /操作系统.assets/image-20201027142809887.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20201027142809887.png -------------------------------------------------------------------------------- /操作系统.assets/image-20201028124111861.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20201028124111861.png -------------------------------------------------------------------------------- /操作系统.assets/image-20201028124149462.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20201028124149462.png -------------------------------------------------------------------------------- /操作系统.assets/image-20201028124322783.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20201028124322783.png -------------------------------------------------------------------------------- /操作系统.assets/image-20201028124359943.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/image-20201028124359943.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-23 175053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-23 175053.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-23 180446-1601000647171.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-23 180446-1601000647171.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-23 180446.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-23 180446.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-23 181006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-23 181006.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-23 181023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-23 181023.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-23 181345.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-23 181345.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-23 181400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-23 181400.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-23 211204.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-23 211204.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-23 211625.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-23 211625.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-23 211822.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-23 211822.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-23 212152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-23 212152.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-24 081549.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-24 081549.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-24 081838.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-24 081838.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-24 101358.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-24 101358.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-24 141446.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-24 141446.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-24 142518.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-24 142518.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-24 142529-1600928776216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-24 142529-1600928776216.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-24 142529.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-24 142529.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-24 142630-1600928800389.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-24 142630-1600928800389.png -------------------------------------------------------------------------------- /操作系统.assets/屏幕截图 2020-09-24 142630.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chang-zy/Notes-of-operating-systems/18f8e128716046996bc590f1a5134a7a5c06c3d8/操作系统.assets/屏幕截图 2020-09-24 142630.png -------------------------------------------------------------------------------- /操作系统.md: -------------------------------------------------------------------------------- 1 | # 操作系统 2 | 3 | ### 前言 4 | 5 | > 本篇文章的内容结合了哈工大李治军老师操作系统课程,王道考研操作系统的资料以及学习了B站CodeSheep的一次知识梳理,并且为了便于理解学习,增加了个人的一些解释。总之,概括而言对于开发人员来说,操作系统需要下四个方面进行学习:进程/线程;并发/锁;内存管理与调度;I/O原理,本文也将围绕这几点逐渐深入。 6 | 7 | ## 一、常用术语总结 8 | 9 | | 名词 | 概念 | 10 | | -------------------------------------------- | :----------------------------------------------------------- | 11 | | PCB | 进程控制块(PCB Process Control Block),系统中存放、管理和控制进程信息的数据结构称为 | 12 | | TCB | 线程控制块 | 13 | | FCB | 文件控制块 | 14 | | PID | 进程ID(Process ID) | 15 | | PSW | 程序状态字寄存器,用于存放PC、IR等的信息 | 16 | | PC | 程序计数器,存放下一条指令地址 | 17 | | IR | 指令寄存器,存放到当前进行的指令 | 18 | | 半双工 | 半双工和全双工是计算机网络中的概念,意思是通讯同一时间只允许一方发送数据(对讲机) | 19 | | 全双工 | 通信允许两方向上同时传输数据(电话) | 20 | | P操作 | 来自荷兰语proveren,代表wait原语,通常使用P(S)代替wait(S) | 21 | | V操作 | 来自荷兰语verhogen,代表原语signal,通常使用V(S)代替signal(S) | 22 | | 用户态 | 一般的操作系统对执行权限进行分级,分别为用保护态和内核态。用户态相较于内核态有较低的执行权限,很多操作是不被操作系统允许的,从而保证操作系统和计算机的安全。 | 23 | | 内核态 | 内核态相当于一个介于硬件与应用之间的层,可以进行硬件的调度、使用,可以执行任何cpu指令,也可以引用任何内存地址,包括外围设备, 例如硬盘, 网卡,权限等级最高。 | 24 | | 用户态内核态切换 | 三种情况下,用户态会转换到内核态,`系统调用、程序异常(例如/0,内存资源耗尽等)、来自外围设备的中断` | 25 | | 系统调用/程序接口 | 用户程序通过系统调用的方式才能对硬件进行使用,或者说操作系统将使用硬件的接口提供给用户程序 | 26 | | 中断 | 中断是操作系统内核程序夺取cpu的唯一途径,或者说用户程序调用内核代码的唯一途径,因为在一般情况下,操作系统会将cpu使用权交给应用程序。 | 27 | 28 | ## 二、进程、线程 29 | 30 | 在进程、线程这一章节除了会讲进程、线程的概念,也会穿插,并发,锁。 31 | 32 | ### 2.1 进程 33 | 34 | 进程由PCB(进程控制块)组成,包含了PID、资源分配情况、进程运行情况。 35 | 36 | 对用户而言,我们能看到**一个个PID**,而对操作系统而言,底层需要处理的是**一个个PCB**。 37 | 38 | 下图是通过任务管理器的用户视角下的进程。 39 | 40 | ![屏幕截图 2020-09-23 180446](操作系统.assets/屏幕截图 2020-09-23 180446-1601000647171.png) 41 | 42 | 43 | 44 | #### 2.1.1 进程控制 45 | 46 | 进程控制相关的原语:`创建、终止、阻塞、唤醒、切换`。也就是说我们通过原语进行进程控制,原语的执行具有原子性,不允许被中断,原语的实现可以通过“关中断指令”和“开中断指令”实现。 47 | 48 | 进程状态:`运行态,就绪态,阻塞态` 49 | 50 | > 进程状态转换的条件: 51 | > 52 | > 运行 -> 阻塞 等待I/O或事件完成 53 | > 54 | > 运行 -> 就绪 进程的CPU时间片用完 55 | > 56 | > 就绪 -> 运行 获得了CPU的时间片 57 | > 58 | > 阻塞 -> 就绪 I/O或事件完成 59 | 60 | 下图为进程控制的流程图。 61 | 62 | ![屏幕截图 2020-09-23 211204](操作系统.assets/屏幕截图 2020-09-23 211204.png) 63 | 64 | #### 2.1.2 进程的组织形式 65 | 66 | > 在一个系统中,通常有数十、数百乃至数千个PCB。为了能对他们加以有效的管理,应该用适当的方式把这些PCB组织起来。 67 | 68 | 进程的组织形式分为两种:链接式和索引式 69 | 70 | ![屏幕截图 2020-09-23 181400](操作系统.assets/屏幕截图 2020-09-23 181400.png) 71 | 72 | 根据进程状态的不同,创建不同的索引表,可以通过指针可以通过索引表指到个PCB。 73 | 74 | ![屏幕截图 2020-09-23 181345](操作系统.assets/屏幕截图 2020-09-23 181345.png) 75 | 76 | #### **2.1.3 程序的执行** 77 | 78 | ![屏幕截图 2020-09-23 181006](操作系统.assets/屏幕截图 2020-09-23 181006.png) 79 | 80 | > 程序的状态字寄存器 PSW用来存放两类信息:一类是体现当前指令执行结果的各种状态信息,如有无进位(CY位),有无溢出(OV位)等;另一类是存放控制信息,如允许中断(IF位),跟踪标志(TF位)等。 81 | 82 | ![屏幕截图 2020-09-23 181023](操作系统.assets/屏幕截图 2020-09-23 181023.png) 83 | 84 | > 相较于程序,进程是动态的而程序是静态的 85 | 86 | #### 2.1.4 进程通信 87 | 88 | > 进程通信是指进程之间的信息交换。进程是分配系统资源的单位,因此各个进程拥有的内存地址相互独立,为了保证安全,一个进程不能直接访问另一个进程的地址空间,为了实现进程通信,操作系统提供了以下方法 89 | 90 | 进程通信方法:`共享存储、信号量、消息队列/信箱、管道通信、套接字(这个在计算机网络有涉及相关知识,可以把套接字理解为一个窗口)` 91 | 92 | **共享存储** 93 | 94 | ![屏幕截图 2020-09-23 211625](操作系统.assets/屏幕截图 2020-09-23 211625.png) 95 | 96 | **消息传递** 97 | 98 | 通过原语控制,进程1发送消息到消息缓冲队列或者信箱中,进程2从消息队列或者信箱中接收消息。 99 | 100 | ![屏幕截图 2020-09-23 211822](操作系统.assets/屏幕截图 2020-09-23 211822.png) 101 | 102 | **管道通信** 103 | 104 | ![屏幕截图 2020-09-23 212152](操作系统.assets/屏幕截图 2020-09-23 212152.png) 105 | 106 | ### 2.2 线程 107 | 108 | > 进程是资源分配的基本单位,线程是调度的基本单位,往往一个进程包含多个线程。线程并发,系统开销小,不需要切换系统资源。 109 | 110 | 线程可以分为用户级线程和内核级线程,早期如Unix只支持进程,不支持线程,所以当时的线程是由"线程库"实现的,用户将进程分为多个线程,放入线程库,但操作系统仍然是按照进程进行处理的。 111 | 112 | 这种用户级线程是由程序负责管理的,包括进行切换。这种切换方式**开销小,效率高**,但下图当一个用户级线程被阻塞后,整个**进程都将会被阻塞**。 113 | 114 | ![屏幕截图 2020-09-24 081549](操作系统.assets/屏幕截图 2020-09-24 081549.png) 115 | 116 | **多线程模型** 117 | 118 | 内核级线程是由操作系统完成调度的。 119 | 120 | 将n个用户级线程映射到m个内核级线程上( n >= m),优点是克服了多对一模型并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内 121 | 核级线程,开销太大的缺点。 122 | 123 | ![屏幕截图 2020-09-24 081838](操作系统.assets/屏幕截图 2020-09-24 081838.png) 124 | 125 | ### 2.3 进程调度 126 | 127 | #### 2.3.1 三种调度方式 128 | 129 | > 调度的产生是因为系统资源有限,没办法同时处理所有进程,需要特定的规则分配执行顺序,从而有了调度 130 | 131 | 操作系统调度层次分为三类:高级调度、中级调度、低级调度。 132 | 133 | 高级调度:从外存的后备作业中挑选一个(多个),建立相应的PCB,获得竞争处理的权力。 134 | 135 | 后面会讲到的虚拟内存技术出现后,为了提高系统的利用率和吞吐量,会将暂时等待的进程挂起到外存。 136 | 137 | 中级调度:能够决定哪个被挂起的进程重新回到内存中。 138 | 139 | 低级调度:从就绪队列中选取一个进程,使其能够被CPU处理。 140 | 141 | 三种调度方式的频率从低到高。 142 | 143 | 144 | 145 | > 进程调度时机:当前运行进程主动放弃(进程中止、异常、主动请求阻塞),被动放弃(时间片用完、更高优先级的进程进入就绪队列等) 146 | 147 | #### 2.3.2 调度算法评价指标 148 | 149 | > 作为开发人员的话,大致了解以下即可,毕竟工作中几乎不会涉及到具体指标计算 150 | 151 | `CPU利用率` = 忙碌的时间/总时间 152 | 153 | `系统吞吐量` = 总共完成了多少道作业/总共花了多少时间 (简单理解就是一个完成作业的速度指标) 154 | 155 | `周转时间 `= 作业完成时间– 作业提交时间 156 | 157 | `平均周转时间` = 各作业周转时间之和/作业数 158 | 159 | `带权周转时间` = (作业完成时间– 作业提交时间)/作业实际运行的时间,这项指标一定是大于等于1的,越接近一则越好 160 | 161 | `平均带权周转时间` = 各作业带权周转时间之和/作业数 162 | 163 | `等待时间`,指进程/作业处于等待处理机状态时间之和 164 | 165 | `响应时间`,指从用户提交请求到首次产生响应所用的时间。例如键盘事件响应时间,鼠标点击响应时间 166 | 167 | #### 2.3.3 【重点】调度算法 168 | 169 | `先来先服务FCFS`:顾名思义,先来的进程先服务,主要从“公平”的角度考虑(类似于我们生活中排队买东西的例子),非抢占式算法。 170 | 171 | `短作业优先SJF`:最短的作业/进程优先得到服务,追求最少的平均等待时间,非抢占式算法。 172 | 173 | ![image-20200924101443074](操作系统.assets/image-20200924101443074.png) 174 | 175 | `最短剩余时间优先算法SRTN`:每当有进程加入就绪队列改变时就需要调度,如果新到达的进程剩余时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。是一种抢占式算法。 176 | 177 | ![屏幕截图 2020-09-24 101358](操作系统.assets/屏幕截图 2020-09-24 101358.png) 178 | 179 | > 根据图示要区分最短剩余时间优先算法和短作业优先算法。 180 | 181 | `高响应比优先HRRN`,相应比 = (等待时间+要求服务时间)/要求服务时间 182 | 183 | ,是一种非抢占式的调度算法,只有当前运行的进程主动放弃CPU时(正常/异常完成,或主动阻塞),才需要进行调度。 184 | 185 | 以上方法适用于早期的批到处理系统,适用于交互式系统的调度算法。 186 | 187 | 适用于目前交互式系统的调度算法,在交互式操作系统中,可以将任务划分为前台任务(鼠标、键盘等任务)和后台任务,前台任务更关心响应事件,后台任务更关心周转。 188 | 189 | `时间片轮转调度算法RR`:周期性切换PCB,各个PCB轮流使用CPU 190 | 191 | ![image-20200924103641215](操作系统.assets/image-20200924103641215.png) 192 | 193 | `最高优先级调度算法`即前台进程优先级高于后台进程,系统进程优先级会高于用户进程,特点就是不公平,容易产生饥饿。 194 | 195 | >1973年关闭的MIT的IBM 7094时,发现有一个进程在1967年提交但一直未运行 196 | 197 | ### 2.4 实现进程互斥、同步、前驱 198 | 199 | 如果要清晰讲述需要了解代码逻辑,对于非专业人员来说,必要性不大,这里就不详细罗列代码了。 200 | 201 | #### 2.4.1 硬件实现进程互斥 202 | 203 | 进程互斥:当一个进程进入临界区后,另一个进程必须等待。 204 | 205 | 硬件能够实现进程互斥,有三种方式:**利用“开/关中断指令”实现**、**TSL指令**、**SWAP指令**。 206 | 207 | #### 2.4.2 信号量机制实现互斥、同步、前驱 208 | 209 | 信号量机制:用户进程可以通过使用操作系统提供的原语对信号量进行操作,从而很方便的实现进程的互斥、同步、前驱。 210 | 211 | > 不要一头钻到代码里,要注意理解信号量背后的含义,一个信号量对应一种资源 212 | > 信,在操作系统中,信号量在源码中其实就对应着一个变量,代表着某种资源的数量,通过信号量可以实现进程互斥、同步、前驱。 213 | 214 | 进程同步的理解:`要让各并发进程按要求有序地推进`。若PCB2 的“代码4”要基于PCB1 的“代码1”和“代码2”的运行结果才能执行,那么我们就必须保证“代码4”一定是在“代码2”之后才会执行。 215 | 216 | 前驱的理解:其实每一对前驱关系都是一个进程同步问题(需要保证一前一后的操作) 217 | 218 | ![image-20200924114539228](操作系统.assets/image-20200924114539228.png) 219 | 220 | 信号量保护:共享数据在没有保护的情况下,会出现安全问题,所以需要锁来进行保护,锁本质也是一个变量,用来保护信号量安全,那锁本身的安全谁来保护?我们不能在这里套娃对不对,所以锁是一种硬件原子指令,当要进入临界区时,上锁,离开临界区时解锁。下面的知识有一些扩展了。 221 | 222 | > 在cpu芯片上有一个HLOCK Pin,可以通过发送指令来操作,将#HLOCK Pin电位拉低,并持续到这条指令执行完毕,从而将总线锁住,这样同一总线上的其他CPU就不能通过总线来访问内存了。最开始这些功能是用来测试cpu的,后来被操作系统实现而封装成各种功能:关键代码段,信号量等。 223 | > 224 | > 作者:tracy_668 225 | > 链接:https://www.jianshu.com/p/61490effab35 226 | > 来源:简书 227 | 228 | 229 | 230 | 231 | 232 | ### 2.5 死锁的概念与处理 233 | 234 | `死锁的4个条件`,缺一不可 235 | 236 | - 互斥条件:对必须互斥使用的资源的争抢才会导致死锁 237 | - 不剥夺条件:进程所获得的资源未使用完之前,不能被其他进程强行夺走,只能主动释放。 238 | - 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己有的资源保持不放。就像很窄的桥,两个人都要去对面,但谁又都无法让出位置来 239 | 240 | - 循环等待条件:存在一种进程资源的循环等待,链中的每一个进程已获得的资源同时被下一个进程所请求。想象有一个闭环,闭环上每个人都需要下一个人手上的某个资源,那么所有人都没办法满足 241 | 242 | 243 | 244 | 下图就像我们的一个死锁 245 | 246 | ![屏幕截图 2020-09-24 141446](操作系统.assets/屏幕截图 2020-09-24 141446.png) 247 | 248 | 249 | 250 | `死锁的处理方式`: 251 | 252 | - 死锁预防 253 | 254 | - 破坏互斥条件(创建一个队列,所有的请求都会被快速响应,然后队列逐渐将请求发送到处理器进行整理) 255 | 256 | - 破坏不剥夺条件(进程的某个资源得不到满足时,就必须立刻释放所持有的资源) 257 | 258 | - 破坏请求和保持条件(静态分配,进程在运行前就一次性申请全部的资源,不满足就不让允许,就像过桥时保证桥上没人才让通行,否则禁止通行) 259 | 260 | - 破坏循环等待条件(资源编号,进程必须按照编号递增的顺序请求资源,这样就不会出现持有大资源请求小资源的情况,也就不会有循环的等待) 261 | 262 | (方式较多,这里简单列举一些案例) 263 | 264 | - 死锁避免 265 | 266 | > 银行家算法:进程提出资源申请时,先判断这次分配会不会导致系统进入不安全状态,如果会则不答应请求,让该进程阻塞。简而言之,请求不能大于手中的资源。这种算法也叫银行家算法。 267 | 268 | - 死锁检测与恢复 269 | 270 | 检测方法通过死锁检测算法,下面以图的方式说明 271 | 272 | ![屏幕截图 2020-09-24 142518](操作系统.assets/屏幕截图 2020-09-24 142518.png) 273 | 274 | 能够消除所有边,就不会发生死锁如下图 275 | 276 | ![屏幕截图 2020-09-24 142529](操作系统.assets/屏幕截图 2020-09-24 142529.png) 277 | 278 | 不能消除所有边就会发生死锁 279 | 280 | ![屏幕截图 2020-09-24 142630](操作系统.assets/屏幕截图 2020-09-24 142630-1600928800389.png) 281 | 282 | **死锁恢复:**资源剥夺将死锁的进程挂起,释放资源;撤销进程,直接将部分或者全部死锁进程撤销;进程回退,让进程回退的足以避免死锁的地方。 283 | 284 | - 死锁忽略 285 | 286 | 顾名思义,忽略这个死锁,死锁概率本不高,就算出现了也只是局部的死锁,直接不管反而能提高资源利用率与整体运行的速度,也有个好听的名字叫鸵鸟算法,这样性能会提升不少,大部分操作系统也采用死锁忽略的策略。 287 | 288 | ## 三、内存 289 | 290 | 内存:程序执行前要先放到内存中才能被CPU处理。计算机小白可能以为内存就是存储空间,其实不然。 291 | 292 | 地址:4G的内存空间,有4*2^30个字节,也就是2^32个字节,要表示全部的字节就需要**32位的二进制地址**,这也就是我们以前流行的32位操作系统的由来。但目前内存基本上都是8G,16G,所以32位已经不能满足需求,当前主流是**64位操作系统**,能表示2^64个字节,最高4,294,967,296G的内存空间,远远满足当前的任何个人电脑地址表达需求。 293 | 294 | ![image-20200925082639253](操作系统.assets/image-20200925082639253.png) 295 | 296 | ### 3.1 程序装入内存 297 | 298 | > 可执行文件需要放在内存中才可以运行,程序中的指令是逻辑地址,而内存中的地址是物理地址。如何将逻辑地址转为物理地址? 299 | 300 | 1. 绝对装入 301 | 302 | 下图为可执行文件指令。 303 | 304 | ![image-20200925082912189](操作系统.assets/image-20200925082912189.png) 305 | 306 | 假如0-100的地址已经被占用,系统知道装入模块要从地址为100 的地方开始存放,编译时就将指令的绝对地址载入了可执行文件,即 307 | 308 | ![image-20200925083001939](操作系统.assets/image-20200925083001939.png) 309 | 310 | 2. 静态重定位 311 | 312 | 编译、链接后的装入模块的地址都是从0开始的,即可执行文件指令地址不变,在装入内存时,逻辑地址全部+100,装入内存中。所以作业一旦装入就没办法再更改、申请内存空间。 313 | 314 | 3. 动态重定位 315 | 316 | 又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到**程序真正要执行时才进行**。 317 | 318 | 319 | 320 | **这种方式需要一个重定位寄存器的支持**,寄存器记录了初始进入的的地址即100,在程序运行时,会动态的将指令中的逻辑地址增加上初始地址。 321 | 322 | ![image-20200925083333197](操作系统.assets/image-20200925083333197.png) 323 | 324 | ### 3.2 链接方式 325 | 326 | 1. 静态链接 327 | 328 | >在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。 329 | 330 | ![image-20200925083725490](操作系统.assets/image-20200925083725490.png) 331 | 332 | 2. 装入时动态链接 333 | 334 | > 装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。 335 | 336 | ![image-20200925083814248](操作系统.assets/image-20200925083814248.png) 337 | 338 | 3. 运行时动态链接 339 | 340 | > 在程序执行中需要该目标模块时,才对它进行链接。其优点是物理地址便于修改和更新,便于实现对目标模块的共享。 341 | 342 | ![image-20200925083841678](操作系统.assets/image-20200925083841678.png) 343 | 344 | ### 3.3 内存管理 345 | 346 | 操作系统需要负责内存空间的分配与回收、内存空间扩充、地址转换、内存保护。 347 | 348 | 1. **分配与回收** 349 | 350 | 分配在程序链接方式已经讲明白了,回收即对内存中的进程进行撤销、挂起等操作。 351 | 352 | 2. **扩充** 353 | 354 | 这会涉及到后面的虚拟内存技术,这也十分常见,比方说我们5G的程序如何运行在2G的内存上,这就需要扩充。 355 | 356 | 3. **地址转换** 357 | 358 | 在装入内存已经讲过。 359 | 360 | 4. **内存保护** 361 | 362 | 简单来说就是操作系统保护已经在内存上的进程不被干扰。一种方式是设置上下限寄存器存放进程上下界,如100-179被占用,其他进程不可使用这里的内存。另外一种方式是重定位寄存器与界地址寄存器,如下图 363 | 364 | ![image-20200925091156514](操作系统.assets/image-20200925091156514.png) 365 | 366 | 通过逻辑判断内存是否能执行某操作。 367 | 368 | ### 3.4 覆盖技术与交换技术 369 | 370 | 技术产生的原因:程序所需的运行空间大于实际内存大小,需要让内存发挥出更大的作用。 371 | 372 | 覆盖技术:按照逻辑,将不可能同时被访问的程序段共享一个覆盖区 373 | 374 | ![image-20200925095213035](操作系统.assets/image-20200925095213035.png) 375 | 376 | 交换技术:内存紧张时,将部分进程暂时挂起(放置到外村),将外村已具备运行条件的进程换入内存。 377 | 378 | ### 3.5 连续分配管理方式 379 | 380 | 单一连续分配:用于早期操作系统,内存被划分为系统区和用户区,内存只能有一道用户程序,局限性不言而喻。 381 | 382 | 固定分区分配:整个用户空间划分为若干个固定大小的分区,在每个分区中只装入一道作业。 383 | 384 | ![image-20200925095905501](操作系统.assets/image-20200925095905501.png) 385 | 386 | 动态分区分配:不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区。 387 | 388 | ![image-20200925100149212](操作系统.assets/image-20200925100149212.png) 389 | 390 | 动态分区分配会产生**外部碎片**,外部碎片,是指内存中的某些空闲分区由于太小而难以利用。 391 | 392 | ### 3.6 动态分区分配算法 393 | 394 | - 首次适应算法 395 | 396 | > 每次都从低地址开始查找,找到第一个能满足大小的空闲分区 397 | 398 | - 最佳适应算法 399 | 400 | >因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即,优先使用更小的空闲区。 401 | 402 | - 最坏适应算法 403 | 404 | > 为了解决最佳适应算法的问题——即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。 405 | 406 | - 邻近适应算法 407 | 408 | > 首次适应算法每次都从链头开始查找的。这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查找结束的位置开始检索,就能解决上述问题。 409 | 410 | **综合来看** 411 | 412 | ![image-20200925102048288](操作系统.assets/image-20200925102048288.png) 413 | 414 | ### 3.7 基本分页存储管理 415 | 416 | 在3.6中的算法总是存在种种问题,在实际操作系统中,分页可以解决内存分区导致的效率、碎片问题。 417 | 418 | **图示** 419 | 420 | ![image-20200925105834381](操作系统.assets/image-20200925105834381.png) 421 | 422 | 页框: 每个分区就是一个“页框”(页框=页帧=内存块=物理块=物理页面) 423 | 424 | 页面:将进程的逻辑地址空间也分为与页框大小相等的一个个部分,每个部分称为一个“页”或“页面” 425 | 426 | > 页框不能太大,否则可能产生过大的内部碎片导致浪费。 427 | 428 | 页框和页面总是记混,技巧其实很简单只要记住页面放在页框中,就再也不会记混了。 429 | 430 | 431 | 432 | 页表:操作系统要为每个进程建立一张页表。页表通常存在PCB,这里概念不清的话可能会有疑惑为什么PCB中会有页表,仔细阅读前面的部分,PCB中不光存放进程,还存放着进程信息、PID、IO情况等多个内容。 433 | 434 | 页表记录进程页面和实际存放的内存块之间的映射关系 435 | 436 | ![image-20200925110405618](操作系统.assets/image-20200925110405618.png) 437 | 438 | 页表项所占字节:假设某系统物理内存大小为4GB,页面大小为4KB,则有2^32 / 2^12 = 2^20 个内存块,那么每一个块号就需要20bit,至少3字节来表示。由于页号是隐含的,因此每个页表项占3B。 439 | 440 | 441 | 442 | 同样的,有进程和内存,就有地址转换的问题进程的页号是`逻辑地址`,内存的页框号是`物理地址`,中间需要计算页内偏移量。 443 | 444 | - 页号= 逻辑地址/ 页面长度(取除法的整数部分) 445 | 446 | - 页内偏移量= 逻辑地址% 页面长度(取除法的余数部分) 447 | 448 | 449 | 450 | > 逻辑地址A 对应的物理地址= P号页面在内存中的起始地址+页内偏移量W 451 | 452 | ### 3.8 具有快表的地址变换机构 453 | 454 | 快表TLB:又称联想寄存器,是访问速度比内存快很多的高速缓存。 455 | 456 | er![image-20200926091212170](操作系统.assets/image-20200926091212170.png) 457 | 458 | 快表为什么速度快:直接从快表中取出该页对应的内存块号,再将内存块号与页内偏移量拼接形成物理地址最后,访问该物理地址对应的内存单元。因此,若快表命中,则访问某个逻辑地址仅需一次访存即可。 459 | 460 | 慢表则要在多级页表中找到对应的页表,再从相应的页号中取出内存块号。 461 | 462 | 就像看一本书,快表放了书签,而慢表则要慢慢找上次看到了哪 463 | 464 | > 局部性原理: 465 | > 466 | > 时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环) 467 | > 空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据在内存中都是连续存放的) 468 | 469 | ### 3.9 两级页表 470 | 471 | 为什么要有两级页表 472 | 473 | > 根据局部性原理,进程某个时间段内只需要访问几个页面就可以正常运行了,没必要让整个页面都在内存中常驻。同时,过大的页表还会占用很多页框,也就是内存空间。 474 | 475 | 示意图: 476 | 477 | ![image-20200926092159763](操作系统.assets/image-20200926092159763.png) 478 | 479 | 当整个页表被分为多个页表,在内存中只需要放入有需求的页表,从而提高效率,节省空间。 480 | 481 | ### 3.10 基本分段管理 482 | 483 | > 分段管理:以段为单位进行分配,每个段在内存中占据连续空间,各段之间可以不相邻。大体上与分页类似,与“分页”最大的区别就是——离散分配时所分配地址空间的基本单位不同。 484 | 485 | ### 3.11 虚拟内存 486 | 487 | 在真实的操作系统中,通常采用段页式存储管理,段面向用户,页面向硬件。 488 | 489 | ![image-20200926093112640](操作系统.assets/image-20200926093112640.png) 490 | 491 | 492 | 493 | 虚拟内存解决的问题: 494 | 495 | - 一次性:作业必须一次性全部装入内存后才能开始运行。这会造成两个问题:①作业很大时,不能全部装入内存,导致**大作业无法运行**;②当大量作业要求运行时,由于内存**无法容纳所有作业**,因此只有少量作业能运行,导致多道程序并发度下降。 496 | 497 | - 驻留性:一旦作业被装入内存,就会一直驻留在内存中,直至作业运行结束。事实上,在一个时间段内,只需要访问作业的一小部分数据即可正常运行,这就导致了内存中会驻留大量的、暂时用不到的数据,**浪费了宝贵的内存资源。** 498 | 499 | 500 | 501 | 虚拟内存的实现: 502 | 503 | - 基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分**留在外存**,就可以让程序开始执行。 504 | 505 | - 在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从**外存调入内存**,然后继续执行程序。 506 | 507 | - 若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是**虚拟内存**。 508 | 509 | ### 3.12 请求分页管理 510 | 511 | 请求分页管理: 512 | 513 | > 在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存 514 | 515 | 缺页中断: 在请求分页系统中,每当要访问的页面不在内存时,便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断。 516 | 517 | 518 | 519 | 缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。如果内存中没有空闲块,则由**页面置换算法**选择一个页面淘汰,同时要注意,若某个页面被换出外存,则**快表**中的相应表项也要删除,否则可能访问错误的页面 520 | 521 | 522 | 523 | **理解缺页**,缺页就像货架上缺少了商品,需要从仓库里调取商品,就先暂停这个货架的销售,等商品调取完毕再重新出售。 524 | 525 | 526 | 527 | ### 3.13 页面置换算法 528 | 529 | 置换算法的评价指标是:缺页的次数,某种算法让缺页次数最低,调度效率最高,那就是最优的算法 530 | 531 | 1. 最佳置换算法 532 | 533 | 每次淘汰的页面都是以后永久不用或最长时间不使用的页面,保证最低的缺页率。**显然,这种需要预测未来的算法不可能实现。** 534 | 535 | 2. 先进先出算法FIFO 536 | 537 | 缺页时,淘汰最早进入的页面。算法简单,但局限性也明显,例如某些经常使用的页面一直被换进换出,和使用频率低的页面有相同的被换出的机会。 538 | 539 | 3. 最近最久未使用置换算法LRU 540 | 541 | 每次淘汰的页面都是最近最久未使用的页面。需要在页面中添加一个记录项,记录上次被访问以来经历的时间t,当需要淘汰页面时,选择时间t最大的淘汰,也就是最久未使用的淘汰。**算法设计虽好,但开销很大,实现困难。** 542 | 543 | 4. 时钟置换算法 544 | 545 | 时钟置换算法也可以称为最近未使用算法。**是一种性能和开销均衡的算法。** 546 | 547 | 简单的时钟算法实现方法:为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位置为1。当需要淘汰一个页面时,只需检查页的访问位。如果是0,就选择该页换出;如果是1,则将它置为0,暂不换出,继续检查下一个页面,若第一轮扫描中所有页面都是1,则将这些页面的访问位依次置为0后,**再进行第二轮扫描**(第二轮扫描中一定会有访问位为0的页面,因此简单的CLOCK算法选择一个淘汰页面最多会经过两轮扫描) 548 | 549 | 如下图。 550 | 551 | ![image-20200926111957131](操作系统.assets/image-20200926111957131.png) 552 | 553 | **了解即可** 554 | 555 | > 问题:缺页很少,访问位都是一,那么扫描了一轮进行第二次扫描,就相当于FIFO算法,为了改进这种情况,提出了下面的算法。 556 | > 557 | > 改进版的时钟算法(有很多改进方式,这里只是一种):如果把页面看成钟表,原来的慢指针相当于`时针`,现在添加一个`快指针`,相当于`分针`,分针扫描要比时针快,如果一个页面在一定时间限制内没有访问,就设访问位为0,缺页时直接换出。 558 | 559 | ## 四、I/O原理 560 | 561 | > 注意文件索引和文件目录结构的区别,索引是检索文件的方式,而文件目录结构是用户管理计算机文件的一种结构,单级目录、多级目录等等。在用户目录的基础上,文件控制块FCB会指向对应的索引块。 562 | 563 | ### 4.1 文件的逻辑结构 【了解即可】 564 | 565 | 文件可以分为两类: 566 | 567 | > 1. 无结构文件 568 | > 569 | > 文件内部数据就是一系列二进制流或字符流。最典型的就是txt文件。 570 | > 571 | > 2. 有结构文件 572 | > 573 | > 由一组相似的记录组成,又称记录式文件。典型的excel表、数据库表等。 574 | 575 | 有结构文件的逻辑结构又分`顺序文件`、`索引文件`、`索引顺序文件`,注意逻辑结构是展示给用户的,是文件的组织形式,例如是一张顺序存储的excel表格,还是一张excel索引表加上excel顺序表,还是多级索引加顺序,而不是在计算机上的存储方式。 576 | 577 | 顺序文件:文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。 578 | 579 | > 顺序存储即逻辑相邻的文件物理上也相邻,链式存储即在末尾添加新的文件。 580 | 581 | 记录的类型又分为可变长和不可变长记录: 582 | 583 | ![image-20200929104327221](操作系统.assets/image-20200929104327221.png) 584 | 585 | 586 | 587 | **问题**:对于可变长记录文件,要找到第i 个记录,必须先顺序第查找前 i - 1 个记录,但是很多应用场景中又必须使用可变长记录。如何解决这个问题? 588 | 589 | 之后提出了索引文件:简单而言就是引入了索引表的文件。索引表本身是顺序文件,即索引表顺序存储在一起。 590 | 591 | ![image-20200929104624791](操作系统.assets/image-20200929104624791.png) 592 | 593 | 594 | 595 | **问题**::每个记录对应一个索引表项,因此索引表可能会很大。比如:文件的每个记录平均只占8B,而每个索引表项占32个字节,那么索引表都要比文件内容本身大4倍,这样对存储空间的利用率就太低了。 596 | 597 | 索引顺序文件:索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项,索引表项的地址直接指向顺序文件所在区域,再顺序查找到所需的文件,从而节省了很大的空间。(例如我们可以通过An Qi找到An Kang、An Jie等,而不用在索引表中存放这么多信息。另外索引项之间不需要有按照逻辑关系排列) 598 | 599 | ![image-20200929105104148](操作系统.assets/image-20200929105104148.png) 600 | 601 | 多级索引顺序文件:在索引顺序文件的基础上再增加层次深度,可以减少查找的次数(顺序查找范围缩小了) 602 | 603 | ![image-20201027142809887](操作系统.assets/image-20201027142809887.png) 604 | 605 | ### 4.2 文件目录 606 | 607 | 文件目录可以分为:`单级目录结构`、`两级目录结构`、`多级目录结构(树形目录结构)` 608 | 609 | 单极目录结构:顾名思义,所有的文件放在一个目录中,类似于一个仓库把所有文件不加整理的堆放在一起,显然效率会很低下。 610 | 611 | 两级目录结构:主要分为主文件目录和用户文件目录。类似于仓库中加了几个员工货架,不同员工的货物放在不同货架,但在一个货架中文件还是采用堆砌式的存储。 612 | 613 | ![image-20200929105714306](操作系统.assets/image-20200929105714306.png) 614 | 615 | 多级目录结构,又称树形目录结构:我们当前主流操作系统都是多级目录结构,简而言之就是文件目录可以一级一级的延申,从而文件更有条理。 616 | 617 | FCB(文件控制块),首先来看一张图,如果文件目录都以这种表的形式进行信息查找,会大大降低运行效率,增加系统负担。 618 | 619 | ![image-20200929110159715](操作系统.assets/image-20200929110159715.png) 620 | 621 | > 提出对策,其实在查找各级目录的过程中,只需要用到文件名这个信息,可以考虑让目录表瘦身来提升效率。 622 | 623 | ![image-20200929110410677](操作系统.assets/image-20200929110410677.png) 624 | 625 | 索引结点指针指向索引结点(文件名之外的其他信息就存放在结点中,从而按需读取,提升效率) 626 | 627 | **FCB** 628 | 629 | ![image-20201028124149462](操作系统.assets/image-20201028124149462.png) 630 | 631 | 每一个文件都有一个FCB,记录了文件的地址、信息、权限等等属性 632 | 633 | ### 4.3 文件的物理结构【重要】 634 | 635 | 最重要的三种物理结构:顺序、链接、索引,其中最主要使用的是索引文件,可以随机访问,同时增删效率高。 636 | 637 | 思考:想想数据结构中,顺序表和链表分别的优缺点是什么? 638 | 639 | 文件的物理结构是文件分配在计算机存储上的分配方式。分配的基本单位是 物理块,可以构想一下,一个大文件,如一首音乐23MB,难道直接一整个塞入硬盘吗?显然可能会出现一些问题,硬盘的空间也需要不断调整,就像内存分页一样,硬盘也被分为小的物理块号方便进行调度。 640 | 641 | - 连续分配 642 | 643 | ![image-20201028124111861](操作系统.assets/image-20201028124111861.png) 644 | 645 | > 优点:支持顺序访问和直接访问(即随机访问);连续分配的文件在顺序访问时速度最快 646 | > 缺点:不方便文件拓展;存储空间利用率低,会产生磁盘碎片 647 | 648 | - 链式分配 649 | 650 | **隐式** 651 | 652 | ![image-20201028124322783](操作系统.assets/image-20201028124322783.png) 653 | 654 | > 采用链式分配(隐式链接)方式的文件,只支持顺序访问,不支持随机访问,查找效率低。另外,指向下一个盘块的指针也需要耗费少量的存储空间。 655 | 656 | **显式** 657 | 658 | 直观理解就是在隐式的基础上添加了一张表,从表上能看出不同物理块号的下一块的地址 659 | 660 | > 结论:采用链式分配(显式链接)方式的文件,支持顺序访问,也支 661 | > 持随机访问(想访问i 号逻辑块时,并不需要依次访问之前的0 ~ i-1 662 | > 号逻辑块),由于块号转换的过程不需要访问磁盘,因此相比于隐式 663 | > 链接来说,访问速度快很多。 664 | > 显然,显式链接也不会产生外部碎片,也可以很方便地对文件进行拓 665 | > 展。 666 | 667 | ![image-20201028124359943](操作系统.assets/image-20201028124359943.png) 668 | 669 | - 索引分配 670 | - 单级 671 | - 多级 672 | 673 | 索引就是文件分成不同的物理块存入磁盘,对每个物理块都有一个索引与之对应,需要读写时就通过索引表查询其物理地址进行相关操作。 674 | 675 | ### 4.3 磁盘结构 676 | 677 | ![image-20200929111037893](操作系统.assets/image-20200929111037893.png) 678 | 679 | 磁道:每一圈就是一个磁道,最内侧磁道面积最小,所以数据密度最大 680 | 681 | 扇区:磁道被划分为小的磁盘块 682 | 683 | 684 | 685 | > 一个`盘片`可能有两个`盘面`;每个盘面对应一个`磁头`;所有磁头连在一起,共进退;每个盘面的相对位置的磁道组成`柱面` 686 | 687 | ![image-20200929111207283](操作系统.assets/image-20200929111207283.png) 688 | 689 | 两种类型的磁盘: 690 | 691 | ![image-20200929111351296](操作系统.assets/image-20200929111351296.png) 692 | 693 | ### 4.4 磁盘调度算法 694 | 695 | 磁盘调度算法要解决的核心问题就是**寻道时间**,即移动磁头的时间,而其他的启动时间、传输时间都很迅速,不是最主要的时间消耗。 696 | 697 | 这里讲三种算法: 698 | 699 | 1. 先来先服务FCFS 700 | 701 | 根据进程请求房屋内磁盘的现后顺序进行调度。符合惯性思维,但在很多时候,效果很差。 702 | 703 | ![image-20200929111746243](操作系统.assets/image-20200929111746243.png) 704 | 705 | 2. 最短寻找时间优先(学过数据结构与算法的话,核心思想就是贪心算法),该算法会优先处理与当前磁头最近的磁道的需求。 706 | 707 | 那么很可能磁头就会如图所示的移动,也会存在饥饿问题:磁头只在一个小区域移动,而不能满足需要远距离移动的需求。例如不断有18->38,38->18的需求,那磁头就不会执行18->150的请求,从而产生饥饿。 708 | 709 | ![image-20200929112336910](操作系统.assets/image-20200929112336910.png) 710 | 711 | 3. 扫描算法 712 | 713 | 核心思想,只有磁头移动到最外侧磁道的时候才能往内侧移动,移动到最内侧的时候才能向外侧移动。 714 | 715 | 这样就不会产生饥饿问题。 716 | 717 | ![image-20200929112735419](操作系统.assets/image-20200929112735419.png) 718 | 719 | ### 4.5 文件共享 720 | 721 | 文件共享分两种链接方式,硬链接和软连接 722 | 723 | `硬链接`就是在另一个用户的目录中,索引结点指针直接指向了发送分享的用户的索引节点,从而实现了共享,count的数量代表文件正在被几个用户使用。 724 | 725 | ![image-20200929115319528](操作系统.assets/image-20200929115319528.png) 726 | 727 | `软连接`,类似于快捷方式,记录了原文件的路径,然后层层查找。 728 | 729 | ![image-20200929115434158](操作系统.assets/image-20200929115434158.png) 730 | 731 | 例如文件2的内容是 C:/User1/aaa,也就是要去User1中寻找aaa的文件名对应的索引结点。 732 | 733 | ### 4.6 文件保护 734 | 735 | 文件保护有三种方式口令、加密、访问控制 736 | 737 | 1. 口令 738 | 739 | 为文件设置一串口令,就像打开手机需要先解锁。 740 | 741 | 2. 加密 742 | 743 | 使用加密方法对文件加密,只有拥有正确的解密方法才能解密,有点像不同军队之间进行通信,要实现进行加密,要是想窥探敌情,就要对密文进行破解。 744 | 745 | ![image-20200929115802695](操作系统.assets/image-20200929115802695.png) 746 | 747 | 3. 访问控制 748 | 749 | 每个文件的FCB或者索引结点中设置访问控制表,如windows中,设置了很多的访问权限,例如 750 | 751 | ![image-20200929115845052](操作系统.assets/image-20200929115845052.png) 752 | 753 | 754 | 755 | ### 4.7 I/O设备 756 | 757 | I/O就是输入输出,I/O设备就是可以将数据输入到计算机或将计算机数据输出的设备,`常见的`:鼠标、键盘、音响、显示器、打印机、话筒、摄像头等等。 758 | 759 | I/O控制器:CPU无法直接控制I/O设备,需要一个电子部件去充当中间人,这个部件就是I/O控制器,CPU控制I/O控制器,I/O控制器控制I/O设备。 760 | 761 | > 假如我们的CPU能够控制I/O设备,那不同的厂商、不同型号的设备,都要对应进行编码,显然是不切实际的,所以CPU要采用通用调度方式调度I/O设备从而需要I/O控制器。 762 | 763 | 764 | 765 | **I/O控制器的组成** 766 | 767 | ![image-20200929120526880](操作系统.assets/image-20200929120526880.png) 768 | 769 | 770 | 771 | 以下作为了解。 772 | 773 | > 例如我们在Java语言中,调用System.out.Println(),这本身并不能在显示器上打印,而需要通过操作系统调用write方法,接着调用字符设备接口,命令显示器写。 774 | 775 | --------------------------------------------------------------------------------