当前课程知识点:操作系统 >  第三讲 启动、中断、异常和系统调用 >  3.2 系统启动流程 >  3.2 系统启动流程

返回《操作系统》慕课在线视频课程列表

3.2 系统启动流程在线视频

3.2 系统启动流程

下一节:3.3 中断、异常和系统调用比较

返回《操作系统》慕课在线视频列表

3.2 系统启动流程课程教案、知识点、字幕

好 在刚才的描述当中

我们说清楚了计算机在启动的时候

它从什么地方去读第一条指令

从磁盘上的什么地方去读第一块数据

那接下来 我们会把刚才这个过程做进一步的细化

也就是说系统启动的时候的流程

按照我们刚才说的流程

应该说我加电之后去读BIOS

BIOS去读你的加载程序

加载程序去读内核映像

这个过程实际上我们又可以把它细化下去

因为我在加载程序的时候

我BIOS里头起来

我们说直接去读bootloader

但实际上这个过程它并不能直接进行

比如说我们在最早的时候

系统里只有一个分区

上来之后我就直接到分区里找文件系统了

但是对于我们现在来说

所有的计算机

或者大多数的计算机里头都不止一个分区

可能会有几个分区

每个分区上会装不同的系统

那这个时候就在前边加上一个主引导记录

这个主引导记录是说

我要从哪个文件系统里

去读我的这个加载程序

好 有了主引导记录之后

然后我就进到当前哪个分区里头

分区里头又有一个分区的引导扇区

这个活动分区的引导扇区

再来加载我们刚才说到的加载程序

这个过程当中实际上我们就需要知道中间

这几个部分它的格式是什么样子

如果你不知道这个格式的话

那你写出来的程序

最终存到磁盘上

机器是不能够从里头认识的

那我们具体说起来呢

有这样几个过程

首先我们在前面已经说过

CPU加电完成它的初始化

到一个确定的状态去读第一条指令

我们需要知道CPU初始化之后

它的代码段段寄存器

和当前指令指针寄存器这两个的内容

算出来它的第一条指令在内存当中的什么地方

有了这个之后 说我们在这里头呢

这是它计算的依据

因为它是实模式

所以是CS和IP都是16位的

CS左移四位加在一起算出我的位置

这个时候 我放到内存当中的BIOS的位置

只能是在最底下的一兆

原因在于这时候它是20位的地址

有了这个之后我们就直接进到BIOS里执行

BIOS里 我们刚才说

它是从磁盘上去读你的加载程序

那实际上在这里头它还有很多的事情要做

首先第一个是硬件自检

也就是说我们有可能加电起来之后

你的内存出错 那整个后边就没法做

这时候问大家

你见到过你的计算机如果内存出错了

你的显示器肯定是不工作的

那这时候我怎么知道出这个问题了

我们说在计算机系统里头

它的加电自检

它上来之后是看最关键的这几个部分是不是在工作

如果说检测到

这就相当于在自检的时候你需要知道

关键的内存 显卡这几部分是否存在

或者说干脆你的机器里就没有显卡

如果存在的话 它的工作状态是什么样子

把这些设备完成每一个

这些关键性的接口卡里头

它自己也有自己的初始化程序

这些初始化程序完成之后

那我就认为关键的设备是可以的了

然后这时候 我们再来执行系统的初始化

BIOS的初始化 这时候它是干什么呢

我们说我们现在的系统

很多都是可以即插即用的

那如果说我想从一个USB接口的光驱里启动

那你怎么启得来

那这时候呢 在这个BIOS里的自检

现在是能够做到系统的自检

把这些检测并且配置你的这些即插即用的设备

这些工作做完之后

我就知道我现在的系统里到底都连了哪些硬件

好 我们说在BIOS里有一个系统配置表

这个配置表就是我们这里所说的

ESCD 就是扩展系统配置数据

那用这个数据 我就能知道

我当前系统里都有些什么样的设备

每次加电之后有可能你会插上新的卡

或者说拔掉已有的卡

这个数据是会变得

每次加电的时候都必须做

做完之后说我就把控制权

转到我们从外部读进来的数据里头

读进来的代码里

那这就是按我们在BIOS里指定的顺序

从软盘 硬盘或者光盘或者你指定的其他设备上

读进你的第一块扇区

读进来之后 那这时候

我们说在我们现在说的这个过程里头

有多个分区

好 这时我就有一个主引导记录

在这个主引导记录里头

我们需要知道的内容是它的格式

那说在里头呢

