文件系统学习之七:SVR4文件系统和虚拟内存接口

随着SVR4集成了SunOS的Virtual
Memory System (VM),SVR4虚拟文件系统对之前的I/O路径做了非常大的改进,这些变化包括buffer
cache的用法以及为支持基于page-cached的IO而对内核、VM乃至磁盘驱动的改动。

(With
the inclusion of the SunOS VM subsystem in SVR4, and the integration
between the filesystem and the Virtual Memory (VM) subsystem, the
SVR4 VFS architecture radically changed the way that I/O took place.
The buffer cache changed in usage and a tight coupling between VM and
filesystems together with page-based
I/O involved
changes throughout the whole kernel from filesystems to the VM to
individual disk drivers.)

为此,在深入了解Page-Cached之前,我们需要对SVR4的VM系统有个基本了解。总体来讲,SVR的VM是基于段式的,和每个vnode对应一组vop操作类似,每个段都有对应的一组操作。当出现segment
fault/page fault的时候,当前段对应的函数就会得到调用,进而实现调页,读入磁盘上的数据。

(Each
segment type has an array of segment-related functions in the same
way that each vnode has an array of vnode functions. In the case of a
page fault, the kernel will call the fault() function for the
specified segment causing the segment handler to respond by reading
in the appropriate data from disk.)

SVR4系统基于SunOS的VM管理,采用的是段式内存管理系统, 用到主要的数据结构包括:

memory
image of each user prcess: proc中的as
(address space) structure

而as又引用到了一组seg
structure 数组

一个程序的段通常包括数据段、text段、stack、库、共享内存、内存映射文件。如下图所示:

数据结构之间的关系如下图:

为了表征想代码段和数据段这类以文件背书的段,引入了一个叫做segvn
segment type,
这类段包含下面的数据成员:

s_data:用于访问当前段私有、专有的数据

segvn_data:包括段以及背书它的文件的信息

原理(流程)如下:

当用户程序开始执行的时候,刚开始内存里并没有所执行程序对应段的物理页,因此刚开始会触发page错误。内核中的page
fault 中端响应函数会执行请求调页的功能。如果发现请求的地址不在程序的任何一个段的范围之内,就会产生段错误。

参考文档:Virtual
Memory Architecture in SunOS

思考问题:

段错误、缺页中端、TLB
misss、cache
miss 的联系与区别

时间: 2024-08-28 21:52:44

文件系统学习之七:SVR4文件系统和虚拟内存接口的相关文章

第11章,磁盘存储和文件系统学习笔记

更多内容请点击: Linux学习从入门到打死也不放弃,完全笔记整理(持续更新,求收藏,求点赞~~~~) http://blog.51cto.com/13683480/2095439 笔记整理开始时间:2018年4月24日11:25:33 第11章,磁盘存储和文件系统 本章内容: 磁盘结构 分区类型 管理分区 管理文件系统 挂载设备 管理虚拟内存 RAID管理 LVM管理 LVM快照 设备文件: 磁盘设备的设备文件命名:/dev/dev-file SCSI,SATA,SAS,IDE,USB:   

操作系统学习笔记:文件系统实现

一.文件系统结构 为了提供对磁盘的高效便捷的访问,操作系统通过文件系统来轻松地存储.定位.提取数据.文件系统有两个不同的设计问题:1.如何定义文件系统对用户的接口,涉及到文件及其属性.文件允许的操作.组织文件的目录结构:2.创建数据结构和算法将逻辑文件系统映射到物理外存设备上. 目前有许多文件系统在使用.绝大多数操作系统都支持多个文件系统. 二.文件系统实现 实现文件系统需要应对多种磁盘和内存结构. 磁盘上,文件系统包括操作系统,总块数,空闲块数及位置,目录结构,具体文件等: 内存则用于进行文件

Unix文件系统学习笔记之二: 文件描述符、inode和打开文件表

Unix文件系统学习笔记之二: 文件描述符.inode和打开文件表 系统盘上数据的布局 文件系统无非是关于数据在磁盘上的组织以及存储空间管理的,为此,首先需要知道磁盘上数据的总体布局方式.以Unix为例,最重要的一张表如下: Unix 进程管理中和用户文件.io 最相关的数据结构:usr 数据结构 The procstructure does not record information related to file access.  However the userstructure con

