[{"data":1,"prerenderedAt":4820},["ShallowReactive",2],{"note:cs\u002Fos\u002Fnote\u002Fchap11":3,"site-search-catalogue":4819},{"id":4,"title":5,"body":6,"description":38,"extension":37,"meta":4814,"navigation":997,"path":4815,"seo":4816,"stem":4817,"__hash__":4818},"notes\u002Fsource\u002Fcs\u002Fos\u002Fnote\u002Fchap11.md","Chap. 11 Note",{"type":7,"value":8,"toc":4735},"minimark",[9,14,19,23,29,32,99,102,106,110,113,169,173,176,238,242,245,255,259,305,308,312,348,350,354,358,361,423,427,434,437,462,465,469,472,475,510,513,517,523,526,529,549,553,560,564,571,574,594,598,601,655,661,663,667,671,682,711,718,722,725,728,766,769,789,793,799,802,805,830,837,841,844,892,895,910,913,917,920,980,983,1014,1017,1019,1023,1027,1033,1036,1056,1059,1063,1099,1103,1106,1126,1130,1133,1136,1156,1159,1238,1241,1338,1341,1344,1364,1368,1398,1401,1405,1411,1414,1434,1437,1498,1501,1516,1520,1523,1526,1546,1550,1553,1555,1559,1563,1566,1570,1573,1618,1621,1870,1873,2241,2244,2279,2283,2286,2301,2305,2308,2482,2486,2489,2492,2517,2521,2524,2526,2551,2554,2558,2561,2564,2592,2595,2598,2602,2605,2608,2623,2627,2633,2636,2640,2670,2673,2698,2702,2705,2752,2755,2770,2773,2798,2800,2804,2807,2832,2839,2859,2862,2902,2904,2908,2912,2919,2922,2951,2955,2958,2961,2986,2989,2993,2996,2998,3023,3025,3040,3044,3047,3049,3069,3072,3076,3079,3081,3106,3109,3112,3116,3119,3121,3146,3150,3153,3155,3185,3188,3192,3195,3197,3222,3226,3365,3367,3371,3375,3381,3406,3410,3471,3475,3478,3497,3500,3504,3507,3509,3524,3528,3531,3534,3554,3558,3561,3565,3568,3571,3573,3577,3581,3584,3593,3596,3600,3628,3631,3646,3650,3653,3657,3660,3664,3667,3669,3673,3676,3680,3683,3686,3719,3723,3726,3729,3749,3753,3756,3760,3763,3783,3787,3790,3794,3797,3800,3815,3817,3821,3825,3828,3832,3835,3860,3864,3892,3895,3898,3928,3932,3935,3939,3968,3970,3974,3978,3981,3984,3999,4003,4006,4036,4039,4064,4068,4093,4096,4098,4101,4432,4434,4437,4441,4568,4572,4639,4643,4721,4723,4726,4731],[10,11,13],"h1",{"id":12},"chap-11-io-management-and-disk-scheduling","Chap 11. I\u002FO Management and Disk Scheduling",[15,16,18],"h2",{"id":17},"_0-本章总线索","0. 本章总线索",[20,21,22],"p",{},"这一章的核心不是“会背设备名”，而是理解：",[20,24,25],{},[26,27,28],"strong",{},"外设很慢、种类很多 → 操作系统要统一管理 I\u002FO → 用中断\u002FDMA\u002F通道减少 CPU 等待 → 用缓冲和缓存提高效率 → 用磁盘调度和 RAID 改善磁盘性能。",[20,30,31],{},"可以按这条线记：",[33,34,39],"pre",{"className":35,"code":36,"language":37,"meta":38,"style":38},"language-md shiki shiki-themes github-light github-dark","I\u002FO 设备差异\n→ I\u002FO 控制方式：轮询 \u002F 中断 \u002F DMA \u002F 通道\n→ OS 如何抽象和管理 I\u002FO\n→ 缓冲技术：单缓冲 \u002F 双缓冲 \u002F 循环缓冲\n→ 磁盘性能：寻道 + 旋转延迟 + 传输时间\n→ 磁盘调度：FIFO \u002F SSTF \u002F SCAN \u002F C-SCAN \u002F N-step-SCAN \u002F FSCAN\n→ RAID：用多个磁盘提高性能和可靠性\n→ Disk Cache：用内存缓存磁盘块\n→ UNIX \u002F Linux \u002F Windows 的 I\u002FO 实现\n","md","",[40,41,42,51,57,63,69,75,81,87,93],"code",{"__ignoreMap":38},[43,44,47],"span",{"class":45,"line":46},"line",1,[43,48,50],{"class":49},"sVt8B","I\u002FO 设备差异\n",[43,52,54],{"class":45,"line":53},2,[43,55,56],{"class":49},"→ I\u002FO 控制方式：轮询 \u002F 中断 \u002F DMA \u002F 通道\n",[43,58,60],{"class":45,"line":59},3,[43,61,62],{"class":49},"→ OS 如何抽象和管理 I\u002FO\n",[43,64,66],{"class":45,"line":65},4,[43,67,68],{"class":49},"→ 缓冲技术：单缓冲 \u002F 双缓冲 \u002F 循环缓冲\n",[43,70,72],{"class":45,"line":71},5,[43,73,74],{"class":49},"→ 磁盘性能：寻道 + 旋转延迟 + 传输时间\n",[43,76,78],{"class":45,"line":77},6,[43,79,80],{"class":49},"→ 磁盘调度：FIFO \u002F SSTF \u002F SCAN \u002F C-SCAN \u002F N-step-SCAN \u002F FSCAN\n",[43,82,84],{"class":45,"line":83},7,[43,85,86],{"class":49},"→ RAID：用多个磁盘提高性能和可靠性\n",[43,88,90],{"class":45,"line":89},8,[43,91,92],{"class":49},"→ Disk Cache：用内存缓存磁盘块\n",[43,94,96],{"class":45,"line":95},9,[43,97,98],{"class":49},"→ UNIX \u002F Linux \u002F Windows 的 I\u002FO 实现\n",[100,101],"hr",{},[10,103,105],{"id":104},"_111-io-devices","11.1 I\u002FO Devices",[15,107,109],{"id":108},"_1-io-设备的三大类","1. I\u002FO 设备的三大类",[20,111,112],{},"教材把外部 I\u002FO 设备分为三类，课件也采用同样分类：",[114,115,116,132],"table",{},[117,118,119],"thead",{},[120,121,122,126,129],"tr",{},[123,124,125],"th",{},"类型",[123,127,128],{},"含义",[123,130,131],{},"例子",[133,134,135,147,158],"tbody",{},[120,136,137,141,144],{},[138,139,140],"td",{},"Human readable",[138,142,143],{},"面向用户，人能直接读写",[138,145,146],{},"显示器、键盘、鼠标、打印机、终端",[120,148,149,152,155],{},[138,150,151],{},"Machine readable",[138,153,154],{},"面向机器或电子设备",[138,156,157],{},"磁盘、USB、传感器、控制器、执行器",[120,159,160,163,166],{},[138,161,162],{},"Communication",[138,164,165],{},"面向远程通信",[138,167,168],{},"调制解调器、数字线路驱动器、网络通信设备",[15,170,172],{"id":171},"_2-io-设备差异","2. I\u002FO 设备差异",[20,174,175],{},"不同 I\u002FO 设备差异很大，所以 OS 很难用一种完全统一的方式管理所有设备。重点记 6 个差异：",[114,177,178,188],{},[117,179,180],{},[120,181,182,185],{},[123,183,184],{},"差异",[123,186,187],{},"解释",[133,189,190,198,206,214,222,230],{},[120,191,192,195],{},[138,193,194],{},"Data rate 数据率",[138,196,197],{},"键盘、磁盘、网络、内存速度差距巨大",[120,199,200,203],{},[138,201,202],{},"Application 应用场景",[138,204,205],{},"同一个磁盘用于文件系统、虚拟内存交换区时，管理策略不同",[120,207,208,211],{},[138,209,210],{},"Complexity of control 控制复杂度",[138,212,213],{},"打印机简单，磁盘控制复杂",[120,215,216,219],{},[138,217,218],{},"Unit of transfer 传输单位",[138,220,221],{},"字节流或块",[120,223,224,227],{},[138,225,226],{},"Data representation 数据表示",[138,228,229],{},"字符编码、校验位、数据格式可能不同",[120,231,232,235],{},[138,233,234],{},"Error conditions 错误条件",[138,236,237],{},"不同设备错误类型、报告方式、恢复方式不同",[15,239,241],{"id":240},"_3-课件补充io-系统与-io-操作","3. 课件补充：I\u002FO 系统与 I\u002FO 操作",[20,243,244],{},"课件给出的中文定义也要背：",[20,246,247,250,251,254],{},[26,248,249],{},"I\u002FO 系统","：I\u002FO 设备及其接口线路、控制部件、通道和管理软件的总称。\n",[26,252,253],{},"I\u002FO 操作","：计算机内存和外围设备介质之间的信息传送操作。",[15,256,258],{"id":257},"_4-字符设备与块设备","4. 字符设备与块设备",[114,260,261,275],{},[117,262,263],{},[120,264,265,267,270,273],{},[123,266,125],{},[123,268,269],{},"传输单位",[123,271,272],{},"特点",[123,274,131],{},[133,276,277,291],{},[120,278,279,282,285,288],{},[138,280,281],{},"字符设备 Character device",[138,283,284],{},"字节 \u002F 字符",[138,286,287],{},"按字符流传输，无固定块结构",[138,289,290],{},"键盘、鼠标、终端、打印机",[120,292,293,296,299,302],{},[138,294,295],{},"块设备 Block device",[138,297,298],{},"数据块",[138,300,301],{},"以固定大小块传输，可按块号访问",[138,303,304],{},"磁盘、USB、SSD",[20,306,307],{},"课件还强调：输入型、输出型外围设备一般是字符设备；存储型外围设备一般是块设备。",[15,309,311],{"id":310},"_5-顺序存取与直接存取","5. 顺序存取与直接存取",[114,313,314,324],{},[117,315,316],{},[120,317,318,320,322],{},[123,319,125],{},[123,321,272],{},[123,323,131],{},[133,325,326,337],{},[120,327,328,331,334],{},[138,329,330],{},"顺序存取 Sequential access",[138,332,333],{},"依赖物理顺序，访问后面的数据必须经过前面的数据",[138,335,336],{},"磁带",[120,338,339,342,345],{},[138,340,341],{},"直接存取 Direct access",[138,343,344],{},"可以直接定位到某个物理块",[138,346,347],{},"磁盘",[100,349],{},[10,351,353],{"id":352},"_112-organization-of-the-io-function","11.2 Organization of the I\u002FO Function",[15,355,357],{"id":356},"_1-三种基本-io-技术","1. 三种基本 I\u002FO 技术",[20,359,360],{},"教材和课件都强调三种 I\u002FO 执行方式：Programmed I\u002FO、Interrupt-driven I\u002FO、DMA。",[114,362,363,379],{},[117,364,365],{},[120,366,367,370,373,376],{},[123,368,369],{},"技术",[123,371,372],{},"CPU 做什么",[123,374,375],{},"优点",[123,377,378],{},"缺点",[133,380,381,395,409],{},[120,382,383,386,389,392],{},[138,384,385],{},"Programmed I\u002FO 程序控制 I\u002FO \u002F 轮询",[138,387,388],{},"CPU 发出 I\u002FO 命令后不断检查设备状态",[138,390,391],{},"简单",[138,393,394],{},"CPU 忙等，浪费处理器时间",[120,396,397,400,403,406],{},[138,398,399],{},"Interrupt-driven I\u002FO 中断驱动 I\u002FO",[138,401,402],{},"CPU 发出命令后继续执行，设备完成后中断 CPU",[138,404,405],{},"CPU 不必一直等",[138,407,408],{},"每次中断有开销",[120,410,411,414,417,420],{},[138,412,413],{},"DMA 直接存储器访问",[138,415,416],{},"DMA 模块负责内存与 I\u002FO 模块之间的数据块传输",[138,418,419],{},"CPU 只参与开始和结束",[138,421,422],{},"需要 DMA 控制器，占用总线周期",[15,424,426],{"id":425},"_2-轮询方式-programmed-io-polling","2. 轮询方式 Programmed I\u002FO \u002F Polling",[20,428,429,430,433],{},"课件中文叫",[26,431,432],{},"轮询方式","：",[20,435,436],{},"CPU 反复查询设备控制器的状态位，判断设备是否就绪。\n基本过程：",[33,438,440],{"className":35,"code":439,"language":37,"meta":38,"style":38},"查询设备状态\n→ 如果未就绪，继续查询\n→ 如果就绪，执行读\u002F写\n→ 再查询下一个设备\n",[40,441,442,447,452,457],{"__ignoreMap":38},[43,443,444],{"class":45,"line":46},[43,445,446],{"class":49},"查询设备状态\n",[43,448,449],{"class":45,"line":53},[43,450,451],{"class":49},"→ 如果未就绪，继续查询\n",[43,453,454],{"class":45,"line":59},[43,455,456],{"class":49},"→ 如果就绪，执行读\u002F写\n",[43,458,459],{"class":45,"line":65},[43,460,461],{"class":49},"→ 再查询下一个设备\n",[20,463,464],{},"缺点很明显：CPU 会被查询过程拖住，设备慢时效率很低。",[15,466,468],{"id":467},"_3-中断方式-interrupt-driven-io","3. 中断方式 Interrupt-driven I\u002FO",[20,470,471],{},"中断方式下，CPU 启动 I\u002FO 后可以去执行别的程序。设备完成后，通过中断请求线通知 CPU。课件强调：设备控制器执行 I\u002FO 操作，完成后发出 I\u002FO 中断信号，CPU 转去执行中断处理程序，再恢复原进程。",[20,473,474],{},"重点理解：",[33,476,478],{"className":35,"code":477,"language":37,"meta":38,"style":38},"CPU 启动 I\u002FO\n→ 设备自己工作\n→ CPU 执行其他任务\n→ 设备完成，发中断\n→ CPU 执行中断处理程序\n→ 恢复原程序\n",[40,479,480,485,490,495,500,505],{"__ignoreMap":38},[43,481,482],{"class":45,"line":46},[43,483,484],{"class":49},"CPU 启动 I\u002FO\n",[43,486,487],{"class":45,"line":53},[43,488,489],{"class":49},"→ 设备自己工作\n",[43,491,492],{"class":45,"line":59},[43,493,494],{"class":49},"→ CPU 执行其他任务\n",[43,496,497],{"class":45,"line":65},[43,498,499],{"class":49},"→ 设备完成，发中断\n",[43,501,502],{"class":45,"line":71},[43,503,504],{"class":49},"→ CPU 执行中断处理程序\n",[43,506,507],{"class":45,"line":77},[43,508,509],{"class":49},"→ 恢复原程序\n",[20,511,512],{},"优点：减少 CPU 空等。\n缺点：如果每传一个字节就中断一次，中断开销会很大。",[15,514,516],{"id":515},"_4-dma-方式","4. DMA 方式",[20,518,519,520],{},"DMA 的核心是：",[26,521,522],{},"设备和内存之间直接传输数据块，不经过 CPU 逐字节搬运。",[20,524,525],{},"CPU 给 DMA 模块的信息包括：读\u002F写类型、I\u002FO 设备地址、内存起始地址、传输字数。之后 DMA 负责搬运整个数据块，完成后再中断 CPU。课件还列出 DMA 需要的硬件：内存地址寄存器、字计数器、数据缓冲寄存器或缓冲区、设备地址寄存器、中断机制和控制逻辑。",[20,527,528],{},"DMA 的关键点：",[33,530,532],{"className":35,"code":531,"language":37,"meta":38,"style":38},"CPU：只负责发起请求和处理完成中断\nDMA：负责实际数据传输\n设备 ↔ DMA ↔ 内存\n",[40,533,534,539,544],{"__ignoreMap":38},[43,535,536],{"class":45,"line":46},[43,537,538],{"class":49},"CPU：只负责发起请求和处理完成中断\n",[43,540,541],{"class":45,"line":53},[43,542,543],{"class":49},"DMA：负责实际数据传输\n",[43,545,546],{"class":45,"line":59},[43,547,548],{"class":49},"设备 ↔ DMA ↔ 内存\n",[15,550,552],{"id":551},"_5-周期窃用-cycle-stealing","5. 周期窃用 Cycle Stealing",[20,554,555,556,559],{},"课件提到：当 DMA 和 CPU 同时要访问内存总线时，CPU 会把总线让给 DMA，这叫",[26,557,558],{},"周期窃用","。这样 DMA 能完成设备和内存之间的数据交换，但会占用一些总线周期。",[15,561,563],{"id":562},"_6-通道方式-io-channel","6. 通道方式 I\u002FO Channel",[20,565,566,567,570],{},"通道方式比 DMA 更进一步。DMA 只是搬数据，而",[26,568,569],{},"通道像一个专门的 I\u002FO 小处理器","，能执行 I\u002FO 程序。CPU 启动通道后，通道控制设备完成 I\u002FO，CPU 可以继续执行其他任务，直到通道发出完成中断。",[20,572,573],{},"通道方式的意义：",[33,575,577],{"className":35,"code":576,"language":37,"meta":38,"style":38},"CPU 和外设并行程度更高\nI\u002FO 控制更独立\n适合管理大量、复杂、多类型设备\n",[40,578,579,584,589],{"__ignoreMap":38},[43,580,581],{"class":45,"line":46},[43,582,583],{"class":49},"CPU 和外设并行程度更高\n",[43,585,586],{"class":45,"line":53},[43,587,588],{"class":49},"I\u002FO 控制更独立\n",[43,590,591],{"class":45,"line":59},[43,592,593],{"class":49},"适合管理大量、复杂、多类型设备\n",[15,595,597],{"id":596},"_7-io-功能的发展阶段","7. I\u002FO 功能的发展阶段",[20,599,600],{},"教材列出 I\u002FO 功能从简单到复杂的 6 个阶段：",[33,602,604],{"className":35,"code":603,"language":37,"meta":38,"style":38},"1. CPU 直接控制外设\n2. 加入控制器 \u002F I\u002FO 模块，使用程序控制 I\u002FO\n3. 加入中断，CPU 不必忙等\n4. 使用 DMA，I\u002FO 模块可直接访问内存\n5. I\u002FO 模块发展成 I\u002FO Channel，可执行专门 I\u002FO 指令\n6. I\u002FO 模块有自己的局部内存，成为 I\u002FO Processor\n",[40,605,606,615,623,631,639,647],{"__ignoreMap":38},[43,607,608,612],{"class":45,"line":46},[43,609,611],{"class":610},"s4XuR","1.",[43,613,614],{"class":49}," CPU 直接控制外设\n",[43,616,617,620],{"class":45,"line":53},[43,618,619],{"class":610},"2.",[43,621,622],{"class":49}," 加入控制器 \u002F I\u002FO 模块，使用程序控制 I\u002FO\n",[43,624,625,628],{"class":45,"line":59},[43,626,627],{"class":610},"3.",[43,629,630],{"class":49}," 加入中断，CPU 不必忙等\n",[43,632,633,636],{"class":45,"line":65},[43,634,635],{"class":610},"4.",[43,637,638],{"class":49}," 使用 DMA，I\u002FO 模块可直接访问内存\n",[43,640,641,644],{"class":45,"line":71},[43,642,643],{"class":610},"5.",[43,645,646],{"class":49}," I\u002FO 模块发展成 I\u002FO Channel，可执行专门 I\u002FO 指令\n",[43,648,649,652],{"class":45,"line":77},[43,650,651],{"class":610},"6.",[43,653,654],{"class":49}," I\u002FO 模块有自己的局部内存，成为 I\u002FO Processor\n",[20,656,657,658],{},"一句话总结：",[26,659,660],{},"越往后，CPU 参与越少，I\u002FO 独立性越强，系统并行性越高。",[100,662],{},[10,664,666],{"id":665},"_113-operating-system-design-issues","11.3 Operating System Design Issues",[15,668,670],{"id":669},"_1-两个设计目标efficiency-与-generality","1. 两个设计目标：Efficiency 与 Generality",[20,672,673,674,677,678,681],{},"教材和课件都强调 I\u002FO 系统设计的两个目标：",[26,675,676],{},"效率","和",[26,679,680],{},"通用性","。",[114,683,684,693],{},[117,685,686],{},[120,687,688,691],{},[123,689,690],{},"目标",[123,692,128],{},[133,694,695,703],{},[120,696,697,700],{},[138,698,699],{},"Efficiency 效率",[138,701,702],{},"I\u002FO 很容易成为瓶颈，尤其磁盘 I\u002FO，所以要减少等待、提高并行",[120,704,705,708],{},[138,706,707],{},"Generality 通用性",[138,709,710],{},"希望用统一方式管理各种设备，例如 read、write、open、close",[20,712,713,714,717],{},"难点在于：设备差异太大，所以不能完全统一，只能通过",[26,715,716],{},"层次化、模块化设计","隐藏底层差异。",[15,719,721],{"id":720},"_2-io-层次结构","2. I\u002FO 层次结构",[20,723,724],{},"教材提出 I\u002FO 功能应该分层：低层处理硬件细节，高层提供通用接口。这样硬件变化不会影响大部分 I\u002FO 软件。",[20,726,727],{},"对简单本地外设，通常有三层：",[114,729,730,740],{},[117,731,732],{},[120,733,734,737],{},[123,735,736],{},"层次",[123,738,739],{},"作用",[133,741,742,750,758],{},[120,743,744,747],{},[138,745,746],{},"Logical I\u002FO 逻辑 I\u002FO",[138,748,749],{},"把设备看作逻辑资源，提供 open、close、read、write 等接口",[120,751,752,755],{},[138,753,754],{},"Device I\u002FO 设备 I\u002FO",[138,756,757],{},"把逻辑请求转换为 I\u002FO 指令、通道命令、控制器命令",[120,759,760,763],{},[138,761,762],{},"Scheduling and Control 调度与控制",[138,764,765],{},"排队、调度、处理中断、收集状态，直接和硬件交互",[20,767,768],{},"对通信设备，逻辑 I\u002FO 层可能被通信协议结构替代，例如 TCP\u002FIP。\n对文件系统支持的二级存储，还要加：",[33,770,772],{"className":35,"code":771,"language":37,"meta":38,"style":38},"Directory management 目录管理\nFile system 文件系统\nPhysical organization 物理组织\n",[40,773,774,779,784],{"__ignoreMap":38},[43,775,776],{"class":45,"line":46},[43,777,778],{"class":49},"Directory management 目录管理\n",[43,780,781],{"class":45,"line":53},[43,782,783],{"class":49},"File system 文件系统\n",[43,785,786],{"class":45,"line":59},[43,787,788],{"class":49},"Physical organization 物理组织\n",[15,790,792],{"id":791},"_3-设备独立性-device-independence","3. 设备独立性 Device Independence",[20,794,795,796,681],{},"课件补充了一个考试常考点：",[26,797,798],{},"设备独立性",[20,800,801],{},"设备独立性指：用户程序不直接指定物理设备，而是使用逻辑设备名；系统再把逻辑设备映射到具体物理设备。这样程序不依赖某台具体设备。",[20,803,804],{},"优点：",[33,806,808],{"className":35,"code":807,"language":37,"meta":38,"style":38},"用户程序与具体物理设备解耦\n系统增加、更换设备时，程序不必修改\n设备故障时可以切换到其他物理设备\n提高设备分配灵活性\n",[40,809,810,815,820,825],{"__ignoreMap":38},[43,811,812],{"class":45,"line":46},[43,813,814],{"class":49},"用户程序与具体物理设备解耦\n",[43,816,817],{"class":45,"line":53},[43,818,819],{"class":49},"系统增加、更换设备时，程序不必修改\n",[43,821,822],{"class":45,"line":59},[43,823,824],{"class":49},"设备故障时可以切换到其他物理设备\n",[43,826,827],{"class":45,"line":65},[43,828,829],{"class":49},"提高设备分配灵活性\n",[20,831,832,833,836],{},"逻辑设备名到物理设备名的映射通过 ",[26,834,835],{},"LUT，Logical Unit Table，逻辑设备表"," 实现。单用户系统可以全系统一张 LUT；多用户系统可以每个用户一张 LUT，允许不同用户使用相同逻辑设备名。",[15,838,840],{"id":839},"_4-设备分配","4. 设备分配",[20,842,843],{},"课件按设备特性把设备分为三类：",[114,845,846,857],{},[117,847,848],{},[120,849,850,852,854],{},[123,851,125],{},[123,853,128],{},[123,855,856],{},"管理方式",[133,858,859,870,881],{},[120,860,861,864,867],{},[138,862,863],{},"独占设备",[138,865,866],{},"一段时间只能给一个进程用",[138,868,869],{},"独占分配",[120,871,872,875,878],{},[138,873,874],{},"共享设备",[138,876,877],{},"可被多个进程共享",[138,879,880],{},"共享分配",[120,882,883,886,889],{},[138,884,885],{},"虚拟设备",[138,887,888],{},"通过软件把独占设备改造成可共享效果",[138,890,891],{},"虚拟分配，例如 SPOOLING",[20,893,894],{},"常用分配算法：",[33,896,898],{"className":35,"code":897,"language":37,"meta":38,"style":38},"先请求先服务 FCFS\n优先级高者先服务\n",[40,899,900,905],{"__ignoreMap":38},[43,901,902],{"class":45,"line":46},[43,903,904],{"class":49},"先请求先服务 FCFS\n",[43,906,907],{"class":45,"line":53},[43,908,909],{"class":49},"优先级高者先服务\n",[20,911,912],{},"还要注意：多进程申请设备时可能发生死锁，所以需要安全性检查。",[15,914,916],{"id":915},"_5-设备分配的数据结构","5. 设备分配的数据结构",[20,918,919],{},"课件列出几个关键表：",[114,921,922,934],{},[117,923,924],{},[120,925,926,929,932],{},[123,927,928],{},"数据结构",[123,930,931],{},"全称",[123,933,739],{},[133,935,936,947,958,969],{},[120,937,938,941,944],{},[138,939,940],{},"DCT",[138,942,943],{},"Device Control Table",[138,945,946],{},"每个设备一张，记录设备类型、地址、状态、等待队列、控制器指针等",[120,948,949,952,955],{},[138,950,951],{},"SDT",[138,953,954],{},"System Device Table",[138,956,957],{},"全系统一张，记录所有物理设备",[120,959,960,963,966],{},[138,961,962],{},"COCT",[138,964,965],{},"Controller Control Table",[138,967,968],{},"每个控制器一张，记录控制器状态和连接情况",[120,970,971,974,977],{},[138,972,973],{},"CHCT",[138,975,976],{},"Channel Control Table",[138,978,979],{},"每个通道一张，只在通道方式系统中存在",[20,981,982],{},"一个进程要真正执行 I\u002FO，通常需要获得：",[33,984,986],{"className":35,"code":985,"language":37,"meta":38,"style":38},"设备 Device\n\n- 控制器 Controller\n- 通道 Channel\n",[40,987,988,993,999,1007],{"__ignoreMap":38},[43,989,990],{"class":45,"line":46},[43,991,992],{"class":49},"设备 Device\n",[43,994,995],{"class":45,"line":53},[43,996,998],{"emptyLinePlaceholder":997},true,"\n",[43,1000,1001,1004],{"class":45,"line":59},[43,1002,1003],{"class":610},"-",[43,1005,1006],{"class":49}," 控制器 Controller\n",[43,1008,1009,1011],{"class":45,"line":65},[43,1010,1003],{"class":610},[43,1012,1013],{"class":49}," 通道 Channel\n",[20,1015,1016],{},"三者都具备后，才有进行 I\u002FO 的物理条件。",[100,1018],{},[10,1020,1022],{"id":1021},"_114-io-buffering","11.4 I\u002FO Buffering",[15,1024,1026],{"id":1025},"_1-缓冲的目的","1. 缓冲的目的",[20,1028,1029,1030],{},"缓冲技术的本质：",[26,1031,1032],{},"在内存中开辟缓冲区，让 CPU、内存、设备之间速度不匹配的问题变小。",[20,1034,1035],{},"课件给出的目的很重要：",[33,1037,1039],{"className":35,"code":1038,"language":37,"meta":38,"style":38},"改善 CPU 与外设速度不匹配\n协调逻辑记录大小和物理记录大小不一致\n提高 CPU 与 I\u002FO 设备的并行性\n",[40,1040,1041,1046,1051],{"__ignoreMap":38},[43,1042,1043],{"class":45,"line":46},[43,1044,1045],{"class":49},"改善 CPU 与外设速度不匹配\n",[43,1047,1048],{"class":45,"line":53},[43,1049,1050],{"class":49},"协调逻辑记录大小和物理记录大小不一致\n",[43,1052,1053],{"class":45,"line":59},[43,1054,1055],{"class":49},"提高 CPU 与 I\u002FO 设备的并行性\n",[20,1057,1058],{},"教材也强调，缓冲可以提前执行输入传输，或延后执行输出传输，从而改善系统性能。",[15,1060,1062],{"id":1061},"_2-block-oriented-与-stream-oriented","2. Block-oriented 与 Stream-oriented",[114,1064,1065,1075],{},[117,1066,1067],{},[120,1068,1069,1071,1073],{},[123,1070,125],{},[123,1072,272],{},[123,1074,131],{},[133,1076,1077,1088],{},[120,1078,1079,1082,1085],{},[138,1080,1081],{},"Block-oriented device",[138,1083,1084],{},"固定大小块，一次传一块，可按块号访问",[138,1086,1087],{},"磁盘、USB",[120,1089,1090,1093,1096],{},[138,1091,1092],{},"Stream-oriented device",[138,1094,1095],{},"字节流，没有固定块结构",[138,1097,1098],{},"终端、打印机、鼠标、通信端口",[15,1100,1102],{"id":1101},"_3-无缓冲-no-buffer","3. 无缓冲 No Buffer",[20,1104,1105],{},"无缓冲时，OS 直接访问设备。\n问题：",[33,1107,1109],{"className":35,"code":1108,"language":37,"meta":38,"style":38},"进程容易被 I\u002FO 阻塞\n设备慢，CPU 等待时间长\n进程 I\u002FO 期间可能不能被换出\n",[40,1110,1111,1116,1121],{"__ignoreMap":38},[43,1112,1113],{"class":45,"line":46},[43,1114,1115],{"class":49},"进程容易被 I\u002FO 阻塞\n",[43,1117,1118],{"class":45,"line":53},[43,1119,1120],{"class":49},"设备慢，CPU 等待时间长\n",[43,1122,1123],{"class":45,"line":59},[43,1124,1125],{"class":49},"进程 I\u002FO 期间可能不能被换出\n",[15,1127,1129],{"id":1128},"_4-单缓冲-single-buffer","4. 单缓冲 Single Buffer",[20,1131,1132],{},"单缓冲：OS 为一次 I\u002FO 请求分配一个系统缓冲区。块设备输入时，数据先进入系统缓冲区，再复制到用户空间；同时可以预读下一块。",[20,1134,1135],{},"设：",[33,1137,1139],{"className":35,"code":1138,"language":37,"meta":38,"style":38},"T = 输入一块数据所需时间\nC = 两次输入请求之间的计算时间\nM = 系统缓冲区到用户内存的数据移动时间\n",[40,1140,1141,1146,1151],{"__ignoreMap":38},[43,1142,1143],{"class":45,"line":46},[43,1144,1145],{"class":49},"T = 输入一块数据所需时间\n",[43,1147,1148],{"class":45,"line":53},[43,1149,1150],{"class":49},"C = 两次输入请求之间的计算时间\n",[43,1152,1153],{"class":45,"line":59},[43,1154,1155],{"class":49},"M = 系统缓冲区到用户内存的数据移动时间\n",[20,1157,1158],{},"无缓冲每块大约：",[20,1160,1161],{},[43,1162,1165,1195],{"className":1163},[1164],"katex",[43,1166,1169],{"className":1167},[1168],"katex-mathml",[1170,1171,1173],"math",{"xmlns":1172},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[1174,1175,1176,1190],"semantics",{},[1177,1178,1179,1183,1187],"mrow",{},[1180,1181,1182],"mi",{},"T",[1184,1185,1186],"mo",{},"+",[1180,1188,1189],{},"C",[1191,1192,1194],"annotation",{"encoding":1193},"application\u002Fx-tex","T + C",[43,1196,1200,1227],{"className":1197,"ariaHidden":1199},[1198],"katex-html","true",[43,1201,1204,1209,1215,1220,1224],{"className":1202},[1203],"base",[43,1205],{"className":1206,"style":1208},[1207],"strut","height:0.7667em;vertical-align:-0.0833em;",[43,1210,1182],{"className":1211,"style":1214},[1212,1213],"mord","mathnormal","margin-right:0.1389em;",[43,1216],{"className":1217,"style":1219},[1218],"mspace","margin-right:0.2222em;",[43,1221,1186],{"className":1222},[1223],"mbin",[43,1225],{"className":1226,"style":1219},[1218],[43,1228,1230,1234],{"className":1229},[1203],[43,1231],{"className":1232,"style":1233},[1207],"height:0.6833em;",[43,1235,1189],{"className":1236,"style":1237},[1212,1213],"margin-right:0.0715em;",[20,1239,1240],{},"单缓冲每块大约：",[20,1242,1243],{},[43,1244,1246,1283],{"className":1245},[1164],[43,1247,1249],{"className":1248},[1168],[1170,1250,1251],{"xmlns":1172},[1174,1252,1253,1280],{},[1177,1254,1255,1258,1261,1265,1267,1270,1272,1275,1277],{},[1180,1256,1257],{},"max",[1184,1259,1260],{},"⁡",[1184,1262,1264],{"stretchy":1263},"false","(",[1180,1266,1189],{},[1184,1268,1269],{"separator":1199},",",[1180,1271,1182],{},[1184,1273,1274],{"stretchy":1263},")",[1184,1276,1186],{},[1180,1278,1279],{},"M",[1191,1281,1282],{"encoding":1193},"\\max(C, T) + M",[43,1284,1286,1328],{"className":1285,"ariaHidden":1199},[1198],[43,1287,1289,1293,1297,1301,1304,1308,1312,1315,1319,1322,1325],{"className":1288},[1203],[43,1290],{"className":1291,"style":1292},[1207],"height:1em;vertical-align:-0.25em;",[43,1294,1257],{"className":1295},[1296],"mop",[43,1298,1264],{"className":1299},[1300],"mopen",[43,1302,1189],{"className":1303,"style":1237},[1212,1213],[43,1305,1269],{"className":1306},[1307],"mpunct",[43,1309],{"className":1310,"style":1311},[1218],"margin-right:0.1667em;",[43,1313,1182],{"className":1314,"style":1214},[1212,1213],[43,1316,1274],{"className":1317},[1318],"mclose",[43,1320],{"className":1321,"style":1219},[1218],[43,1323,1186],{"className":1324},[1223],[43,1326],{"className":1327,"style":1219},[1218],[43,1329,1331,1334],{"className":1330},[1203],[43,1332],{"className":1333,"style":1233},[1207],[43,1335,1279],{"className":1336,"style":1337},[1212,1213],"margin-right:0.109em;",[20,1339,1340],{},"所以单缓冲通常比无缓冲快。",[20,1342,1343],{},"缺点：",[33,1345,1347],{"className":35,"code":1346,"language":37,"meta":38,"style":38},"OS 缓冲区管理更复杂\n换入换出逻辑更复杂\n如果 I\u002FO 设备和交换区在同一磁盘上，调度更麻烦\n",[40,1348,1349,1354,1359],{"__ignoreMap":38},[43,1350,1351],{"class":45,"line":46},[43,1352,1353],{"class":49},"OS 缓冲区管理更复杂\n",[43,1355,1356],{"class":45,"line":53},[43,1357,1358],{"class":49},"换入换出逻辑更复杂\n",[43,1360,1361],{"class":45,"line":59},[43,1362,1363],{"class":49},"如果 I\u002FO 设备和交换区在同一磁盘上，调度更麻烦\n",[15,1365,1367],{"id":1366},"_5-面向流设备的单缓冲","5. 面向流设备的单缓冲",[114,1369,1370,1380],{},[117,1371,1372],{},[120,1373,1374,1377],{},[123,1375,1376],{},"方式",[123,1378,1379],{},"场景",[133,1381,1382,1390],{},[120,1383,1384,1387],{},[138,1385,1386],{},"Line-at-a-time",[138,1388,1389],{},"终端一行一行输入，回车表示一行结束",[120,1391,1392,1395],{},[138,1393,1394],{},"Byte-at-a-time",[138,1396,1397],{},"每个按键都有意义，例如交互式终端、传感器、控制器",[20,1399,1400],{},"Byte-at-a-time 本质上很像生产者—消费者模型。",[15,1402,1404],{"id":1403},"_6-双缓冲-double-buffer","6. 双缓冲 Double Buffer",[20,1406,1407,1408,681],{},"双缓冲：使用两个系统缓冲区。进程处理一个缓冲区时，OS 或设备可以填充\u002F清空另一个缓冲区。也叫 ",[26,1409,1410],{},"buffer swapping",[20,1412,1413],{},"直观理解：",[33,1415,1417],{"className":35,"code":1416,"language":37,"meta":38,"style":38},"缓冲区 1：交给进程处理\n缓冲区 2：同时由设备填充\n处理完后交换角色\n",[40,1418,1419,1424,1429],{"__ignoreMap":38},[43,1420,1421],{"class":45,"line":46},[43,1422,1423],{"class":49},"缓冲区 1：交给进程处理\n",[43,1425,1426],{"class":45,"line":53},[43,1427,1428],{"class":49},"缓冲区 2：同时由设备填充\n",[43,1430,1431],{"class":45,"line":59},[43,1432,1433],{"class":49},"处理完后交换角色\n",[20,1435,1436],{},"块设备双缓冲时间大致接近：",[20,1438,1439],{},[43,1440,1442,1468],{"className":1441},[1164],[43,1443,1445],{"className":1444},[1168],[1170,1446,1447],{"xmlns":1172},[1174,1448,1449,1465],{},[1177,1450,1451,1453,1455,1457,1459,1461,1463],{},[1180,1452,1257],{},[1184,1454,1260],{},[1184,1456,1264],{"stretchy":1263},[1180,1458,1189],{},[1184,1460,1269],{"separator":1199},[1180,1462,1182],{},[1184,1464,1274],{"stretchy":1263},[1191,1466,1467],{"encoding":1193},"\\max(C, T)",[43,1469,1471],{"className":1470,"ariaHidden":1199},[1198],[43,1472,1474,1477,1480,1483,1486,1489,1492,1495],{"className":1473},[1203],[43,1475],{"className":1476,"style":1292},[1207],[43,1478,1257],{"className":1479},[1296],[43,1481,1264],{"className":1482},[1300],[43,1484,1189],{"className":1485,"style":1237},[1212,1213],[43,1487,1269],{"className":1488},[1307],[43,1490],{"className":1491,"style":1311},[1218],[43,1493,1182],{"className":1494,"style":1214},[1212,1213],[43,1496,1274],{"className":1497},[1318],[20,1499,1500],{},"课件还补充了两种情况：",[33,1502,1504],{"className":35,"code":1503,"language":37,"meta":38,"style":38},"若 C \u003C T，且 M \u003C\u003C T，则一块数据处理时间约为 T，可保证设备连续工作。\n若 C > T，且 M \u003C\u003C T，则一块数据处理时间约为 C + M，可保证进程不必等待 I\u002FO。\n",[40,1505,1506,1511],{"__ignoreMap":38},[43,1507,1508],{"class":45,"line":46},[43,1509,1510],{"class":49},"若 C \u003C T，且 M \u003C\u003C T，则一块数据处理时间约为 T，可保证设备连续工作。\n",[43,1512,1513],{"class":45,"line":53},[43,1514,1515],{"class":49},"若 C > T，且 M \u003C\u003C T，则一块数据处理时间约为 C + M，可保证进程不必等待 I\u002FO。\n",[15,1517,1519],{"id":1518},"_7-循环缓冲-circular-buffer","7. 循环缓冲 Circular Buffer",[20,1521,1522],{},"如果两个缓冲区还不够，就使用多个缓冲区组成循环队列。每个缓冲区是循环缓冲中的一个单元。它本质上就是有限缓冲区的生产者—消费者模型。",[20,1524,1525],{},"适用场景：",[33,1527,1529],{"className":35,"code":1528,"language":37,"meta":38,"style":38},"进程有突发 I\u002FO\n设备和进程速度波动较大\n需要平滑 I\u002FO 峰值\n",[40,1530,1531,1536,1541],{"__ignoreMap":38},[43,1532,1533],{"class":45,"line":46},[43,1534,1535],{"class":49},"进程有突发 I\u002FO\n",[43,1537,1538],{"class":45,"line":53},[43,1539,1540],{"class":49},"设备和进程速度波动较大\n",[43,1542,1543],{"class":45,"line":59},[43,1544,1545],{"class":49},"需要平滑 I\u002FO 峰值\n",[15,1547,1549],{"id":1548},"_8-缓冲的局限","8. 缓冲的局限",[20,1551,1552],{},"缓冲只能平滑短期峰值。\n如果进程长期平均产生数据的速度大于设备处理速度，那么再多缓冲区也会被填满，进程最终还是要等待。",[100,1554],{},[10,1556,1558],{"id":1557},"_115-disk-scheduling","11.5 Disk Scheduling",[15,1560,1562],{"id":1561},"_1-为什么磁盘-io-特别重要","1. 为什么磁盘 I\u002FO 特别重要？",[20,1564,1565],{},"磁盘速度远慢于 CPU 和内存，所以磁盘 I\u002FO 很容易成为系统瓶颈。教材强调，磁盘性能对整体系统性能影响极大，因此本章花大量篇幅讨论磁盘调度、RAID、磁盘缓存。",[15,1567,1569],{"id":1568},"_2-磁盘访问时间组成","2. 磁盘访问时间组成",[20,1571,1572],{},"一次磁盘读写主要包括：",[114,1574,1575,1584],{},[117,1576,1577],{},[120,1578,1579,1582],{},[123,1580,1581],{},"时间",[123,1583,128],{},[133,1585,1586,1594,1602,1610],{},[120,1587,1588,1591],{},[138,1589,1590],{},"Seek time 寻道时间",[138,1592,1593],{},"磁头移动到目标磁道的时间",[120,1595,1596,1599],{},[138,1597,1598],{},"Rotational delay \u002F latency 旋转延迟",[138,1600,1601],{},"目标扇区旋转到磁头下方的时间",[120,1603,1604,1607],{},[138,1605,1606],{},"Transfer time 传输时间",[138,1608,1609],{},"数据真正经过磁头读写的时间",[120,1611,1612,1615],{},[138,1613,1614],{},"Queueing delay 排队延迟",[138,1616,1617],{},"请求等待设备、通道、控制器空闲的时间",[20,1619,1620],{},"访问时间：",[20,1622,1623],{},[43,1624,1626,1733],{"className":1625},[1164],[43,1627,1629],{"className":1628},[1168],[1170,1630,1631],{"xmlns":1172},[1174,1632,1633,1730],{},[1177,1634,1635,1638,1641,1643,1646,1649,1651,1655,1657,1660,1663,1665,1668,1671,1673,1675,1678,1680,1682,1684,1686,1688,1690,1693,1696,1699,1702,1704,1706,1708,1711,1713,1716,1718,1721,1723,1725,1727],{},[1180,1636,1637],{},"A",[1180,1639,1640],{},"c",[1180,1642,1640],{},[1180,1644,1645],{},"e",[1180,1647,1648],{},"s",[1180,1650,1648],{},[1652,1653,1654],"mtext",{}," ",[1180,1656,1182],{},[1180,1658,1659],{},"i",[1180,1661,1662],{},"m",[1180,1664,1645],{},[1184,1666,1667],{},"=",[1180,1669,1670],{},"S",[1180,1672,1645],{},[1180,1674,1645],{},[1180,1676,1677],{},"k",[1652,1679,1654],{},[1180,1681,1182],{},[1180,1683,1659],{},[1180,1685,1662],{},[1180,1687,1645],{},[1184,1689,1186],{},[1180,1691,1692],{},"R",[1180,1694,1695],{},"o",[1180,1697,1698],{},"t",[1180,1700,1701],{},"a",[1180,1703,1698],{},[1180,1705,1659],{},[1180,1707,1695],{},[1180,1709,1710],{},"n",[1180,1712,1701],{},[1180,1714,1715],{},"l",[1652,1717,1654],{},[1180,1719,1720],{},"D",[1180,1722,1645],{},[1180,1724,1715],{},[1180,1726,1701],{},[1180,1728,1729],{},"y",[1191,1731,1732],{"encoding":1193},"Access\\ Time = Seek\\ Time + Rotational\\ Delay",[43,1734,1736,1773,1813],{"className":1735,"ariaHidden":1199},[1198],[43,1737,1739,1742,1745,1749,1752,1755,1759,1762,1766,1770],{"className":1738},[1203],[43,1740],{"className":1741,"style":1233},[1207],[43,1743,1637],{"className":1744},[1212,1213],[43,1746,1748],{"className":1747},[1212,1213],"ccess",[43,1750,1654],{"className":1751},[1218],[43,1753,1182],{"className":1754,"style":1214},[1212,1213],[43,1756,1758],{"className":1757},[1212,1213],"im",[43,1760,1645],{"className":1761},[1212,1213],[43,1763],{"className":1764,"style":1765},[1218],"margin-right:0.2778em;",[43,1767,1667],{"className":1768},[1769],"mrel",[43,1771],{"className":1772,"style":1765},[1218],[43,1774,1776,1780,1784,1788,1792,1795,1798,1801,1804,1807,1810],{"className":1775},[1203],[43,1777],{"className":1778,"style":1779},[1207],"height:0.7778em;vertical-align:-0.0833em;",[43,1781,1670],{"className":1782,"style":1783},[1212,1213],"margin-right:0.0576em;",[43,1785,1787],{"className":1786},[1212,1213],"ee",[43,1789,1677],{"className":1790,"style":1791},[1212,1213],"margin-right:0.0315em;",[43,1793,1654],{"className":1794},[1218],[43,1796,1182],{"className":1797,"style":1214},[1212,1213],[43,1799,1758],{"className":1800},[1212,1213],[43,1802,1645],{"className":1803},[1212,1213],[43,1805],{"className":1806,"style":1219},[1218],[43,1808,1186],{"className":1809},[1223],[43,1811],{"className":1812,"style":1219},[1218],[43,1814,1816,1820,1824,1827,1830,1833,1836,1839,1842,1846,1850,1853,1857,1860,1863,1866],{"className":1815},[1203],[43,1817],{"className":1818,"style":1819},[1207],"height:0.8889em;vertical-align:-0.1944em;",[43,1821,1692],{"className":1822,"style":1823},[1212,1213],"margin-right:0.0077em;",[43,1825,1695],{"className":1826},[1212,1213],[43,1828,1698],{"className":1829},[1212,1213],[43,1831,1701],{"className":1832},[1212,1213],[43,1834,1698],{"className":1835},[1212,1213],[43,1837,1659],{"className":1838},[1212,1213],[43,1840,1695],{"className":1841},[1212,1213],[43,1843,1845],{"className":1844},[1212,1213],"na",[43,1847,1715],{"className":1848,"style":1849},[1212,1213],"margin-right:0.0197em;",[43,1851,1654],{"className":1852},[1218],[43,1854,1720],{"className":1855,"style":1856},[1212,1213],"margin-right:0.0278em;",[43,1858,1645],{"className":1859},[1212,1213],[43,1861,1715],{"className":1862,"style":1849},[1212,1213],[43,1864,1701],{"className":1865},[1212,1213],[43,1867,1729],{"className":1868,"style":1869},[1212,1213],"margin-right:0.0359em;",[20,1871,1872],{},"总平均访问时间常写成：",[20,1874,1875],{},[43,1876,1878,1936],{"className":1877},[1164],[43,1879,1881],{"className":1880},[1168],[1170,1882,1883],{"xmlns":1172},[1174,1884,1885,1933],{},[1177,1886,1887,1894,1896,1902,1904,1919,1921],{},[1888,1889,1890,1892],"msub",{},[1180,1891,1182],{},[1180,1893,1701],{},[1184,1895,1667],{},[1888,1897,1898,1900],{},[1180,1899,1182],{},[1180,1901,1648],{},[1184,1903,1186],{},[1905,1906,1907,1911],"mfrac",{},[1908,1909,1910],"mn",{},"1",[1177,1912,1913,1916],{},[1908,1914,1915],{},"2",[1180,1917,1918],{},"r",[1184,1920,1186],{},[1905,1922,1923,1926],{},[1180,1924,1925],{},"b",[1177,1927,1928,1930],{},[1180,1929,1918],{},[1180,1931,1932],{},"N",[1191,1934,1935],{"encoding":1193},"T_a = T_s + \\frac{1}{2r} + \\frac{b}{rN}",[43,1937,1939,2011,2066,2162],{"className":1938,"ariaHidden":1199},[1198],[43,1940,1942,1946,2002,2005,2008],{"className":1941},[1203],[43,1943],{"className":1944,"style":1945},[1207],"height:0.8333em;vertical-align:-0.15em;",[43,1947,1949,1952],{"className":1948},[1212],[43,1950,1182],{"className":1951,"style":1214},[1212,1213],[43,1953,1956],{"className":1954},[1955],"msupsub",[43,1957,1961,1993],{"className":1958},[1959,1960],"vlist-t","vlist-t2",[43,1962,1965,1988],{"className":1963},[1964],"vlist-r",[43,1966,1970],{"className":1967,"style":1969},[1968],"vlist","height:0.1514em;",[43,1971,1973,1978],{"style":1972},"top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;",[43,1974],{"className":1975,"style":1977},[1976],"pstrut","height:2.7em;",[43,1979,1985],{"className":1980},[1981,1982,1983,1984],"sizing","reset-size6","size3","mtight",[43,1986,1701],{"className":1987},[1212,1213,1984],[43,1989,1992],{"className":1990},[1991],"vlist-s","​",[43,1994,1996],{"className":1995},[1964],[43,1997,2000],{"className":1998,"style":1999},[1968],"height:0.15em;",[43,2001],{},[43,2003],{"className":2004,"style":1765},[1218],[43,2006,1667],{"className":2007},[1769],[43,2009],{"className":2010,"style":1765},[1218],[43,2012,2014,2017,2057,2060,2063],{"className":2013},[1203],[43,2015],{"className":2016,"style":1945},[1207],[43,2018,2020,2023],{"className":2019},[1212],[43,2021,1182],{"className":2022,"style":1214},[1212,1213],[43,2024,2026],{"className":2025},[1955],[43,2027,2029,2049],{"className":2028},[1959,1960],[43,2030,2032,2046],{"className":2031},[1964],[43,2033,2035],{"className":2034,"style":1969},[1968],[43,2036,2037,2040],{"style":1972},[43,2038],{"className":2039,"style":1977},[1976],[43,2041,2043],{"className":2042},[1981,1982,1983,1984],[43,2044,1648],{"className":2045},[1212,1213,1984],[43,2047,1992],{"className":2048},[1991],[43,2050,2052],{"className":2051},[1964],[43,2053,2055],{"className":2054,"style":1999},[1968],[43,2056],{},[43,2058],{"className":2059,"style":1219},[1218],[43,2061,1186],{"className":2062},[1223],[43,2064],{"className":2065,"style":1219},[1218],[43,2067,2069,2073,2153,2156,2159],{"className":2068},[1203],[43,2070],{"className":2071,"style":2072},[1207],"height:1.1901em;vertical-align:-0.345em;",[43,2074,2076,2080,2150],{"className":2075},[1212],[43,2077],{"className":2078},[1300,2079],"nulldelimiter",[43,2081,2083],{"className":2082},[1905],[43,2084,2086,2141],{"className":2085},[1959,1960],[43,2087,2089,2138],{"className":2088},[1964],[43,2090,2093,2112,2123],{"className":2091,"style":2092},[1968],"height:0.8451em;",[43,2094,2096,2100],{"style":2095},"top:-2.655em;",[43,2097],{"className":2098,"style":2099},[1976],"height:3em;",[43,2101,2103],{"className":2102},[1981,1982,1983,1984],[43,2104,2106,2109],{"className":2105},[1212,1984],[43,2107,1915],{"className":2108},[1212,1984],[43,2110,1918],{"className":2111,"style":1856},[1212,1213,1984],[43,2113,2115,2118],{"style":2114},"top:-3.23em;",[43,2116],{"className":2117,"style":2099},[1976],[43,2119],{"className":2120,"style":2122},[2121],"frac-line","border-bottom-width:0.04em;",[43,2124,2126,2129],{"style":2125},"top:-3.394em;",[43,2127],{"className":2128,"style":2099},[1976],[43,2130,2132],{"className":2131},[1981,1982,1983,1984],[43,2133,2135],{"className":2134},[1212,1984],[43,2136,1910],{"className":2137},[1212,1984],[43,2139,1992],{"className":2140},[1991],[43,2142,2144],{"className":2143},[1964],[43,2145,2148],{"className":2146,"style":2147},[1968],"height:0.345em;",[43,2149],{},[43,2151],{"className":2152},[1318,2079],[43,2154],{"className":2155,"style":1219},[1218],[43,2157,1186],{"className":2158},[1223],[43,2160],{"className":2161,"style":1219},[1218],[43,2163,2165,2169],{"className":2164},[1203],[43,2166],{"className":2167,"style":2168},[1207],"height:1.2251em;vertical-align:-0.345em;",[43,2170,2172,2175,2238],{"className":2171},[1212],[43,2173],{"className":2174},[1300,2079],[43,2176,2178],{"className":2177},[1905],[43,2179,2181,2230],{"className":2180},[1959,1960],[43,2182,2184,2227],{"className":2183},[1964],[43,2185,2188,2205,2213],{"className":2186,"style":2187},[1968],"height:0.8801em;",[43,2189,2190,2193],{"style":2095},[43,2191],{"className":2192,"style":2099},[1976],[43,2194,2196],{"className":2195},[1981,1982,1983,1984],[43,2197,2199,2202],{"className":2198},[1212,1984],[43,2200,1918],{"className":2201,"style":1856},[1212,1213,1984],[43,2203,1932],{"className":2204,"style":1337},[1212,1213,1984],[43,2206,2207,2210],{"style":2114},[43,2208],{"className":2209,"style":2099},[1976],[43,2211],{"className":2212,"style":2122},[2121],[43,2214,2215,2218],{"style":2125},[43,2216],{"className":2217,"style":2099},[1976],[43,2219,2221],{"className":2220},[1981,1982,1983,1984],[43,2222,2224],{"className":2223},[1212,1984],[43,2225,1925],{"className":2226},[1212,1213,1984],[43,2228,1992],{"className":2229},[1991],[43,2231,2233],{"className":2232},[1964],[43,2234,2236],{"className":2235,"style":2147},[1968],[43,2237],{},[43,2239],{"className":2240},[1318,2079],[20,2242,2243],{},"其中：",[33,2245,2247],{"className":35,"code":2246,"language":37,"meta":38,"style":38},"Ts = 平均寻道时间\nr = 每秒转数\nb = 要传输的字节数\nN = 每磁道字节数\nb \u002F rN = 传输时间\n1 \u002F 2r = 平均旋转延迟\n",[40,2248,2249,2254,2259,2264,2269,2274],{"__ignoreMap":38},[43,2250,2251],{"class":45,"line":46},[43,2252,2253],{"class":49},"Ts = 平均寻道时间\n",[43,2255,2256],{"class":45,"line":53},[43,2257,2258],{"class":49},"r = 每秒转数\n",[43,2260,2261],{"class":45,"line":59},[43,2262,2263],{"class":49},"b = 要传输的字节数\n",[43,2265,2266],{"class":45,"line":65},[43,2267,2268],{"class":49},"N = 每磁道字节数\n",[43,2270,2271],{"class":45,"line":71},[43,2272,2273],{"class":49},"b \u002F rN = 传输时间\n",[43,2275,2276],{"class":45,"line":77},[43,2277,2278],{"class":49},"1 \u002F 2r = 平均旋转延迟\n",[15,2280,2282],{"id":2281},"_3-顺序访问-vs-随机访问","3. 顺序访问 vs 随机访问",[20,2284,2285],{},"教材给过一个很典型的对比：读同样大小的文件，若文件连续存放，寻道和旋转开销少；若随机分布，每个扇区都可能重新寻道和等待旋转，时间会差很多。核心结论是：",[33,2287,2289],{"className":35,"code":2288,"language":37,"meta":38,"style":38},"磁盘性能不只取决于数据量，\n更取决于访问顺序和物理位置。\n",[40,2290,2291,2296],{"__ignoreMap":38},[43,2292,2293],{"class":45,"line":46},[43,2294,2295],{"class":49},"磁盘性能不只取决于数据量，\n",[43,2297,2298],{"class":45,"line":53},[43,2299,2300],{"class":49},"更取决于访问顺序和物理位置。\n",[15,2302,2304],{"id":2303},"_4-磁盘调度算法总表","4. 磁盘调度算法总表",[20,2306,2307],{},"教材表 11.3 总结了常见磁盘调度策略：Random、FIFO、PRI、LIFO、SSTF、SCAN、C-SCAN、N-step-SCAN、FSCAN。",[114,2309,2310,2327],{},[117,2311,2312],{},[120,2313,2314,2317,2320,2323,2325],{},[123,2315,2316],{},"算法",[123,2318,2319],{},"中文名",[123,2321,2322],{},"核心规则",[123,2324,375],{},[123,2326,378],{},[133,2328,2329,2346,2363,2380,2397,2414,2431,2448,2465],{},[120,2330,2331,2334,2337,2340,2343],{},[138,2332,2333],{},"Random",[138,2335,2336],{},"随机",[138,2338,2339],{},"随机选请求",[138,2341,2342],{},"可作基准",[138,2344,2345],{},"性能差",[120,2347,2348,2351,2354,2357,2360],{},[138,2349,2350],{},"FIFO",[138,2352,2353],{},"先来先服务",[138,2355,2356],{},"按请求到达顺序服务",[138,2358,2359],{},"公平，简单",[138,2361,2362],{},"可能寻道距离大",[120,2364,2365,2368,2371,2374,2377],{},[138,2366,2367],{},"PRI",[138,2369,2370],{},"优先级",[138,2372,2373],{},"按进程优先级服务",[138,2375,2376],{},"满足系统优先级策略",[138,2378,2379],{},"不一定优化磁盘，可能饥饿",[120,2381,2382,2385,2388,2391,2394],{},[138,2383,2384],{},"LIFO",[138,2386,2387],{},"后来先服务",[138,2389,2390],{},"最新请求先服务",[138,2392,2393],{},"利用局部性",[138,2395,2396],{},"老请求可能饥饿",[120,2398,2399,2402,2405,2408,2411],{},[138,2400,2401],{},"SSTF",[138,2403,2404],{},"最短服务时间优先",[138,2406,2407],{},"选离当前磁头最近的请求",[138,2409,2410],{},"平均寻道较短",[138,2412,2413],{},"远处请求可能饥饿",[120,2415,2416,2419,2422,2425,2428],{},[138,2417,2418],{},"SCAN",[138,2420,2421],{},"扫描 \u002F 电梯算法",[138,2423,2424],{},"沿一个方向服务，到端点或无请求后反向",[138,2426,2427],{},"避免严重饥饿，分布较好",[138,2429,2430],{},"对刚扫过区域不友好",[120,2432,2433,2436,2439,2442,2445],{},[138,2434,2435],{},"C-SCAN",[138,2437,2438],{},"循环扫描",[138,2440,2441],{},"只沿一个方向服务，到末端后快速回起点",[138,2443,2444],{},"等待时间更均匀",[138,2446,2447],{},"回程不服务",[120,2449,2450,2453,2456,2459,2462],{},[138,2451,2452],{},"N-step-SCAN",[138,2454,2455],{},"N 步扫描",[138,2457,2458],{},"将请求队列分成长度 N 的子队列，逐个 SCAN",[138,2460,2461],{},"防止磁臂黏着",[138,2463,2464],{},"N 选择影响性能",[120,2466,2467,2470,2473,2476,2479],{},[138,2468,2469],{},"FSCAN",[138,2471,2472],{},"双队列扫描",[138,2474,2475],{},"扫描时新请求放入另一个队列",[138,2477,2478],{},"对负载变化更稳定",[138,2480,2481],{},"实现略复杂",[15,2483,2485],{"id":2484},"_5-fifo","5. FIFO",[20,2487,2488],{},"FIFO 按请求到达顺序服务。\n优点是公平；缺点是请求如果分布很散，磁头会来回跳，寻道开销大。教材例子中 FIFO 平均寻道长度较大。",[20,2490,2491],{},"计算方法：",[33,2493,2495],{"className":35,"code":2494,"language":37,"meta":38,"style":38},"从初始磁道开始\n按请求序列逐个访问\n每一步移动距离 = |当前磁道 - 下一个请求磁道|\n总移动距离 = 所有移动距离求和\n",[40,2496,2497,2502,2507,2512],{"__ignoreMap":38},[43,2498,2499],{"class":45,"line":46},[43,2500,2501],{"class":49},"从初始磁道开始\n",[43,2503,2504],{"class":45,"line":53},[43,2505,2506],{"class":49},"按请求序列逐个访问\n",[43,2508,2509],{"class":45,"line":59},[43,2510,2511],{"class":49},"每一步移动距离 = |当前磁道 - 下一个请求磁道|\n",[43,2513,2514],{"class":45,"line":65},[43,2515,2516],{"class":49},"总移动距离 = 所有移动距离求和\n",[15,2518,2520],{"id":2519},"_6-sstf","6. SSTF",[20,2522,2523],{},"SSTF 每次选择离当前磁头位置最近的请求。",[20,2525,2491],{},[33,2527,2529],{"className":35,"code":2528,"language":37,"meta":38,"style":38},"当前位置出发\n在未完成请求中找距离最近的\n移动过去并删除该请求\n重复直到请求为空\n",[40,2530,2531,2536,2541,2546],{"__ignoreMap":38},[43,2532,2533],{"class":45,"line":46},[43,2534,2535],{"class":49},"当前位置出发\n",[43,2537,2538],{"class":45,"line":53},[43,2539,2540],{"class":49},"在未完成请求中找距离最近的\n",[43,2542,2543],{"class":45,"line":59},[43,2544,2545],{"class":49},"移动过去并删除该请求\n",[43,2547,2548],{"class":45,"line":65},[43,2549,2550],{"class":49},"重复直到请求为空\n",[20,2552,2553],{},"优点：通常比 FIFO 寻道距离短。\n缺点：如果一直有近处请求，远处请求可能长期得不到服务，也就是饥饿。",[15,2555,2557],{"id":2556},"_7-scan-电梯算法","7. SCAN \u002F 电梯算法",[20,2559,2560],{},"SCAN 像电梯一样：磁头沿一个方向移动，沿途服务所有请求，到达端点或该方向无请求后，再反向服务。",[20,2562,2563],{},"计算时注意题目给的方向：",[33,2565,2567],{"className":35,"code":2566,"language":37,"meta":38,"style":38},"当前磁头位置\n\n- 当前移动方向\n- 请求序列\n",[40,2568,2569,2574,2578,2585],{"__ignoreMap":38},[43,2570,2571],{"class":45,"line":46},[43,2572,2573],{"class":49},"当前磁头位置\n",[43,2575,2576],{"class":45,"line":53},[43,2577,998],{"emptyLinePlaceholder":997},[43,2579,2580,2582],{"class":45,"line":59},[43,2581,1003],{"class":610},[43,2583,2584],{"class":49}," 当前移动方向\n",[43,2586,2587,2589],{"class":45,"line":65},[43,2588,1003],{"class":610},[43,2590,2591],{"class":49}," 请求序列\n",[20,2593,2594],{},"如果题目说“刚服务过 120，当前在 100”，说明磁头正在向小号磁道移动。",[20,2596,2597],{},"课件还提醒：有些中文题里的“电梯调度算法”更接近 LOOK，即没有请求时不一定走到磁盘最边界，而是到该方向最后一个请求后反向。",[15,2599,2601],{"id":2600},"_8-c-scan","8. C-SCAN",[20,2603,2604],{},"C-SCAN 只在一个方向上服务请求。到达末端后，磁头直接回到另一端，回程不服务。这样可以减少新请求的最大等待时间，使服务更均匀。",[20,2606,2607],{},"理解：",[33,2609,2611],{"className":35,"code":2610,"language":37,"meta":38,"style":38},"SCAN：来回都服务\nC-SCAN：只单向服务，回程不服务\n",[40,2612,2613,2618],{"__ignoreMap":38},[43,2614,2615],{"class":45,"line":46},[43,2616,2617],{"class":49},"SCAN：来回都服务\n",[43,2619,2620],{"class":45,"line":53},[43,2621,2622],{"class":49},"C-SCAN：只单向服务，回程不服务\n",[15,2624,2626],{"id":2625},"_9-n-step-scan-与-fscan","9. N-step-SCAN 与 FSCAN",[20,2628,2629,2630,681],{},"SSTF、SCAN、C-SCAN 都可能出现一种现象：某些进程不断请求同一附近磁道，磁臂长期停留在一小片区域，叫 ",[26,2631,2632],{},"arm stickiness，磁臂黏着",[20,2634,2635],{},"为了解决它，可以把队列分段：",[2637,2638,2452],"h3",{"id":2639},"n-step-scan",[33,2641,2643],{"className":35,"code":2642,"language":37,"meta":38,"style":38},"把磁盘请求队列分成长度 N 的子队列\n每次对一个子队列使用 SCAN\n处理当前子队列时，新请求加入其他队列\nN 很大时接近 SCAN\nN = 1 时接近 FIFO\n",[40,2644,2645,2650,2655,2660,2665],{"__ignoreMap":38},[43,2646,2647],{"class":45,"line":46},[43,2648,2649],{"class":49},"把磁盘请求队列分成长度 N 的子队列\n",[43,2651,2652],{"class":45,"line":53},[43,2653,2654],{"class":49},"每次对一个子队列使用 SCAN\n",[43,2656,2657],{"class":45,"line":59},[43,2658,2659],{"class":49},"处理当前子队列时，新请求加入其他队列\n",[43,2661,2662],{"class":45,"line":65},[43,2663,2664],{"class":49},"N 很大时接近 SCAN\n",[43,2666,2667],{"class":45,"line":71},[43,2668,2669],{"class":49},"N = 1 时接近 FIFO\n",[2637,2671,2469],{"id":2672},"fscan",[33,2674,2676],{"className":35,"code":2675,"language":37,"meta":38,"style":38},"使用两个队列\n扫描开始时，所有旧请求在一个队列\n扫描过程中，新请求进入另一个队列\n旧请求全部处理完后，再处理新队列\n",[40,2677,2678,2683,2688,2693],{"__ignoreMap":38},[43,2679,2680],{"class":45,"line":46},[43,2681,2682],{"class":49},"使用两个队列\n",[43,2684,2685],{"class":45,"line":53},[43,2686,2687],{"class":49},"扫描开始时，所有旧请求在一个队列\n",[43,2689,2690],{"class":45,"line":59},[43,2691,2692],{"class":49},"扫描过程中，新请求进入另一个队列\n",[43,2694,2695],{"class":45,"line":65},[43,2696,2697],{"class":49},"旧请求全部处理完后，再处理新队列\n",[15,2699,2701],{"id":2700},"_10-磁盘调度题做法模板","10. 磁盘调度题做法模板",[20,2703,2704],{},"遇到磁盘调度计算题，按这个流程：",[33,2706,2708],{"className":35,"code":2707,"language":37,"meta":38,"style":38},"1. 写出初始磁头位置\n2. 判断初始方向\n3. 写出请求序列\n4. 根据算法排序访问顺序\n5. 每一步计算移动距离\n6. 求总移动磁道数\n",[40,2709,2710,2717,2724,2731,2738,2745],{"__ignoreMap":38},[43,2711,2712,2714],{"class":45,"line":46},[43,2713,611],{"class":610},[43,2715,2716],{"class":49}," 写出初始磁头位置\n",[43,2718,2719,2721],{"class":45,"line":53},[43,2720,619],{"class":610},[43,2722,2723],{"class":49}," 判断初始方向\n",[43,2725,2726,2728],{"class":45,"line":59},[43,2727,627],{"class":610},[43,2729,2730],{"class":49}," 写出请求序列\n",[43,2732,2733,2735],{"class":45,"line":65},[43,2734,635],{"class":610},[43,2736,2737],{"class":49}," 根据算法排序访问顺序\n",[43,2739,2740,2742],{"class":45,"line":71},[43,2741,643],{"class":610},[43,2743,2744],{"class":49}," 每一步计算移动距离\n",[43,2746,2747,2749],{"class":45,"line":77},[43,2748,651],{"class":610},[43,2750,2751],{"class":49}," 求总移动磁道数\n",[20,2753,2754],{},"例如：",[33,2756,2758],{"className":35,"code":2757,"language":37,"meta":38,"style":38},"移动距离 = |当前磁道号 - 下一磁道号|\n总移动距离 = 每一步移动距离之和\n",[40,2759,2760,2765],{"__ignoreMap":38},[43,2761,2762],{"class":45,"line":46},[43,2763,2764],{"class":49},"移动距离 = |当前磁道号 - 下一磁道号|\n",[43,2766,2767],{"class":45,"line":53},[43,2768,2769],{"class":49},"总移动距离 = 每一步移动距离之和\n",[20,2771,2772],{},"考试最容易错的是：",[33,2774,2776],{"className":35,"code":2775,"language":37,"meta":38,"style":38},"SCAN 是否走到 0 \u002F 最大磁道？\nLOOK 是否只走到该方向最后一个请求？\nC-SCAN 回程是否计入移动距离？\n题目有没有说“刚服务过某磁道”，这会影响初始方向。\n",[40,2777,2778,2783,2788,2793],{"__ignoreMap":38},[43,2779,2780],{"class":45,"line":46},[43,2781,2782],{"class":49},"SCAN 是否走到 0 \u002F 最大磁道？\n",[43,2784,2785],{"class":45,"line":53},[43,2786,2787],{"class":49},"LOOK 是否只走到该方向最后一个请求？\n",[43,2789,2790],{"class":45,"line":59},[43,2791,2792],{"class":49},"C-SCAN 回程是否计入移动距离？\n",[43,2794,2795],{"class":45,"line":65},[43,2796,2797],{"class":49},"题目有没有说“刚服务过某磁道”，这会影响初始方向。\n",[100,2799],{},[10,2801,2803],{"id":2802},"课件补充旋转优化与记录分布","课件补充：旋转优化与记录分布",[20,2805,2806],{},"课件有一组“循环排序 \u002F 优化分布”的例题，核心思想是：",[33,2808,2810],{"className":35,"code":2809,"language":37,"meta":38,"style":38},"磁盘不是只考虑磁道移动，还要考虑旋转延迟。\n如果记录顺序存放，但处理一个记录需要时间，\n处理完后下一个扇区可能已经转过去了，\n就需要等几乎一整圈。\n",[40,2811,2812,2817,2822,2827],{"__ignoreMap":38},[43,2813,2814],{"class":45,"line":46},[43,2815,2816],{"class":49},"磁盘不是只考虑磁道移动，还要考虑旋转延迟。\n",[43,2818,2819],{"class":45,"line":53},[43,2820,2821],{"class":49},"如果记录顺序存放，但处理一个记录需要时间，\n",[43,2823,2824],{"class":45,"line":59},[43,2825,2826],{"class":49},"处理完后下一个扇区可能已经转过去了，\n",[43,2828,2829],{"class":45,"line":65},[43,2830,2831],{"class":49},"就需要等几乎一整圈。\n",[20,2833,2834,2835,2838],{},"所以可以通过",[26,2836,2837],{},"交错存放记录","优化读取时间：",[33,2840,2842],{"className":35,"code":2841,"language":37,"meta":38,"style":38},"逻辑顺序：A B C D E ...\n物理顺序：不一定连续摆放\n目标：让 CPU 处理完 A 后，B 正好快转到磁头下\n",[40,2843,2844,2849,2854],{"__ignoreMap":38},[43,2845,2846],{"class":45,"line":46},[43,2847,2848],{"class":49},"逻辑顺序：A B C D E ...\n",[43,2850,2851],{"class":45,"line":53},[43,2852,2853],{"class":49},"物理顺序：不一定连续摆放\n",[43,2855,2856],{"class":45,"line":59},[43,2857,2858],{"class":49},"目标：让 CPU 处理完 A 后，B 正好快转到磁头下\n",[20,2860,2861],{},"这类题步骤：",[33,2863,2865],{"className":35,"code":2864,"language":37,"meta":38,"style":38},"1. 算每转一圈时间\n2. 算每个扇区经过磁头的时间\n3. 算处理一个记录需要跨过几个扇区\n4. 按这个间隔重新排列逻辑记录\n5. 计算总读取时间\n",[40,2866,2867,2874,2881,2888,2895],{"__ignoreMap":38},[43,2868,2869,2871],{"class":45,"line":46},[43,2870,611],{"class":610},[43,2872,2873],{"class":49}," 算每转一圈时间\n",[43,2875,2876,2878],{"class":45,"line":53},[43,2877,619],{"class":610},[43,2879,2880],{"class":49}," 算每个扇区经过磁头的时间\n",[43,2882,2883,2885],{"class":45,"line":59},[43,2884,627],{"class":610},[43,2886,2887],{"class":49}," 算处理一个记录需要跨过几个扇区\n",[43,2889,2890,2892],{"class":45,"line":65},[43,2891,635],{"class":610},[43,2893,2894],{"class":49}," 按这个间隔重新排列逻辑记录\n",[43,2896,2897,2899],{"class":45,"line":71},[43,2898,643],{"class":610},[43,2900,2901],{"class":49}," 计算总读取时间\n",[100,2903],{},[10,2905,2907],{"id":2906},"_116-raid","11.6 RAID",[15,2909,2911],{"id":2910},"_1-raid-的思想","1. RAID 的思想",[20,2913,2914,2915,2918],{},"RAID 的核心是：",[26,2916,2917],{},"用多个磁盘并行工作，提高性能，并通过冗余提高可靠性。"," 教材指出，RAID 0、1、5、6 是最常用的几个级别。",[20,2920,2921],{},"两个关键词：",[114,2923,2924,2933],{},[117,2925,2926],{},[120,2927,2928,2931],{},[123,2929,2930],{},"词",[123,2932,128],{},[133,2934,2935,2943],{},[120,2936,2937,2940],{},[138,2938,2939],{},"Strip",[138,2941,2942],{},"条带单元，逻辑磁盘上的一小块连续数据",[120,2944,2945,2948],{},[138,2946,2947],{},"Stripe",[138,2949,2950],{},"条带组，一组 strip 分布到多个磁盘上",[15,2952,2954],{"id":2953},"_2-raid-0","2. RAID 0",[20,2956,2957],{},"RAID 0：条带化，无冗余。它不是真正意义上的“冗余阵列”，因为没有容错。",[20,2959,2960],{},"特点：",[33,2962,2964],{"className":35,"code":2963,"language":37,"meta":38,"style":38},"数据分散到多个磁盘\n多个磁盘可并行读写\n性能高，容量利用率高\n没有冗余，一个盘坏可能导致数据丢失\n",[40,2965,2966,2971,2976,2981],{"__ignoreMap":38},[43,2967,2968],{"class":45,"line":46},[43,2969,2970],{"class":49},"数据分散到多个磁盘\n",[43,2972,2973],{"class":45,"line":53},[43,2974,2975],{"class":49},"多个磁盘可并行读写\n",[43,2977,2978],{"class":45,"line":59},[43,2979,2980],{"class":49},"性能高，容量利用率高\n",[43,2982,2983],{"class":45,"line":65},[43,2984,2985],{"class":49},"没有冗余，一个盘坏可能导致数据丢失\n",[20,2987,2988],{},"适合追求性能、不重视可靠性的场景。",[15,2990,2992],{"id":2991},"_3-raid-1","3. RAID 1",[20,2994,2995],{},"RAID 1：镜像。每份数据写到两个磁盘。",[20,2997,804],{},[33,2999,3001],{"className":35,"code":3000,"language":37,"meta":38,"style":38},"读请求可以从两个镜像盘中选择更快的一个\n写请求需要两个盘都写\n恢复简单，一个盘坏了另一个还能用\n可靠性高\n",[40,3002,3003,3008,3013,3018],{"__ignoreMap":38},[43,3004,3005],{"class":45,"line":46},[43,3006,3007],{"class":49},"读请求可以从两个镜像盘中选择更快的一个\n",[43,3009,3010],{"class":45,"line":53},[43,3011,3012],{"class":49},"写请求需要两个盘都写\n",[43,3014,3015],{"class":45,"line":59},[43,3016,3017],{"class":49},"恢复简单，一个盘坏了另一个还能用\n",[43,3019,3020],{"class":45,"line":65},[43,3021,3022],{"class":49},"可靠性高\n",[20,3024,1343],{},[33,3026,3028],{"className":35,"code":3027,"language":37,"meta":38,"style":38},"成本高，需要 2 倍磁盘空间\n容量利用率约 50%\n",[40,3029,3030,3035],{"__ignoreMap":38},[43,3031,3032],{"class":45,"line":46},[43,3033,3034],{"class":49},"成本高，需要 2 倍磁盘空间\n",[43,3036,3037],{"class":45,"line":53},[43,3038,3039],{"class":49},"容量利用率约 50%\n",[15,3041,3043],{"id":3042},"_4-raid-2","4. RAID 2",[20,3045,3046],{},"RAID 2：使用 Hamming Code 进行纠错，按位或字节级条带化。",[20,3048,2960],{},[33,3050,3052],{"className":35,"code":3051,"language":37,"meta":38,"style":38},"所有磁盘并行参与每次 I\u002FO\n使用多个校验盘存放纠错码\n能纠正单比特错误、检测双比特错误\n",[40,3053,3054,3059,3064],{"__ignoreMap":38},[43,3055,3056],{"class":45,"line":46},[43,3057,3058],{"class":49},"所有磁盘并行参与每次 I\u002FO\n",[43,3060,3061],{"class":45,"line":53},[43,3062,3063],{"class":49},"使用多个校验盘存放纠错码\n",[43,3065,3066],{"class":45,"line":59},[43,3067,3068],{"class":49},"能纠正单比特错误、检测双比特错误\n",[20,3070,3071],{},"现实中很少使用，因为现代磁盘自身可靠性较高，RAID 2 成本偏高，有点“过度设计”。",[15,3073,3075],{"id":3074},"_5-raid-3","5. RAID 3",[20,3077,3078],{},"RAID 3：小条带 + 单独奇偶校验盘。",[20,3080,2960],{},[33,3082,3084],{"className":35,"code":3083,"language":37,"meta":38,"style":38},"数据以很小单位分散到多个数据盘\n一个专门的校验盘存储 parity\n适合大块连续数据传输\n小 I\u002FO 并发能力差，因为每次 I\u002FO 都牵涉多个磁盘\n",[40,3085,3086,3091,3096,3101],{"__ignoreMap":38},[43,3087,3088],{"class":45,"line":46},[43,3089,3090],{"class":49},"数据以很小单位分散到多个数据盘\n",[43,3092,3093],{"class":45,"line":53},[43,3094,3095],{"class":49},"一个专门的校验盘存储 parity\n",[43,3097,3098],{"class":45,"line":59},[43,3099,3100],{"class":49},"适合大块连续数据传输\n",[43,3102,3103],{"class":45,"line":65},[43,3104,3105],{"class":49},"小 I\u002FO 并发能力差，因为每次 I\u002FO 都牵涉多个磁盘\n",[20,3107,3108],{},"奇偶校验恢复思想：",[20,3110,3111],{},"如果有数据盘损坏，可以通过剩余数据盘和校验盘 XOR 恢复数据。",[15,3113,3115],{"id":3114},"_6-raid-4","6. RAID 4",[20,3117,3118],{},"RAID 4：块级条带 + 专用校验盘。",[20,3120,2960],{},[33,3122,3124],{"className":35,"code":3123,"language":37,"meta":38,"style":38},"数据按块分布\n读操作可独立访问不同磁盘\n写操作需要更新校验盘\n校验盘容易成为写瓶颈\n",[40,3125,3126,3131,3136,3141],{"__ignoreMap":38},[43,3127,3128],{"class":45,"line":46},[43,3129,3130],{"class":49},"数据按块分布\n",[43,3132,3133],{"class":45,"line":53},[43,3134,3135],{"class":49},"读操作可独立访问不同磁盘\n",[43,3137,3138],{"class":45,"line":59},[43,3139,3140],{"class":49},"写操作需要更新校验盘\n",[43,3142,3143],{"class":45,"line":65},[43,3144,3145],{"class":49},"校验盘容易成为写瓶颈\n",[15,3147,3149],{"id":3148},"_7-raid-5","7. RAID 5",[20,3151,3152],{},"RAID 5：块级条带 + 分布式奇偶校验。",[20,3154,2960],{},[33,3156,3158],{"className":35,"code":3157,"language":37,"meta":38,"style":38},"没有固定校验盘\n校验信息分布到所有磁盘\n读性能接近 RAID 0\n写操作有 parity 更新开销\n比 RAID 4 更避免单一校验盘瓶颈\n",[40,3159,3160,3165,3170,3175,3180],{"__ignoreMap":38},[43,3161,3162],{"class":45,"line":46},[43,3163,3164],{"class":49},"没有固定校验盘\n",[43,3166,3167],{"class":45,"line":53},[43,3168,3169],{"class":49},"校验信息分布到所有磁盘\n",[43,3171,3172],{"class":45,"line":59},[43,3173,3174],{"class":49},"读性能接近 RAID 0\n",[43,3176,3177],{"class":45,"line":65},[43,3178,3179],{"class":49},"写操作有 parity 更新开销\n",[43,3181,3182],{"class":45,"line":71},[43,3183,3184],{"class":49},"比 RAID 4 更避免单一校验盘瓶颈\n",[20,3186,3187],{},"这是实际系统中很常见的 RAID 级别之一。",[15,3189,3191],{"id":3190},"_8-raid-6","8. RAID 6",[20,3193,3194],{},"RAID 6：块级条带 + 双重分布式奇偶校验。",[20,3196,2960],{},[33,3198,3200],{"className":35,"code":3199,"language":37,"meta":38,"style":38},"能容忍两个磁盘同时故障\n可靠性最高\n写开销比 RAID 5 更大\n至少需要 N + 2 个磁盘\n",[40,3201,3202,3207,3212,3217],{"__ignoreMap":38},[43,3203,3204],{"class":45,"line":46},[43,3205,3206],{"class":49},"能容忍两个磁盘同时故障\n",[43,3208,3209],{"class":45,"line":53},[43,3210,3211],{"class":49},"可靠性最高\n",[43,3213,3214],{"class":45,"line":59},[43,3215,3216],{"class":49},"写开销比 RAID 5 更大\n",[43,3218,3219],{"class":45,"line":65},[43,3220,3221],{"class":49},"至少需要 N + 2 个磁盘\n",[15,3223,3225],{"id":3224},"_9-raid-级别速记表","9. RAID 级别速记表",[114,3227,3228,3247],{},[117,3229,3230],{},[120,3231,3232,3235,3238,3241,3244],{},[123,3233,3234],{},"RAID",[123,3236,3237],{},"核心",[123,3239,3240],{},"冗余",[123,3242,3243],{},"性能",[123,3245,3246],{},"可靠性",[133,3248,3249,3266,3283,3300,3317,3332,3348],{},[120,3250,3251,3254,3257,3260,3263],{},[138,3252,3253],{},"RAID 0",[138,3255,3256],{},"条带化",[138,3258,3259],{},"无",[138,3261,3262],{},"很高",[138,3264,3265],{},"低",[120,3267,3268,3271,3274,3277,3280],{},[138,3269,3270],{},"RAID 1",[138,3272,3273],{},"镜像",[138,3275,3276],{},"完整复制",[138,3278,3279],{},"读好，写一般",[138,3281,3282],{},"高",[120,3284,3285,3288,3291,3294,3297],{},[138,3286,3287],{},"RAID 2",[138,3289,3290],{},"Hamming Code",[138,3292,3293],{},"多校验盘",[138,3295,3296],{},"并行访问",[138,3298,3299],{},"高但少用",[120,3301,3302,3305,3308,3311,3314],{},[138,3303,3304],{},"RAID 3",[138,3306,3307],{},"小条带 + 专用 parity",[138,3309,3310],{},"1 个校验盘",[138,3312,3313],{},"大块传输好",[138,3315,3316],{},"可容错 1 盘",[120,3318,3319,3322,3325,3327,3330],{},[138,3320,3321],{},"RAID 4",[138,3323,3324],{},"块条带 + 专用 parity",[138,3326,3310],{},[138,3328,3329],{},"读好，写瓶颈",[138,3331,3316],{},[120,3333,3334,3337,3340,3343,3346],{},[138,3335,3336],{},"RAID 5",[138,3338,3339],{},"块条带 + 分布 parity",[138,3341,3342],{},"分布式校验",[138,3344,3345],{},"综合较好",[138,3347,3316],{},[120,3349,3350,3353,3356,3359,3362],{},[138,3351,3352],{},"RAID 6",[138,3354,3355],{},"双 parity",[138,3357,3358],{},"双重校验",[138,3360,3361],{},"写较慢",[138,3363,3364],{},"可容错 2 盘",[100,3366],{},[10,3368,3370],{"id":3369},"_117-disk-cache","11.7 Disk Cache",[15,3372,3374],{"id":3373},"_1-disk-cache-是什么","1. Disk Cache 是什么？",[20,3376,3377,3378,681],{},"磁盘缓存是主存中的一块缓冲区，用来保存磁盘扇区的副本。请求某个扇区时，先查 cache：命中则直接从内存取，未命中再读磁盘。它利用的是",[26,3379,3380],{},"局部性原理",[33,3382,3384],{"className":35,"code":3383,"language":37,"meta":38,"style":38},"请求磁盘块\n→ 查 Disk Cache\n→ 命中：从内存返回\n→ 未命中：从磁盘读入 cache，再返回\n",[40,3385,3386,3391,3396,3401],{"__ignoreMap":38},[43,3387,3388],{"class":45,"line":46},[43,3389,3390],{"class":49},"请求磁盘块\n",[43,3392,3393],{"class":45,"line":53},[43,3394,3395],{"class":49},"→ 查 Disk Cache\n",[43,3397,3398],{"class":45,"line":59},[43,3399,3400],{"class":49},"→ 命中：从内存返回\n",[43,3402,3403],{"class":45,"line":65},[43,3404,3405],{"class":49},"→ 未命中：从磁盘读入 cache，再返回\n",[15,3407,3409],{"id":3408},"_2-disk-cache-与-buffering-的区别","2. Disk Cache 与 Buffering 的区别",[114,3411,3412,3425],{},[117,3413,3414],{},[120,3415,3416,3419,3422],{},[123,3417,3418],{},"项目",[123,3420,3421],{},"Buffering",[123,3423,3424],{},"Disk Cache",[133,3426,3427,3438,3449,3460],{},[120,3428,3429,3432,3435],{},[138,3430,3431],{},"目的",[138,3433,3434],{},"平滑速度差，协调传输",[138,3436,3437],{},"减少重复磁盘访问",[120,3439,3440,3443,3446],{},[138,3441,3442],{},"内容",[138,3444,3445],{},"当前 I\u002FO 数据",[138,3447,3448],{},"可能未来会再次访问的磁盘块",[120,3450,3451,3454,3457],{},[138,3452,3453],{},"原理",[138,3455,3456],{},"CPU 与设备并行",[138,3458,3459],{},"时间局部性、空间局部性",[120,3461,3462,3465,3468],{},[138,3463,3464],{},"典型策略",[138,3466,3467],{},"单缓冲、双缓冲、循环缓冲",[138,3469,3470],{},"LRU、LFU、Frequency-based",[15,3472,3474],{"id":3473},"_3-cache-数据交付方式","3. Cache 数据交付方式",[20,3476,3477],{},"当 I\u002FO 请求在 disk cache 中命中时，数据可以：",[33,3479,3481],{"className":35,"code":3480,"language":37,"meta":38,"style":38},"1. 从 cache 复制到用户进程空间\n2. 通过共享内存传递 cache 中位置的指针\n",[40,3482,3483,3490],{"__ignoreMap":38},[43,3484,3485,3487],{"class":45,"line":46},[43,3486,611],{"class":610},[43,3488,3489],{"class":49}," 从 cache 复制到用户进程空间\n",[43,3491,3492,3494],{"class":45,"line":53},[43,3493,619],{"class":610},[43,3495,3496],{"class":49}," 通过共享内存传递 cache 中位置的指针\n",[20,3498,3499],{},"第二种方式避免内存到内存复制，效率更高。",[15,3501,3503],{"id":3502},"_4-lru","4. LRU",[20,3505,3506],{},"LRU，Least Recently Used，最近最少使用。\n规则：替换最长时间没有被访问的块。教材和课件都说它是常用的替换策略。",[20,3508,2607],{},[33,3510,3512],{"className":35,"code":3511,"language":37,"meta":38,"style":38},"最近用过 → 更可能马上再用\n很久没用 → 更适合淘汰\n",[40,3513,3514,3519],{"__ignoreMap":38},[43,3515,3516],{"class":45,"line":46},[43,3517,3518],{"class":49},"最近用过 → 更可能马上再用\n",[43,3520,3521],{"class":45,"line":53},[43,3522,3523],{"class":49},"很久没用 → 更适合淘汰\n",[15,3525,3527],{"id":3526},"_5-lfu","5. LFU",[20,3529,3530],{},"LFU，Least Frequently Used，最不经常使用。\n规则：替换访问次数最少的块。每个块有计数器，每访问一次计数加 1。",[20,3532,3533],{},"问题：",[33,3535,3537],{"className":35,"code":3536,"language":37,"meta":38,"style":38},"某些块曾经短时间高频访问，计数很高；\n但之后可能不再使用；\nLFU 仍可能保留它们，导致替换效果差。\n",[40,3538,3539,3544,3549],{"__ignoreMap":38},[43,3540,3541],{"class":45,"line":46},[43,3542,3543],{"class":49},"某些块曾经短时间高频访问，计数很高；\n",[43,3545,3546],{"class":45,"line":53},[43,3547,3548],{"class":49},"但之后可能不再使用；\n",[43,3550,3551],{"class":45,"line":59},[43,3552,3553],{"class":49},"LFU 仍可能保留它们，导致替换效果差。\n",[15,3555,3557],{"id":3556},"_6-frequency-based-replacement","6. Frequency-based Replacement",[20,3559,3560],{},"为解决 LFU 的问题，教材介绍了基于频率的改进策略：把 cache 栈分成 new、middle、old 等区域，只有 old 区块才适合替换，这样能避免刚进入 cache 的块因为计数低而马上被淘汰。",[15,3562,3564],{"id":3563},"_7-写回问题","7. 写回问题",[20,3566,3567],{},"如果缓存块只是被读过，替换时不必写回磁盘。\n如果缓存块被修改过，它就是 dirty block，替换前必须写回磁盘。",[20,3569,3570],{},"为了减少寻道，系统通常会把多个 dirty block 聚集起来，按较优顺序写回。",[100,3572],{},[10,3574,3576],{"id":3575},"_118-unix-svr4-io","11.8 UNIX SVR4 I\u002FO",[15,3578,3580],{"id":3579},"_1-unix-的统一接口思想","1. UNIX 的统一接口思想",[20,3582,3583],{},"UNIX 把每个 I\u002FO 设备都关联为一个特殊文件。进程通过读写特殊文件来读写设备。这体现了 UNIX 的经典思想：",[33,3585,3587],{"className":35,"code":3586,"language":37,"meta":38,"style":38},"Everything is a file.\n",[40,3588,3589],{"__ignoreMap":38},[43,3590,3591],{"class":45,"line":46},[43,3592,3586],{"class":49},[20,3594,3595],{},"这样用户进程看到的是统一接口，而底层设备差异由内核隐藏。",[15,3597,3599],{"id":3598},"_2-unix-的两类-io","2. UNIX 的两类 I\u002FO",[114,3601,3602,3610],{},[117,3603,3604],{},[120,3605,3606,3608],{},[123,3607,125],{},[123,3609,128],{},[133,3611,3612,3620],{},[120,3613,3614,3617],{},[138,3615,3616],{},"Buffered I\u002FO",[138,3618,3619],{},"经过系统缓冲区",[120,3621,3622,3625],{},[138,3623,3624],{},"Unbuffered I\u002FO",[138,3626,3627],{},"通常通过 DMA，直接在设备和进程 I\u002FO 区之间传输",[20,3629,3630],{},"Buffered I\u002FO 主要使用：",[33,3632,3634],{"className":35,"code":3633,"language":37,"meta":38,"style":38},"Buffer cache\nCharacter queue\n",[40,3635,3636,3641],{"__ignoreMap":38},[43,3637,3638],{"class":45,"line":46},[43,3639,3640],{"class":49},"Buffer cache\n",[43,3642,3643],{"class":45,"line":53},[43,3644,3645],{"class":49},"Character queue\n",[15,3647,3649],{"id":3648},"_3-buffer-cache","3. Buffer Cache",[20,3651,3652],{},"UNIX buffer cache 本质上是磁盘缓存。它用来缓存磁盘块。管理时维护三类列表：free list、device list、driver I\u002FO queue；查找时使用按 device 和 block 组织的哈希链表，替换策略使用 LRU。",[15,3654,3656],{"id":3655},"_4-character-queue","4. Character Queue",[20,3658,3659],{},"字符设备如终端、打印机适合 character queue。字符队列体现生产者—消费者模型：设备写入、进程读取，或进程写入、设备读取。字符被读走后就“消耗掉”，不像 buffer cache 可以多次读取。",[15,3661,3663],{"id":3662},"_5-unbuffered-io","5. Unbuffered I\u002FO",[20,3665,3666],{},"Unbuffered I\u002FO 是设备和进程空间之间通过 DMA 直接传输，速度快，但进程必须锁定在内存中，不能被换出，会降低系统整体调度和内存管理灵活性。",[100,3668],{},[10,3670,3672],{"id":3671},"_119-linux-io","11.9 Linux I\u002FO",[20,3674,3675],{},"Linux I\u002FO 与 UNIX 类似，也区分块设备和字符设备。教材重点讲 Linux 磁盘调度和 page cache。",[15,3677,3679],{"id":3678},"_1-linux-elevator-scheduler","1. Linux Elevator Scheduler",[20,3681,3682],{},"Linux 2.4 默认磁盘调度器是 Linux Elevator，类似 LOOK 算法。它维护一个请求队列，并按块号排序，同时进行请求合并。",[20,3684,3685],{},"插入新请求时大致考虑：",[33,3687,3689],{"className":35,"code":3688,"language":37,"meta":38,"style":38},"1. 能否和已有相邻请求合并\n2. 是否有旧请求需要避免饥饿\n3. 能否按块号有序插入\n4. 否则放到队尾\n",[40,3690,3691,3698,3705,3712],{"__ignoreMap":38},[43,3692,3693,3695],{"class":45,"line":46},[43,3694,611],{"class":610},[43,3696,3697],{"class":49}," 能否和已有相邻请求合并\n",[43,3699,3700,3702],{"class":45,"line":53},[43,3701,619],{"class":610},[43,3703,3704],{"class":49}," 是否有旧请求需要避免饥饿\n",[43,3706,3707,3709],{"class":45,"line":59},[43,3708,627],{"class":610},[43,3710,3711],{"class":49}," 能否按块号有序插入\n",[43,3713,3714,3716],{"class":45,"line":65},[43,3715,635],{"class":610},[43,3717,3718],{"class":49}," 否则放到队尾\n",[15,3720,3722],{"id":3721},"_2-deadline-scheduler","2. Deadline Scheduler",[20,3724,3725],{},"Deadline 调度器是为了解决 Elevator 的饥饿问题和读写不公平问题。它使用 sorted queue 和 FIFO queue，读请求和写请求分别有过期时间；读请求默认过期时间比写请求短，因为读通常会阻塞进程。",[20,3727,3728],{},"重点：",[33,3730,3732],{"className":35,"code":3731,"language":37,"meta":38,"style":38},"读请求更影响进程响应时间\n写请求通常可以异步延后\nDeadline 通过过期时间保证请求不会被无限推迟\n",[40,3733,3734,3739,3744],{"__ignoreMap":38},[43,3735,3736],{"class":45,"line":46},[43,3737,3738],{"class":49},"读请求更影响进程响应时间\n",[43,3740,3741],{"class":45,"line":53},[43,3742,3743],{"class":49},"写请求通常可以异步延后\n",[43,3745,3746],{"class":45,"line":59},[43,3747,3748],{"class":49},"Deadline 通过过期时间保证请求不会被无限推迟\n",[15,3750,3752],{"id":3751},"_3-anticipatory-scheduler","3. Anticipatory Scheduler",[20,3754,3755],{},"预期调度器的思想：读请求完成后，稍等很短时间，看同一进程是否马上发出附近位置的新读请求。因为局部性原理，新请求很可能就在附近。教材提到 Linux 2.6 中它叠加在 Deadline Scheduler 上，读请求后最多等待约 6ms。",[15,3757,3759],{"id":3758},"_4-noop-scheduler","4. NOOP Scheduler",[20,3761,3762],{},"NOOP 是最简单的调度器：",[33,3764,3766],{"className":35,"code":3765,"language":37,"meta":38,"style":38},"FIFO 队列\n只做请求合并\n适合本身已有调度能力的设备或非传统磁盘设备\n",[40,3767,3768,3773,3778],{"__ignoreMap":38},[43,3769,3770],{"class":45,"line":46},[43,3771,3772],{"class":49},"FIFO 队列\n",[43,3774,3775],{"class":45,"line":53},[43,3776,3777],{"class":49},"只做请求合并\n",[43,3779,3780],{"class":45,"line":59},[43,3781,3782],{"class":49},"适合本身已有调度能力的设备或非传统磁盘设备\n",[15,3784,3786],{"id":3785},"_5-cfq-scheduler","5. CFQ Scheduler",[20,3788,3789],{},"CFQ，Completely Fair Queuing，完全公平队列。\n它为每个进程维护 I\u002FO 队列，并给每个队列时间片，以 round-robin 的方式分配磁盘 I\u002FO 带宽，目标是公平。",[15,3791,3793],{"id":3792},"_6-linux-page-cache","6. Linux Page Cache",[20,3795,3796],{},"Linux 2.4 以后使用统一 page cache，所有磁盘与主存之间的数据流都经过它。好处：dirty pages 可以排序后批量写回；由于时间局部性，缓存页可能再次被访问，从而减少磁盘 I\u002FO。",[20,3798,3799],{},"dirty pages 写回场景：",[33,3801,3803],{"className":35,"code":3802,"language":37,"meta":38,"style":38},"空闲内存低于阈值\n脏页年龄超过阈值\n",[40,3804,3805,3810],{"__ignoreMap":38},[43,3806,3807],{"class":45,"line":46},[43,3808,3809],{"class":49},"空闲内存低于阈值\n",[43,3811,3812],{"class":45,"line":53},[43,3813,3814],{"class":49},"脏页年龄超过阈值\n",[100,3816],{},[10,3818,3820],{"id":3819},"_1110-windows-io","11.10 Windows I\u002FO",[15,3822,3824],{"id":3823},"_1-windows-io-manager","1. Windows I\u002FO Manager",[20,3826,3827],{},"Windows 的 I\u002FO Manager 负责操作系统的所有 I\u002FO，并给各种驱动提供统一接口。教材列出的 Chapter 11 Windows I\u002FO 重点包括 Basic I\u002FO Facilities、Asynchronous and Synchronous I\u002FO、Software RAID、Volume Shadow Copies、Volume Encryption。",[15,3829,3831],{"id":3830},"_2-windows-io-的核心组件","2. Windows I\u002FO 的核心组件",[20,3833,3834],{},"教材中 Windows I\u002FO Manager 主要配合四类组件：",[33,3836,3838],{"className":35,"code":3837,"language":37,"meta":38,"style":38},"Cache Manager：文件缓存，lazy writer 批量写回\nFile System Drivers：文件系统驱动\nNetwork Drivers：网络驱动和远程文件系统支持\nHardware Device Drivers：硬件设备驱动，经 HAL 访问硬件寄存器\n",[40,3839,3840,3845,3850,3855],{"__ignoreMap":38},[43,3841,3842],{"class":45,"line":46},[43,3843,3844],{"class":49},"Cache Manager：文件缓存，lazy writer 批量写回\n",[43,3846,3847],{"class":45,"line":53},[43,3848,3849],{"class":49},"File System Drivers：文件系统驱动\n",[43,3851,3852],{"class":45,"line":59},[43,3853,3854],{"class":49},"Network Drivers：网络驱动和远程文件系统支持\n",[43,3856,3857],{"class":45,"line":65},[43,3858,3859],{"class":49},"Hardware Device Drivers：硬件设备驱动，经 HAL 访问硬件寄存器\n",[15,3861,3863],{"id":3862},"_3-同步-io-与异步-io","3. 同步 I\u002FO 与异步 I\u002FO",[114,3865,3866,3874],{},[117,3867,3868],{},[120,3869,3870,3872],{},[123,3871,125],{},[123,3873,128],{},[133,3875,3876,3884],{},[120,3877,3878,3881],{},[138,3879,3880],{},"Synchronous I\u002FO",[138,3882,3883],{},"发出 I\u002FO 后线程阻塞，直到完成",[120,3885,3886,3889],{},[138,3887,3888],{},"Asynchronous I\u002FO",[138,3890,3891],{},"发出 I\u002FO 后线程继续执行，完成后通过某种机制通知",[20,3893,3894],{},"异步 I\u002FO 更适合提高应用性能，但需要完成通知机制。",[20,3896,3897],{},"Windows 常见完成通知方式：",[33,3899,3901],{"className":35,"code":3900,"language":37,"meta":38,"style":38},"File object signaling\nEvent object signaling\nAsynchronous Procedure Call, APC\nI\u002FO Completion Port\nPolling\n",[40,3902,3903,3908,3913,3918,3923],{"__ignoreMap":38},[43,3904,3905],{"class":45,"line":46},[43,3906,3907],{"class":49},"File object signaling\n",[43,3909,3910],{"class":45,"line":53},[43,3911,3912],{"class":49},"Event object signaling\n",[43,3914,3915],{"class":45,"line":59},[43,3916,3917],{"class":49},"Asynchronous Procedure Call, APC\n",[43,3919,3920],{"class":45,"line":65},[43,3921,3922],{"class":49},"I\u002FO Completion Port\n",[43,3924,3925],{"class":45,"line":71},[43,3926,3927],{"class":49},"Polling\n",[15,3929,3931],{"id":3930},"_4-windows-software-raid","4. Windows Software RAID",[20,3933,3934],{},"Windows 支持硬件 RAID 和软件 RAID。软件 RAID 由 OS 中的容错磁盘驱动实现，Windows Server 可实现 RAID 1 和 RAID 5。",[15,3936,3938],{"id":3937},"_5-volume-shadow-copies-与-volume-encryption","5. Volume Shadow Copies 与 Volume Encryption",[114,3940,3941,3950],{},[117,3942,3943],{},[120,3944,3945,3948],{},[123,3946,3947],{},"功能",[123,3949,739],{},[133,3951,3952,3960],{},[120,3953,3954,3957],{},[138,3955,3956],{},"Volume Shadow Copies",[138,3958,3959],{},"创建卷的一致性快照，用于备份和恢复旧版本文件",[120,3961,3962,3965],{},[138,3963,3964],{},"Volume Encryption",[138,3966,3967],{},"使用 BitLocker 对整个卷加密，比只加密单个文件更完整",[100,3969],{},[10,3971,3973],{"id":3972},"课件补充spooling-与虚拟设备","课件补充：SPOOLING 与虚拟设备",[15,3975,3977],{"id":3976},"_1-什么是-spooling","1. 什么是 SPOOLING？",[20,3979,3980],{},"SPOOLING 又叫假脱机技术。它的思想是：用磁盘上的缓冲区模拟外围设备，把独占设备虚拟成可共享设备。课件中把用于缓冲的存储区域称为“井”。",[20,3982,3983],{},"典型例子：",[33,3985,3987],{"className":35,"code":3986,"language":37,"meta":38,"style":38},"打印机 SPOOLING\n网络通信 SPOOLING\n",[40,3988,3989,3994],{"__ignoreMap":38},[43,3990,3991],{"class":45,"line":46},[43,3992,3993],{"class":49},"打印机 SPOOLING\n",[43,3995,3996],{"class":45,"line":53},[43,3997,3998],{"class":49},"网络通信 SPOOLING\n",[15,4000,4002],{"id":4001},"_2-spooling-的组成","2. SPOOLING 的组成",[20,4004,4005],{},"课件列出：",[33,4007,4009],{"className":35,"code":4008,"language":37,"meta":38,"style":38},"输入井\n输出井\n预输入程序\n缓输出程序\n井管理程序\n",[40,4010,4011,4016,4021,4026,4031],{"__ignoreMap":38},[43,4012,4013],{"class":45,"line":46},[43,4014,4015],{"class":49},"输入井\n",[43,4017,4018],{"class":45,"line":53},[43,4019,4020],{"class":49},"输出井\n",[43,4022,4023],{"class":45,"line":59},[43,4024,4025],{"class":49},"预输入程序\n",[43,4027,4028],{"class":45,"line":65},[43,4029,4030],{"class":49},"缓输出程序\n",[43,4032,4033],{"class":45,"line":71},[43,4034,4035],{"class":49},"井管理程序\n",[20,4037,4038],{},"工作理解：",[33,4040,4042],{"className":35,"code":4041,"language":37,"meta":38,"style":38},"用户作业输入 → 先进入输入井\n作业运行 → 从输入井取数据\n作业输出 → 先写入输出井\n输出设备空闲 → 缓输出程序慢慢输出\n",[40,4043,4044,4049,4054,4059],{"__ignoreMap":38},[43,4045,4046],{"class":45,"line":46},[43,4047,4048],{"class":49},"用户作业输入 → 先进入输入井\n",[43,4050,4051],{"class":45,"line":53},[43,4052,4053],{"class":49},"作业运行 → 从输入井取数据\n",[43,4055,4056],{"class":45,"line":59},[43,4057,4058],{"class":49},"作业输出 → 先写入输出井\n",[43,4060,4061],{"class":45,"line":65},[43,4062,4063],{"class":49},"输出设备空闲 → 缓输出程序慢慢输出\n",[15,4065,4067],{"id":4066},"_3-spooling-的意义","3. SPOOLING 的意义",[33,4069,4071],{"className":35,"code":4070,"language":37,"meta":38,"style":38},"提高独占设备利用率\n减少人工干预\n实现虚拟设备\n让多个作业看起来可以同时使用独占设备\n",[40,4072,4073,4078,4083,4088],{"__ignoreMap":38},[43,4074,4075],{"class":45,"line":46},[43,4076,4077],{"class":49},"提高独占设备利用率\n",[43,4079,4080],{"class":45,"line":53},[43,4081,4082],{"class":49},"减少人工干预\n",[43,4084,4085],{"class":45,"line":59},[43,4086,4087],{"class":49},"实现虚拟设备\n",[43,4089,4090],{"class":45,"line":65},[43,4091,4092],{"class":49},"让多个作业看起来可以同时使用独占设备\n",[20,4094,4095],{},"最经典例子：多个进程都“打印”，其实只是把输出放入输出井，真正的打印机按队列慢慢打印。",[100,4097],{},[10,4099,4100],{"id":4100},"重点概念速记",[33,4102,4104],{"className":35,"code":4103,"language":37,"meta":38,"style":38},"I\u002FO 系统：\nI\u002FO 设备 + 接口线路 + 控制部件 + 通道 + 管理软件\n\n字符设备：\n按字节\u002F字符流传输，如键盘、终端、打印机\n\n块设备：\n按块传输，可随机访问，如磁盘、USB\n\nProgrammed I\u002FO：\nCPU 发命令后忙等\n\nInterrupt-driven I\u002FO：\n设备完成后中断 CPU\n\nDMA：\n设备与内存直接传输数据块，CPU 只管开始和结束\n\nI\u002FO Channel：\n能执行 I\u002FO 程序的专用 I\u002FO 处理结构\n\nBuffering：\n平滑 CPU 和设备速度差\n\nDisk Cache：\n用内存缓存磁盘块，减少磁盘访问\n\nSeek Time：\n磁头移动到目标磁道时间\n\nRotational Delay：\n目标扇区转到磁头下方的时间\n\nTransfer Time：\n真正读写数据的时间\n\nFIFO：\n按到达顺序服务\n\nSSTF：\n每次选最近磁道\n\nSCAN：\n电梯算法，单方向扫，到端点或无请求后反向\n\nC-SCAN：\n循环扫描，只单向服务，回程不服务\n\nRAID 0：\n条带化，无冗余，高性能低可靠\n\nRAID 1：\n镜像，高可靠，成本高\n\nRAID 5：\n分布式 parity，常用\n\nRAID 6：\n双 parity，可坏两个盘\n",[40,4105,4106,4111,4116,4120,4125,4130,4134,4139,4144,4148,4154,4160,4165,4171,4177,4182,4188,4194,4199,4205,4211,4216,4222,4228,4233,4239,4245,4250,4256,4262,4267,4273,4279,4284,4290,4296,4301,4307,4313,4318,4324,4330,4335,4341,4347,4352,4358,4364,4369,4375,4381,4386,4392,4398,4403,4409,4415,4420,4426],{"__ignoreMap":38},[43,4107,4108],{"class":45,"line":46},[43,4109,4110],{"class":49},"I\u002FO 系统：\n",[43,4112,4113],{"class":45,"line":53},[43,4114,4115],{"class":49},"I\u002FO 设备 + 接口线路 + 控制部件 + 通道 + 管理软件\n",[43,4117,4118],{"class":45,"line":59},[43,4119,998],{"emptyLinePlaceholder":997},[43,4121,4122],{"class":45,"line":65},[43,4123,4124],{"class":49},"字符设备：\n",[43,4126,4127],{"class":45,"line":71},[43,4128,4129],{"class":49},"按字节\u002F字符流传输，如键盘、终端、打印机\n",[43,4131,4132],{"class":45,"line":77},[43,4133,998],{"emptyLinePlaceholder":997},[43,4135,4136],{"class":45,"line":83},[43,4137,4138],{"class":49},"块设备：\n",[43,4140,4141],{"class":45,"line":89},[43,4142,4143],{"class":49},"按块传输，可随机访问，如磁盘、USB\n",[43,4145,4146],{"class":45,"line":95},[43,4147,998],{"emptyLinePlaceholder":997},[43,4149,4151],{"class":45,"line":4150},10,[43,4152,4153],{"class":49},"Programmed I\u002FO：\n",[43,4155,4157],{"class":45,"line":4156},11,[43,4158,4159],{"class":49},"CPU 发命令后忙等\n",[43,4161,4163],{"class":45,"line":4162},12,[43,4164,998],{"emptyLinePlaceholder":997},[43,4166,4168],{"class":45,"line":4167},13,[43,4169,4170],{"class":49},"Interrupt-driven I\u002FO：\n",[43,4172,4174],{"class":45,"line":4173},14,[43,4175,4176],{"class":49},"设备完成后中断 CPU\n",[43,4178,4180],{"class":45,"line":4179},15,[43,4181,998],{"emptyLinePlaceholder":997},[43,4183,4185],{"class":45,"line":4184},16,[43,4186,4187],{"class":49},"DMA：\n",[43,4189,4191],{"class":45,"line":4190},17,[43,4192,4193],{"class":49},"设备与内存直接传输数据块，CPU 只管开始和结束\n",[43,4195,4197],{"class":45,"line":4196},18,[43,4198,998],{"emptyLinePlaceholder":997},[43,4200,4202],{"class":45,"line":4201},19,[43,4203,4204],{"class":49},"I\u002FO Channel：\n",[43,4206,4208],{"class":45,"line":4207},20,[43,4209,4210],{"class":49},"能执行 I\u002FO 程序的专用 I\u002FO 处理结构\n",[43,4212,4214],{"class":45,"line":4213},21,[43,4215,998],{"emptyLinePlaceholder":997},[43,4217,4219],{"class":45,"line":4218},22,[43,4220,4221],{"class":49},"Buffering：\n",[43,4223,4225],{"class":45,"line":4224},23,[43,4226,4227],{"class":49},"平滑 CPU 和设备速度差\n",[43,4229,4231],{"class":45,"line":4230},24,[43,4232,998],{"emptyLinePlaceholder":997},[43,4234,4236],{"class":45,"line":4235},25,[43,4237,4238],{"class":49},"Disk Cache：\n",[43,4240,4242],{"class":45,"line":4241},26,[43,4243,4244],{"class":49},"用内存缓存磁盘块，减少磁盘访问\n",[43,4246,4248],{"class":45,"line":4247},27,[43,4249,998],{"emptyLinePlaceholder":997},[43,4251,4253],{"class":45,"line":4252},28,[43,4254,4255],{"class":49},"Seek Time：\n",[43,4257,4259],{"class":45,"line":4258},29,[43,4260,4261],{"class":49},"磁头移动到目标磁道时间\n",[43,4263,4265],{"class":45,"line":4264},30,[43,4266,998],{"emptyLinePlaceholder":997},[43,4268,4270],{"class":45,"line":4269},31,[43,4271,4272],{"class":49},"Rotational Delay：\n",[43,4274,4276],{"class":45,"line":4275},32,[43,4277,4278],{"class":49},"目标扇区转到磁头下方的时间\n",[43,4280,4282],{"class":45,"line":4281},33,[43,4283,998],{"emptyLinePlaceholder":997},[43,4285,4287],{"class":45,"line":4286},34,[43,4288,4289],{"class":49},"Transfer Time：\n",[43,4291,4293],{"class":45,"line":4292},35,[43,4294,4295],{"class":49},"真正读写数据的时间\n",[43,4297,4299],{"class":45,"line":4298},36,[43,4300,998],{"emptyLinePlaceholder":997},[43,4302,4304],{"class":45,"line":4303},37,[43,4305,4306],{"class":49},"FIFO：\n",[43,4308,4310],{"class":45,"line":4309},38,[43,4311,4312],{"class":49},"按到达顺序服务\n",[43,4314,4316],{"class":45,"line":4315},39,[43,4317,998],{"emptyLinePlaceholder":997},[43,4319,4321],{"class":45,"line":4320},40,[43,4322,4323],{"class":49},"SSTF：\n",[43,4325,4327],{"class":45,"line":4326},41,[43,4328,4329],{"class":49},"每次选最近磁道\n",[43,4331,4333],{"class":45,"line":4332},42,[43,4334,998],{"emptyLinePlaceholder":997},[43,4336,4338],{"class":45,"line":4337},43,[43,4339,4340],{"class":49},"SCAN：\n",[43,4342,4344],{"class":45,"line":4343},44,[43,4345,4346],{"class":49},"电梯算法，单方向扫，到端点或无请求后反向\n",[43,4348,4350],{"class":45,"line":4349},45,[43,4351,998],{"emptyLinePlaceholder":997},[43,4353,4355],{"class":45,"line":4354},46,[43,4356,4357],{"class":49},"C-SCAN：\n",[43,4359,4361],{"class":45,"line":4360},47,[43,4362,4363],{"class":49},"循环扫描，只单向服务，回程不服务\n",[43,4365,4367],{"class":45,"line":4366},48,[43,4368,998],{"emptyLinePlaceholder":997},[43,4370,4372],{"class":45,"line":4371},49,[43,4373,4374],{"class":49},"RAID 0：\n",[43,4376,4378],{"class":45,"line":4377},50,[43,4379,4380],{"class":49},"条带化，无冗余，高性能低可靠\n",[43,4382,4384],{"class":45,"line":4383},51,[43,4385,998],{"emptyLinePlaceholder":997},[43,4387,4389],{"class":45,"line":4388},52,[43,4390,4391],{"class":49},"RAID 1：\n",[43,4393,4395],{"class":45,"line":4394},53,[43,4396,4397],{"class":49},"镜像，高可靠，成本高\n",[43,4399,4401],{"class":45,"line":4400},54,[43,4402,998],{"emptyLinePlaceholder":997},[43,4404,4406],{"class":45,"line":4405},55,[43,4407,4408],{"class":49},"RAID 5：\n",[43,4410,4412],{"class":45,"line":4411},56,[43,4413,4414],{"class":49},"分布式 parity，常用\n",[43,4416,4418],{"class":45,"line":4417},57,[43,4419,998],{"emptyLinePlaceholder":997},[43,4421,4423],{"class":45,"line":4422},58,[43,4424,4425],{"class":49},"RAID 6：\n",[43,4427,4429],{"class":45,"line":4428},59,[43,4430,4431],{"class":49},"双 parity，可坏两个盘\n",[100,4433],{},[10,4435,4436],{"id":4436},"考试高频点",[15,4438,4440],{"id":4439},"_1-简答题高频","1. 简答题高频",[33,4442,4444],{"className":35,"code":4443,"language":37,"meta":38,"style":38},"1. I\u002FO 设备分为哪三类？\n2. I\u002FO 设备有哪些差异？\n3. Programmed I\u002FO、Interrupt-driven I\u002FO、DMA 区别？\n4. DMA 的工作过程和优点？\n5. 通道方式和 DMA 的区别？\n6. I\u002FO 设计目标为什么是效率和通用性？\n7. Logical I\u002FO、Device I\u002FO、Scheduling and Control 分别做什么？\n8. 单缓冲、双缓冲、循环缓冲区别？\n9. 磁盘访问时间由哪些部分组成？\n10. FIFO、SSTF、SCAN、C-SCAN 区别？\n11. N-step-SCAN 和 FSCAN 解决什么问题？\n12. RAID 0、1、5、6 区别？\n13. Disk Cache 和 Buffering 区别？\n14. UNIX 为什么把设备看作特殊文件？\n15. SPOOLING 如何把独占设备虚拟成共享设备？\n16. 什么是设备独立性？\n",[40,4445,4446,4453,4460,4467,4474,4481,4488,4496,4504,4512,4520,4528,4536,4544,4552,4560],{"__ignoreMap":38},[43,4447,4448,4450],{"class":45,"line":46},[43,4449,611],{"class":610},[43,4451,4452],{"class":49}," I\u002FO 设备分为哪三类？\n",[43,4454,4455,4457],{"class":45,"line":53},[43,4456,619],{"class":610},[43,4458,4459],{"class":49}," I\u002FO 设备有哪些差异？\n",[43,4461,4462,4464],{"class":45,"line":59},[43,4463,627],{"class":610},[43,4465,4466],{"class":49}," Programmed I\u002FO、Interrupt-driven I\u002FO、DMA 区别？\n",[43,4468,4469,4471],{"class":45,"line":65},[43,4470,635],{"class":610},[43,4472,4473],{"class":49}," DMA 的工作过程和优点？\n",[43,4475,4476,4478],{"class":45,"line":71},[43,4477,643],{"class":610},[43,4479,4480],{"class":49}," 通道方式和 DMA 的区别？\n",[43,4482,4483,4485],{"class":45,"line":77},[43,4484,651],{"class":610},[43,4486,4487],{"class":49}," I\u002FO 设计目标为什么是效率和通用性？\n",[43,4489,4490,4493],{"class":45,"line":83},[43,4491,4492],{"class":610},"7.",[43,4494,4495],{"class":49}," Logical I\u002FO、Device I\u002FO、Scheduling and Control 分别做什么？\n",[43,4497,4498,4501],{"class":45,"line":89},[43,4499,4500],{"class":610},"8.",[43,4502,4503],{"class":49}," 单缓冲、双缓冲、循环缓冲区别？\n",[43,4505,4506,4509],{"class":45,"line":95},[43,4507,4508],{"class":610},"9.",[43,4510,4511],{"class":49}," 磁盘访问时间由哪些部分组成？\n",[43,4513,4514,4517],{"class":45,"line":4150},[43,4515,4516],{"class":610},"10.",[43,4518,4519],{"class":49}," FIFO、SSTF、SCAN、C-SCAN 区别？\n",[43,4521,4522,4525],{"class":45,"line":4156},[43,4523,4524],{"class":610},"11.",[43,4526,4527],{"class":49}," N-step-SCAN 和 FSCAN 解决什么问题？\n",[43,4529,4530,4533],{"class":45,"line":4162},[43,4531,4532],{"class":610},"12.",[43,4534,4535],{"class":49}," RAID 0、1、5、6 区别？\n",[43,4537,4538,4541],{"class":45,"line":4167},[43,4539,4540],{"class":610},"13.",[43,4542,4543],{"class":49}," Disk Cache 和 Buffering 区别？\n",[43,4545,4546,4549],{"class":45,"line":4173},[43,4547,4548],{"class":610},"14.",[43,4550,4551],{"class":49}," UNIX 为什么把设备看作特殊文件？\n",[43,4553,4554,4557],{"class":45,"line":4179},[43,4555,4556],{"class":610},"15.",[43,4558,4559],{"class":49}," SPOOLING 如何把独占设备虚拟成共享设备？\n",[43,4561,4562,4565],{"class":45,"line":4184},[43,4563,4564],{"class":610},"16.",[43,4566,4567],{"class":49}," 什么是设备独立性？\n",[15,4569,4571],{"id":4570},"_2-计算题高频","2. 计算题高频",[33,4573,4575],{"className":35,"code":4574,"language":37,"meta":38,"style":38},"磁盘调度：\n给初始磁头位置、方向、请求序列，求 FIFO \u002F SSTF \u002F SCAN \u002F C-SCAN 总移动磁道数。\n\n旋转优化：\n给转速、扇区数、处理时间，求顺序存放读取时间和优化分布读取时间。\n\n缓冲时间：\n无缓冲 T + C\n单缓冲 max(C, T) + M\n双缓冲根据 C 和 T 判断接近 T 或 C + M\n\n磁盘访问时间：\nTa = Ts + 1\u002F(2r) + b\u002F(rN)\n",[40,4576,4577,4582,4587,4591,4596,4601,4605,4610,4615,4620,4625,4629,4634],{"__ignoreMap":38},[43,4578,4579],{"class":45,"line":46},[43,4580,4581],{"class":49},"磁盘调度：\n",[43,4583,4584],{"class":45,"line":53},[43,4585,4586],{"class":49},"给初始磁头位置、方向、请求序列，求 FIFO \u002F SSTF \u002F SCAN \u002F C-SCAN 总移动磁道数。\n",[43,4588,4589],{"class":45,"line":59},[43,4590,998],{"emptyLinePlaceholder":997},[43,4592,4593],{"class":45,"line":65},[43,4594,4595],{"class":49},"旋转优化：\n",[43,4597,4598],{"class":45,"line":71},[43,4599,4600],{"class":49},"给转速、扇区数、处理时间，求顺序存放读取时间和优化分布读取时间。\n",[43,4602,4603],{"class":45,"line":77},[43,4604,998],{"emptyLinePlaceholder":997},[43,4606,4607],{"class":45,"line":83},[43,4608,4609],{"class":49},"缓冲时间：\n",[43,4611,4612],{"class":45,"line":89},[43,4613,4614],{"class":49},"无缓冲 T + C\n",[43,4616,4617],{"class":45,"line":95},[43,4618,4619],{"class":49},"单缓冲 max(C, T) + M\n",[43,4621,4622],{"class":45,"line":4150},[43,4623,4624],{"class":49},"双缓冲根据 C 和 T 判断接近 T 或 C + M\n",[43,4626,4627],{"class":45,"line":4156},[43,4628,998],{"emptyLinePlaceholder":997},[43,4630,4631],{"class":45,"line":4162},[43,4632,4633],{"class":49},"磁盘访问时间：\n",[43,4635,4636],{"class":45,"line":4167},[43,4637,4638],{"class":49},"Ta = Ts + 1\u002F(2r) + b\u002F(rN)\n",[15,4640,4642],{"id":4641},"_3-最容易混淆的点","3. 最容易混淆的点",[114,4644,4645,4655],{},[117,4646,4647],{},[120,4648,4649,4652],{},[123,4650,4651],{},"易混点",[123,4653,4654],{},"正确区分",[133,4656,4657,4665,4673,4681,4689,4697,4705,4713],{},[120,4658,4659,4662],{},[138,4660,4661],{},"Buffer vs Cache",[138,4663,4664],{},"Buffer 为了解决速度差；Cache 为了减少重复访问",[120,4666,4667,4670],{},[138,4668,4669],{},"Interrupt vs DMA",[138,4671,4672],{},"中断仍可能频繁让 CPU 介入；DMA 传一整块后才中断",[120,4674,4675,4678],{},[138,4676,4677],{},"DMA vs Channel",[138,4679,4680],{},"DMA 负责数据块搬运；Channel 可执行 I\u002FO 程序",[120,4682,4683,4686],{},[138,4684,4685],{},"SCAN vs LOOK",[138,4687,4688],{},"SCAN 通常到端点；LOOK 到该方向最后一个请求",[120,4690,4691,4694],{},[138,4692,4693],{},"SCAN vs C-SCAN",[138,4695,4696],{},"SCAN 双向服务；C-SCAN 单向服务，回程不服务",[120,4698,4699,4702],{},[138,4700,4701],{},"RAID 0 vs RAID 1",[138,4703,4704],{},"RAID 0 高性能无冗余；RAID 1 镜像高可靠",[120,4706,4707,4710],{},[138,4708,4709],{},"RAID 4 vs RAID 5",[138,4711,4712],{},"RAID 4 专用 parity 盘；RAID 5 parity 分布到各盘",[120,4714,4715,4718],{},[138,4716,4717],{},"字符设备 vs 块设备",[138,4719,4720],{},"字符设备按流；块设备按块，可随机访问",[100,4722],{},[10,4724,4725],{"id":4725},"一句话总复习",[20,4727,4728],{},[26,4729,4730],{},"Chapter 11 的核心是：操作系统通过抽象、分层、缓冲、中断、DMA、通道、调度、RAID 和缓存，把复杂且慢速的 I\u002FO 设备管理成统一、高效、可靠的系统资源。",[4732,4733,4734],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":38,"searchDepth":53,"depth":53,"links":4736},[4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813],{"id":17,"depth":53,"text":18},{"id":108,"depth":53,"text":109},{"id":171,"depth":53,"text":172},{"id":240,"depth":53,"text":241},{"id":257,"depth":53,"text":258},{"id":310,"depth":53,"text":311},{"id":356,"depth":53,"text":357},{"id":425,"depth":53,"text":426},{"id":467,"depth":53,"text":468},{"id":515,"depth":53,"text":516},{"id":551,"depth":53,"text":552},{"id":562,"depth":53,"text":563},{"id":596,"depth":53,"text":597},{"id":669,"depth":53,"text":670},{"id":720,"depth":53,"text":721},{"id":791,"depth":53,"text":792},{"id":839,"depth":53,"text":840},{"id":915,"depth":53,"text":916},{"id":1025,"depth":53,"text":1026},{"id":1061,"depth":53,"text":1062},{"id":1101,"depth":53,"text":1102},{"id":1128,"depth":53,"text":1129},{"id":1366,"depth":53,"text":1367},{"id":1403,"depth":53,"text":1404},{"id":1518,"depth":53,"text":1519},{"id":1548,"depth":53,"text":1549},{"id":1561,"depth":53,"text":1562},{"id":1568,"depth":53,"text":1569},{"id":2281,"depth":53,"text":2282},{"id":2303,"depth":53,"text":2304},{"id":2484,"depth":53,"text":2485},{"id":2519,"depth":53,"text":2520},{"id":2556,"depth":53,"text":2557},{"id":2600,"depth":53,"text":2601},{"id":2625,"depth":53,"text":2626,"children":4772},[4773,4774],{"id":2639,"depth":59,"text":2452},{"id":2672,"depth":59,"text":2469},{"id":2700,"depth":53,"text":2701},{"id":2910,"depth":53,"text":2911},{"id":2953,"depth":53,"text":2954},{"id":2991,"depth":53,"text":2992},{"id":3042,"depth":53,"text":3043},{"id":3074,"depth":53,"text":3075},{"id":3114,"depth":53,"text":3115},{"id":3148,"depth":53,"text":3149},{"id":3190,"depth":53,"text":3191},{"id":3224,"depth":53,"text":3225},{"id":3373,"depth":53,"text":3374},{"id":3408,"depth":53,"text":3409},{"id":3473,"depth":53,"text":3474},{"id":3502,"depth":53,"text":3503},{"id":3526,"depth":53,"text":3527},{"id":3556,"depth":53,"text":3557},{"id":3563,"depth":53,"text":3564},{"id":3579,"depth":53,"text":3580},{"id":3598,"depth":53,"text":3599},{"id":3648,"depth":53,"text":3649},{"id":3655,"depth":53,"text":3656},{"id":3662,"depth":53,"text":3663},{"id":3678,"depth":53,"text":3679},{"id":3721,"depth":53,"text":3722},{"id":3751,"depth":53,"text":3752},{"id":3758,"depth":53,"text":3759},{"id":3785,"depth":53,"text":3786},{"id":3792,"depth":53,"text":3793},{"id":3823,"depth":53,"text":3824},{"id":3830,"depth":53,"text":3831},{"id":3862,"depth":53,"text":3863},{"id":3930,"depth":53,"text":3931},{"id":3937,"depth":53,"text":3938},{"id":3976,"depth":53,"text":3977},{"id":4001,"depth":53,"text":4002},{"id":4066,"depth":53,"text":4067},{"id":4439,"depth":53,"text":4440},{"id":4570,"depth":53,"text":4571},{"id":4641,"depth":53,"text":4642},{"order":4156},"\u002Fsource\u002Fcs\u002Fos\u002Fnote\u002Fchap11",{"title":5,"description":38},"source\u002Fcs\u002Fos\u002Fnote\u002Fchap11","VNKpSZ44gjsjb-EF9W4R8JumdHWgu7kHFwRJSnwTOhk",null,1784032891726]