我们说它有512字节

但是在这 你只能说我可以用到的是446

那其他部分是什么

原因在于我在这里头

我还有后边有多个分区的时候

这些分区的状态是什么样的

你也要存到这512字节里头

所以这样的话

你就只有446个字节的内容来执行你的启动代码

在这启动代码里我需要干啥呢

需要知道我这些分区表是不是正确的

如果说你的分区表是错的

那这时候我的程序是没法正常加载的

然后还要加载并跳转到

你的活动分区的引导记录上去

第二个是你的分区表

然后我们对于所有的引导扇区

都有一个结束标志

这个结束标是55AA

有了这个之后 它才认为这是一个合法的主引导记录

那有了这个之后

它就会跳到你活动分区的引导扇区上去

那在这仍然是一样的

它也有一个它需要了解的格式

那在这里头 就开始有文件卷的信息

这个结束标志跟刚才那个主引导记录是一样的

好 在这基础上呢

说它有启动代码

那启动代码就是一条跳转指令

那这个跳转指令跟我们刚才说到的有什么区别呢

那这地方它就跟平台相关了 你的CPU不同

这个地方这条指令肯定也是不一样的

然后空下的其他地方呢

再是我的启动代码

这个地方的启动代码就需要认识你的格式说

我这个加载程序不是存在在512字节里头的

存在别处 它在哪

那就靠你这里的代码来约定说我放在哪

而这里的代码实际上是我们存在硬盘上的

或者说你的软盘上的

这个时候我是可以改动的

那改动完了之后

我就可以把我的加载程序放在任意的地方

只要我在这标识出来我上哪去认识它就可以

好 接下来我们说加载程序的细化

那在这里头呢

我们说加载程序它首先不是直接去加载你的内核

而是去从文件系统当中

这时候加载程序我是能够认识文件系统的格式的

从里头读一个启动配置文件

这个启动配置文件

在不同的操作系统里它是会不一样的

你比如说Windows和Linux都有自己的格式

这样的话它Windows和Linux

都有自己的加载程序的格式

依据这个选择你启动的这种参数

比如说我是在正常启动

还是说我是在安全模式启动

还是说我是在一个调试状态下启动我的系统

那这些区别都会读出来之后

它导致我在加载内核的时候的一些内核会不一样

或者说我加载的时候的参数会不一样

好 依据配置去加载内核

那么到这 我们把这个过程描述清楚了

说到这是不是会说

是说的足够详细吗

如果说我要来写实际程序

知道这些是不是就足够了

那我可以告诉大家

我这的介绍仍然是很粗的

如果说你要想写实际的程序

那么我们需要知道CPU的手册

它在加电的时候

处于什么样的状态 BIOS里的规范

我在从磁盘上什么地方读的第一条

它的格式是什么样子

那到这呢 你还需要知道

我的内核编译的时候

它的一些相应的信息

那我们说在计算机启动的过程当中

我们有很多需要考虑的因素

这种考虑的因素又有很多细节

和我们实际的硬件环境

或者说周围的情况密切相关

那是不是我们需要在每一种硬件平台上

我都要制定一个自己的启动流程呢

那实际上不是这样的

我们在实际的工业界

它制定的一组相应的标准

BIOS就是我们现在广泛使用的

在PC机上的启动流程标准

那在这里头 它是主板上的一段程序

那它可以完成系统的启动

但是从它最早出现的时候

是70年代后期

那在这应该是几十年的变化过程当中

它已经有了许多的发展

这呢 我们列出了几种它的变化

刚才说到那个主引导记录这一部分

这一部分实际上相当于是说最早的BIOS

它是从主板上加电自检之后

进到你的磁盘上的唯一的一个分区上

去加载它的引导记录去了

那有了多分区磁盘之后

就相当于我一个系统有多个磁盘 有多个分区

那这时候我就需要选择从哪个分区启动

由于这种需求呢

在上边加了一个主引导记录

这个主引导记录呢

告诉你我从这几个分区里的选择了

其中的活动分区来进行启动

那这也有了我们这里的第一个

然后从这里头我们也可以看到

当时谁在里头呢

主引导记录里头我只能描述最多四个分区

每个占16个字节

我全部有512个字节

你四个分区用到了64

那再多了的话不行了

而我们现在用到计算机很多的分区会大于四个

那这时候怎么办呢

这时候就有了这里说的GPT

全局唯一标识分区表

这个分区表 可以在我的分区表里

描述更多的分区结构