linux文件系统学习总结

linux最优秀的特点在于它是多用户多任务的环境,而且对于linux来讲一切皆文件,提到文件这个概念就免不了提文件相关的权限与属性的概念,那相关文件的属性记录在硬盘的哪个地方呢?这就需要了解linux的文件系统是如何记录文件,如何读取文件. 大家都知道硬盘作为存储介质,如果要使用硬盘存储数据需要对硬盘进行分区,格式化之后才可以存储数据.那为什么要对硬盘进行分区呢?因为我们必须要告诉操作系统:"这块硬盘可以访问的区域是有A柱面到B柱面",只有这样,操作系统才能控制硬盘磁头去A~B范围内的

FAT32文件系统学习(3) —— 数据区(DATA区)

FAT32文件系统学习(3) —— 数据区(DATA区) 今天继续学习FAT32文件系统的数据区部分(Data区).其实这一篇应该是最有意思的,我们可以通过在U盘内放入一些文件,然后在程序中读取出来:反过来也可以用程序在U盘内写入一下数据,然后在windows下可以看到写入的文件.这些笔者都会在这篇文章中演示.同时,在写这篇文章的时候笔者也发现了许多意想不到的规律. 1.本文目录 1.读取根目录 2.短文件名目录项 3.长文件名目录项 4.U盘写入文件夹 5.参考文献 2.读取根目录 两张FAT

FAT32文件系统学习(2) —— FAT表

1.题外话 在继续本文学习FAT32文件系统之前,先来插入一点别的话题.我们都知道U盘有一个属性是容量,就拿笔者的U盘为例,笔者手上的U盘是金士顿的DataTraveler G3 4GB的一个U盘.电脑上显示的容量如图1所示为3.75GB.那么这个3.75GB是怎么计算出来的呢? 图 1 系统显示U盘属性 我们先来回顾一下上一篇BPB参数当中的Sectors(扇区总数)这个参数,这一参数代表了这个U盘在出厂时的总扇区数,笔者手上这个是7884672个,可以从图2中看到.其中每个扇区为512 B,

FAT32文件系统学习(1) —— BPB的理解

FAT 32 文件系统学习 1.本文的目标 本文将通过实际读取一个FAT32格式的U盘来简单了解和学习FAT32文件系统的格式.虽然目前windwos操作系统的主流文件系统格式是NTFS,但是FAT32由于其兼容性原因,还是有一定的学习价值.为了能做出一个窗体程序提供直观的感觉,本文的代码采用c#编写,对应的c++代码也会附上. 2.本文目录 1.本文的目标 2.什么是FAT32 3.引导区 2.什么是FAT32 FAT32是Windwos系统硬盘格式分区的一种.这种格式采用32位的文件分配表,

EasyARM i.mx28学习笔记——根文件系统rootfs修改和烧写

0 前言 本文详细说明如何修改和制作根文件系统,包括修改根文件系统中的配置文件:在根文件系统中加入可执行文件,最后通过uboot tftp方式烧录根文件系统和镜像. [相关博文] [EasyARM i.mx28学习笔记--文件IO方式操作GPIO] [EasyARM i.mx28学习笔记--安装和使用tftp] [EasyARM i.mx28学习笔记--minicom配置和使用] [EasyARM i.mx28学习笔记--通过modbus tcp控制GPIO] 1 准备 若使用uboot tft

文件系统学习笔记之四: 从FSS到VFS

文件系统的进化史和人类文明的进化有些类似,都是从低级.封闭乃至对抗走向高级.开放和包容.在VFS一统江湖之前,其实还有它的前身FSS(File system Switch).当时,人们寄希望于它能够兼容各种不同的文件系统.FSS中重要的数据结构mount/,它和传统indoe.文件系统类型的关系如下图: 但是FSS是短命的,被后来SVR3里面引入的vnode快速代替.但我们不能忘记FSS最重要的贡献: 把不同的文件系统以mount的形式挂载起来. SVR3最早是基于"Vnodes: An arc