当前课程知识点:操作系统 >  第二十二讲 实验八 文件系统 >  22.2 ucore 文件系统架构 >  22.2 ucore 文件系统架构

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

22.2 ucore 文件系统架构在线视频

22.2 ucore 文件系统架构

下一节:22.3 Simple File System分析

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

22.2 ucore 文件系统架构课程教案、知识点、字幕

好 那我们接下来

再稍微具体一点

看一下uCore文件系统一个架构

那么这一块呢

比刚才要更深入一些

从两个角度 一个是从控制流的角度

一个从数据结构的角度来看uCore

文件系统一个架构

首先我们看一下这个控制流

就是说 用户访问文件的时候呢

它从应用程序开始发出请求

到最后从硬盘中读

或者写相应的数据

这个过程从上而下

看看这个访问是怎么一步步来完成的

那第一个 是通用文件系统的访问接口

那么这个是包含两部分

一部分是给我们应用程序

提供了一些API

这些API呢是放在一个

简单一个C库里面

那这C库呢会访问相应的系统调用

从而可以获得uCore操作系统

关于文件这一块的一个服务

那对应的这个函数可以看出来

我们调用 比如说在这里面

提供了write 就是写文件这么一个操作

那么write呢 会最终调这个

关于write的sys_call

使得我们内核通过sys_write

来完成接下来的这个服务请求

这是第一个层面

就是站在用户的角度看待

这个层面的一个调用过程

那第二个呢一旦说在操作系统里面

我们的sys_call这个level

得到了一个请求 说

要完成一个文件的写操作

那接下来的控制就会

交给我们什么呢 VFS

文件系统的抽象层

就是虚拟文件系统这一块

虚拟文件系统呢它包含了很多部分

包括了文件的接口 目录的接口

inode的接口以及文件系统的接口

整体一个抽象

那么这个呢 屏蔽了底层

具体文件系统和设备的一些差异性

可以看出来刚才这个sys_write

会进一步向下调用

会访问什么呢 sysfile_write

file_write以及vop_write

需要注意的是 从file_write到vop_write

其实形成一个转换

这个转换是从文件 面向用户这个文件

转成了面向具体硬盘里面的操作的一个inode

这是一个转换

当VFS把用户发出的针对文件的写操作

转变对一个inode写操作之后呢

这个inode本身

还是一个站在虚拟文件系统上面

一个抽象的inode

它会进一步转变成什么呢

一个具体文件系统

在这里面我们是以一个

simple file system来举的例子

一个具体的文件系统呢

它的一个inode情况

通过inode来完成后续的

针对磁盘的一个读写

那可以看到 刚才的vop_write呢

会进一步变成fs的write

就是simple file system 的write

这个write会再通过wbuf (write_buffer)

这么一个操作

来向我们设备发出请求

比方说做一个写操作

那么它的数据内容

是从我们应用程序

刚才那个高层的

write的buffer里传到这里面来

然后把这个buffer内容

会写到我们的device中去

Simple file system

它发出一个写请求之后呢

最后会通过一个外设的访问接口

来完成对外设的一个访问

这个外设呢 和我们刚才说那个

具体的硬盘呢还是不一样的

它是在硬盘之上建立成抽象

而这个抽象我们称之为I/O设备接口

这个接口也是由

我们VFS来进行管理的

可以看到当Simple file system

发出wbuf这个操作之后呢

会把这个操作转变成一个

针对device的一个操作

这个device操作呢有很多类

我们刚才已经看到有面向串口的

有面向屏幕的 也有面向硬盘的

还有甚至空设备 有不同类型的设备

我们最终选择是disk

我们前面已经设定好了

SFS它的数据是位于

我们disk 0这个磁盘上的

所以 当发出这个dop_io的时候

最终会调disk 0的I/O

使得它可以向disk 0发出写请求

这层I/O设备接口呢

是一个抽象的接口

它里面可以包含不同类型的设备

最终disk 0会访问什么呢

会访问一个驱动

这个驱动是硬盘驱动

通过硬盘驱动来完成实际的

往这个硬盘数据的一个读写

可以看出来 刚才这个disk 0的I/O

会转变成一个IDE的write

因为我们前面知道

最开始是一个write操作

那么这个I/O既可以支持读

也可以支持写

我们会变成一个IDE的write之后呢

完成把应有程序提供的数据

最终写到我们硬盘扇区里面去

就是这个ide_write_secs

IDE硬盘它的扇区

这是一个整个的执行过程

那么前面呢我们看到一个

从上到下的控制流的一个访问

针对write的一个操作

接下来我们可以看看

在内核中数据结构整体一个布局

那么也是从高层逐步往下来展开

给大家做一个讲解

我们知道 我们的应用

其实是以进程的方式

在操作系统管理之下运行的

所以在我们进程控制块里扩展了一部分

跟文件相关的一些数据结构

比如说我们的proc_struct

它包含了一个files_struct

而这个files_struct实际上是一个数组

在这数组里面 很重要一点

它打开了哪些文件

它有一个opened file array

根据打开文件 可以进一步找到

这个文件所对应inode

可以看出来 这一块区域

是和我们进程紧密相连的

应该说 是属于我们

进程控制块的一部分

但光有这部分还不够

我们还需要进一步去

和我们系统级inode进行联系

所以可以看着这个struct file呢

会有一个信息会到一个inode里面去

而这个inode信息是属于VFS

可以看出来在 VFS管理之下

它有很多这些 对应的数据结构

我们这里面关注哪个呢 in_info

这个in其实是inode一个简称

这个VFS这一层的inode

它会进一步表述具体的inode怎么回事

你可以看出来 这是一个union结构

比较有意思 这个union结构呢

其实说它包含了不同类型的inode

我们在这里面 具体而言

是一个SFS的一个inode

就是simple file system的一个inode

这个结构也是在内存中的

这个在内存中inode结构呢

包含了更进一步的

跟硬盘相关的SFS的信息

也很重要数据就是sfs_disk_inode

那么这个inode信息

其实就是在硬盘中存储的内容

所以说 这一块内容

其实和我们硬盘中的一块区域中

专门来存储inode的数据块呢

它里面的内容是一致的

那么这个sfs_disk_inode

它的成员变量中有很多丰富的信息

比如说这里面type 表明这个inode

它的类型是文件 目录

还是其它什么东西

第二个呢它这个direct和indirect

表明了它所存储的数据

所在数据块的位置

有了这个信息之后

我们就可以很容易找到这个inode

所对应文件的内容

或者目录内容在什么地方

关于simple file system这个结构里面

有很多的内容

是和我们硬盘中的

数据结构是直接对应的

当然我们在具体访问的时候

需要把部分的内容

也会取到内存中来做进一步的操作

从上到下可以看出来这整个的过程

从进程开始 到uCore kernel里面

system level的数据结构

VFS再进一步引申到我们具体的SFS

那么SFS又分两块

一块是内存中一些管理信息

还有一部分是从硬盘中

读取的一些管理信息和数据信息

形成了整个的 跟文件系统相关的

数据结构一个关系图

操作系统课程列表:

第零讲 在线教学环境准备

-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

22.2 ucore 文件系统架构笔记与讨论

也许你还感兴趣的课程:

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