有了这个之后 我就不会受那四个的限制

所以这是BIOS的两个发展

然后PXE实际上是网络启动的一个标准

也就是说我的机器启来了之后

我想通过局域网或者说其他的网络

连到服务器上 去从服务器上

下载我的内核镜像来执行

那这时候怎么办呢

就是这是它的标准

那如果从这个角度来讲

你要从网络启动

好 这时候就你的BIOS里加网络协议栈

那从这个角度来讲的话

这个BIOS的功能也会越做越复杂

甚至于在一些系统里头

那它就是一个小的操作系统

好 那在这个变化的过程当中呢

从我们刚才讲解注意到

BIOS它可以有一些局部的修改

来完善对后续的支持

但这种支持总是会受到前边的制约

比如说在我们的主引导记录里头

为了支持多分区

那我就把中间那地方加成了磁盘上的主引导记录

然后再加上活动分区里头的这个引导记录

多了两层 实际上多这两层呢

它的意义并不是特别的必要

如果说我设计一个全新的话

那这件事情我是不需要这么做的

正是由于这种原因

那我们又定义了一种新的这个启动规范

那就是UEFI 统一可扩展固件接口

这个接口 它想达到的目标是在所有平台上

一致的提供操作系统的启动服务

为了做到这一点呢

实际上它这个标准呢

应该是从90年代就开始出它的第一个版本

一直到现在呢

都在不断的演变的过程当中

在上这课之前呢

我查了一下它的最新状态

它的最后一次修改我能看到的是2015年的1月份

好 在这里它会增加什么呢

那我在这举一个例子

说我们要想从磁盘上启动

我只要能拿到一张新的磁盘塞到你的机器里

这台机器剩下的事情我就都可以控制

那这样的话 我这个系统

对于一些关键性的服务器

我允许这样做是有麻烦的

好 针对这种麻烦

在这个UEFI规范里头呢

就定一个可信启动流程

在这个流程里头呢

BIOS起来以后

它在读磁盘上的引导记录的时候

那它是会对这个引导记录的可信性进行一个检查

也就是说它会让里头有一个签名

你只有我满足我签名的这些引导记录我才会读进来

才会把控制权交给你

使得我在整个的启动流程当中

可信的这些介质上的这些代码

可以在我的系统当中运行

从而提高了从启动的阶段

减少了这种安全的风险

那我们说 这个修改的过程

还会再继续下去

随着这个周边环境的变化

在这个规范里头加新的内容

慢慢的 也会希望这个规范能够有更广泛的适用范围

操作系统课程列表:

第零讲 在线教学环境准备

-0.1 Piazza讨论区

--piazza访问和使用

--html

-0.2 在线实验平台

--实验平台使用帮助

--平台使用帮助

--Gitlab使用帮助

--IBM内部账号初始化

-0.2在线实验平台

--Raw HTML

第一讲 操作系统概述

-1.1 课程概述

--视频

-第一讲 操作系统概述--练习

-1.2 教学安排

--视频

-1.3 什么是操作系统

--Video

-1.4 为什么学习操作系统,如何学习操作系统

--Video

-1.5 操作系统实例

--视频

-1.6 操作系统的演变

--视频

-1.7 操作系统结构

--视频

第二讲 实验零 操作系统实验环境准备

-2.1 前言和国内外现状

--2.1 前言和国内外现状

-2.2 OS实验目标

--2.2 OS实验目标

-2.3 8个OS实验概述

--2.3 8个OS实验概述

-2.4 实验环境搭建

--2.4 实验环境搭建

-2.5 x86-32硬件介绍

--2.5 x86-32硬件介绍

-2.6 ucore部分编程技巧

--2.6 ucore部分编程技巧

-2.7 演示实验操作过程

--2.7 演示实验操作过程

--Q6

--Q7

--Q10

第三讲 启动、中断、异常和系统调用

-3.1 BIOS

--3.1 BIOS

-3.2 系统启动流程

--3.2 系统启动流程

-3.3 中断、异常和系统调用比较

--3.3 中断、异常和系统调用比较

-第三讲 启动、中断、异常和系统调用--3.3 中断、异常和系统调用比较

-3.4 系统调用

--3.4 系统调用

-第三讲 启动、中断、异常和系统调用--3.4 系统调用

-3.5 系统调用示例

--3.5 系统调用示例

-3.6 ucore+系统调用代码

--3.6 ucore+系统调用代码

第四讲 实验一 bootloader启动ucore os

-4.1 启动顺序

