[深入理解文件系统之七]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、库、共享内存、内存映射文件。如下图所示:

wKiom1i-pAPQQkUUAABgiDzT8Nk207.png

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

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

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

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


原理(流程)如下:

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


参考文档:Virtual Memory Architecture in SunOS


思考问题:

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

















本文转自存储之厨51CTO博客,原文链接:http://blog.51cto.com/xiamachao/1904093 ,如需转载请自行联系原作者

相关文章
|
4月前
|
Java Windows
Java演进问题之JVM在内存返还策略上会左右为难如何解决
Java演进问题之JVM在内存返还策略上会左右为难如何解决
|
4月前
|
Linux 调度
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
|
安全 NoSQL Java
28个案例问题分析---15---登陆之后我加入的课程调用接口报错--ArrayList线程不安全。占用内存情况
28个案例问题分析---15---登陆之后我加入的课程调用接口报错--ArrayList线程不安全。占用内存情况
82 0
|
Android开发 C++
Android系统的Ashmem匿名共享内存子系统分析(3)- Ashmem子系统的 C/C++访问接口
Android系统的Ashmem匿名共享内存子系统分析(3)- Ashmem子系统的 C/C++访问接口
188 0
|
存储 缓存 Oracle
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆(四)
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆(四)
|
存储 监控 Java
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆(三)
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆(三)
|
存储 算法 Java
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆(二)
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆(二)
|
存储 Java 编译器
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆(一)
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆
<JVM上篇:内存与垃圾回收篇>05-本地方法接口和本地方法栈 | 06-堆(一)
|
缓存 Java API
分布式内存文件系统Alluxio(下)
分布式内存文件系统Alluxio(下)
423 0
分布式内存文件系统Alluxio(下)
|
Docker 容器
分布式内存文件系统Alluxio(上)
分布式内存文件系统Alluxio(上)
345 0
分布式内存文件系统Alluxio(上)