--4.1 启动顺序

-4.2 C函数调用的实现

--4.2 C函数调用的实现

-4.3 GCC内联汇编

--4.3 GCC内联汇编

-4.4 x86中断处理过程

--4.4 x86中断处理过程

-4.5 练习一

--4.5 练习一

-4.6 练习二

--4.6 练习二

-4.7 练习三

--4.7 练习三

-4.8 练习四 练习五

--4.8 练习四练习五

-4.9 练习六

--4.9 练习六

第五讲 物理内存管理: 连续内存分配

-5.1 计算机体系结构和内存层次

--5.1 计算机体系结构和内存层次

-5.2 地址空间和地址生成

--5.2 地址空间和地址生成

-5.3 连续内存分配

--5.3 连续内存分配

-5.4 碎片整理

--5.4 碎片整理

-5.5 伙伴系统

--5.5 伙伴系统

-第五讲 物理内存管理: 连续内存分配--5.6 练习

第六讲 物理内存管理: 非连续内存分配

-6.1 非连续内存分配的需求背景

--6.1 非连续内存分配的需求背景

-6.2 段式存储管理

-- 6.2 段式存储管理

-6.3 页式存储管理

--6.3 页式存储管理

-6.4 页表概述

--6.4 页表概述

-6.5 快表和多级页表

--6.5 快表和多级页表

-6.6 反置页表

--6.6 反置页表

-6.7 段页式存储管理

--6.7 段页式存储管理

-第六讲 物理内存管理: 非连续内存分配--6.8 练习

第七讲 实验二 物理内存管理

-7.1 了解x86保护模式中的特权级

--7.1 了解x86保护模式中的特权级

-第七讲 实验二 物理内存管理--7.1 了解x86保护模式中的特权级

-7.2 了解特权级切换过程

--7.2 了解特权级切换过程

-第七讲 实验二 物理内存管理--7.2 了解特权级切换过程

-7.3 了解段/页表

--7.3 了解段/页表

-第七讲 实验二 物理内存管理--7.3 了解段/页表

-7.4 了解UCORE建立段/页表

--7.4 了解ucore建立段/页表

-第七讲 实验二 物理内存管理--7.4 了解UCORE建立段/页表

-7.5 演示lab2实验环节

--7.5 演示lab2实验环节

第八讲 虚拟存储概念

-8.1 虚拟存储的需求背景

--8.1 虚拟存储的需求背景

-8.2 覆盖和交换

--8.2 覆盖和交换

-8.3 局部性原理

--8.3 局部性原理

-8.4 虚拟存储概念

--8.4 虚拟存储概念

-8.5 虚拟页式存储

--8.5 虚拟页式存储

-8.6 缺页异常

--8.6 缺页异常

第九讲 页面置换算法

-9.1 页面置换算法的概念

--9.1 页面置换算法的概念

-9.2 最优算法、先进先出算法和最近最久未使用算法

--9.2 最优算法、先进先出算法和最近最久未使用算法

-第九讲 页面置换算法--9.2 最优算法、先进先出算法和最近最久未使用算法

-9.3 时钟置换算法和最不常用算法

--9.3 时钟置换算法和最不常用算法

-第九讲 页面置换算法--9.3 时钟置换算法和最不常用算法

-9.4 Belady现象和局部置换算法比较

--9.4 Belady现象和局部置换算法比较

-第九讲 页面置换算法--9.4 Belady现象和局部置换算法比较

-9.5 工作集置换算法

--9.5 工作集置换算法

-第九讲 页面置换算法--9.5 工作集置换算法

-9.6 缺页率置换算法

--9.6 缺页率置换算法

-第九讲 页面置换算法--9.6 缺页率置换算法

-9.7 抖动和负载控制

--9.7 抖动和负载控制

第十讲 实验三 虚拟内存管理

-10.1 实验目标:虚存管理

--10.1 实验目标:虚存管理

-第十讲 实验三 虚拟内存管理--10.1 实验目标:虚存管理

-10.2 回顾历史和了解当下

-- 10.2 回顾历史和了解当下

-第十讲 实验三 虚拟内存管理--10.2 回顾历史和了解当下

-10.3 处理流程、关键数据结构和功能

--10.3 处理流程、关键数据结构和功能

-第十讲 实验三 虚拟内存管理--10.3 处理流程、关键数据结构和功能

-10.4 页访问异常

--10.4 页访问异常

-第十讲 实验三 虚拟内存管理--10.4 页访问异常

-10.5 页换入换出机制

--10.5 页换入换出机制

-第十讲 实验三 虚拟内存管理--10.5 页换入换出机制

第十一讲 进程和线程

-11.1 进程的概念

--11.1 进程的概念

-第十一讲 进程和线程--11.1 进程的概念

-11.2 进程控制块

--11.2 进程控制块

-第十一讲 进程和线程--11.2 进程控制块

-11.3 进程状态

--11.3 进程状态

-第十一讲 进程和线程--11.3 进程状态

-11.4 三状态进程模型

--11.4 三状态进程模型

-11.5 挂起进程模型

--11.5 挂起进程模型

-第十一讲 进程和线程--11.5 挂起进程模型

-11.6 线程的概念

--11.6 线程的概念

-第十一讲 进程和线程--11.6 线程的概念

-11.7 用户线程

--11.7 用户线程

-第十一讲 进程和线程--11.7 用户线程

-11.8 内核线程

--11.8 内核线程

-第十一讲 进程和线程--11.8 内核线程

第十二讲 进程控制

-12.1 进程切换

--12.1 进程切换

-第十二讲 进程控制--12.1 进程切换

-12.2 进程创建

--12.2 进程创建

-第十二讲 进程控制--12.2 进程创建

-12.3 进程加载

--12.3 进程加载

-第十二讲 进程控制--12.3 进程加载

-12.4 进程等待与退出

--12.4 进程等待与退出

-第十二讲 进程控制--12.4 进程等待与退出

第十三讲 实验四 内核线程管理

-13.1 总体介绍

--13.1 总体介绍

-13.2 关键数据结构

--13.2 关键数据结构

-13.3 执行流程

--13.3 执行流程

-13.4 实际操作

--13.4 实际操作

第十四讲 实验五 用户进程管理

-14.1 总体介绍

--14.1 总体介绍

-14.2 进程的内存布局

--14.2 进程的内存布局

-14.3 执行ELF格式的二进制代码-do_execve的实现

--14.3 执行ELF格式的二进制代码-do_execve的实现

-14.4 执行ELF格式的二进制代码-load_icode的实现

--14.4 执行ELF格式的二进制代码-load_icode的实现

-14.5 进程复制

--14.5 进程复制

-14.6 内存管理的copy-on-write机制

--14.6 内存管理的copy-on-write机制

第十五讲 处理机调度

-15.1 处理机调度概念

--15.1 处理机调度概念

-第十五讲 处理机调度--15.1 处理机调度概念

-15.2 调度准则

--15.2 调度准则

-15.3 先来先服务、短进程优先和最高响应比优先调度算法

--15.3 先来先服务、短进程优先和最高响应比优先调度算法

-第十五讲 处理机调度--15.3 先来先服务、短进程优先和最高响应比优先调度算法

-15.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架

--15.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架

-第十五讲 处理机调度--15.4 时间片轮转、多级反馈队列、公平共享调度算法和uc

-15.5 实时调度和多处理器调度

--15.5 实时调度和多处理器调度

-第十五讲 处理机调度--15.5 实时调度和多处理器调度

-15.6 优先级反置

--15.6 优先级反置

-第十五讲 处理机调度--15.6 优先级反置

第十六讲 实验六 调度器

-16.1 总体介绍和调度过程

--16.1 总体介绍和调度过程

-16.2 调度算法支撑框架

--16.2 调度算法支撑框架

-16.3 时间片轮转调度算法

--16.3 时间片轮转调度算法

-16.4 Stride调度算法

--16.4 Stride调度算法

第十七讲 同步互斥

-17.1 背景

--17.1 背景

-17.2 现实生活中的同步问题

--17.2 现实生活中的同步问题

-第十七讲 同步互斥--17.2 现实生活中的同步问题

-17.3 临界区和禁用硬件中断同步方法

--17.3 临界区和禁用硬件中断同步方法

-第十七讲 同步互斥--17.3 临界区和禁用硬件中断同步方法

-17.4 基于软件的同步方法

--17.4 基于软件的同步方法

-第十七讲 同步互斥--17.4 基于软件的同步方法

-17.5 高级抽象的同步方法

--17.5 高级抽象的同步方法

-第十七讲 同步互斥--17.5 高级抽象的同步方法

第十八讲 信号量与管程

-18.1 信号量

--18.1 信号量

-第十八讲 信号量与管程--18.1 信号量

-18.2 信号量使用

--18.2 信号量使用

-第十八讲 信号量与管程--18.2 信号量使用

-18.3 管程

--18.3 管程

-第十八讲 信号量与管程--18.3 管程

-18.4 哲学家就餐问题

--18.4 哲学家就餐问题

-18.5 读者-写者问题

--18.5 读者-写者问题

第十九讲 实验七 同步互斥

-19.1 总体介绍

--19.1 总体介绍

-19.2 底层支撑

--19.2 底层支撑

-第十九讲 实验七 同步互斥--19.2 底层支撑

-19.3 信号量设计实现

--19.3 信号量设计实现

-第十九讲 实验七 同步互斥--19.3 信号量设计实现

-19.4 管程和条件变量设计实现

--19.4 管程和条件变量设计实现

-第十九讲 实验七 同步互斥--19.4 管程和条件变量设计实现

-19.5 哲学家就餐问题

--19.5 哲学家就餐问题

第二十讲 死锁和进程通信

-20.1 死锁概念

--20.1 死锁概念

-第二十讲 死锁和进程通信--20.1 死锁概念

-20.2 死锁处理方法

--20.2 死锁处理方法

-第二十讲 死锁和进程通信--20.2 死锁处理方法

-20.3 银行家算法

--20.3 银行家算法

-第二十讲 死锁和进程通信--20.3 银行家算法

-20.4 死锁检测

--20.4 死锁检测

-第二十讲 死锁和进程通信--20.4 死锁检测

-20.5 进程通信概念

--20.5 进程通信概念

-第二十讲 死锁和进程通信--20.5 进程通信概念

-20.6 信号和管道

--20.6 信号和管道

-第二十讲 死锁和进程通信--20.6 信号和管道

-20.7 消息队列和共享内存

--20.7 消息队列和共享内存

-第二十讲 死锁和进程通信--20.7 消息队列和共享内存

第二十一讲 文件系统

-21.1 文件系统和文件

--21.1 文件系统和文件

-第二十一讲 文件系统--21.1 文件系统和文件

-21.2 文件描述符

--21.2 文件描述符

-第二十一讲 文件系统--21.2 文件描述符

-21.3 目录、文件别名和文件系统种类

--21.3 目录、文件别名和文件系统种类

-第二十一讲 文件系统--21.3 目录、文件别名和文件系统种类

-21.4 虚拟文件系统

--21.4 虚拟文件系统

-第二十一讲 文件系统--21.4 虚拟文件系统

-21.5 文件缓存和打开文件

--21.5 文件缓存和打开文件

-第二十一讲 文件系统--21.5 文件缓存和打开文件

-21.6 文件分配

--21.6 文件分配

-第二十一讲 文件系统--21.6 文件分配

-21.7 空闲空间管理和冗余磁盘阵列RAID

--21.7 空闲空间管理和冗余磁盘阵列RAID

-第二十一讲 文件系统--21.7 空闲空间管理和冗余磁盘阵列RAID

第二十二讲 实验八 文件系统

-22.1 总体介绍

--22.1 总体介绍

-第二十二讲 实验八 文件系统--22.1 总体介绍

-22.2 ucore 文件系统架构

--22.2 ucore 文件系统架构

-第二十二讲 实验八 文件系统--22.2 ucore 文件系统架构

-22.3 Simple File System分析

--22.3 Simple File System分析

-第二十二讲 实验八 文件系统--22.3 Simple File System分析

-22.4 Virtual File System分析

--22.4 Virtual File System分析

-第二十二讲 实验八 文件系统--22.4 Virtual File System分

-22.5 I/O设备接口分析

--22.5 I/O设备接口分析

-第二十二讲 实验八 文件系统--22.5 I/O设备接口分析

-22.6 执行流程分析

--22.6 执行流程分析

第二十三讲 I/O子系统

-23.1 I/O特点

--视频

-第二十三讲 I/O子系统--23.1 I/O特点

-23.2 I/O结构

--816C80A0F5E3B8809C33DC5901307461

-第二十三讲 I/O子系统--23.2 I/O结构

-23.3 I/O数据传输

--C58221E14388B9DB9C33DC5901307461

-第二十三讲 I/O子系统--23.3 I/O数据传输

-23.4 磁盘调度

--567A3F1FCBFB3F4C9C33DC5901307461

-第二十三讲 I/O子系统--23.4 磁盘调度

-23.5 磁盘缓存

--C327536B80D25CE79C33DC5901307461

-第二十三讲 I/O子系统--23.5 磁盘缓存

html

-html

--html

3.2 系统启动流程笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。