博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux mlock源代码,LINUX系统调用mlock的代码分析-Read.DOC
阅读量:7069 次
发布时间:2019-06-28

本文共 1918 字,大约阅读时间需要 6 分钟。

LINUX系统调用mlock的代码分析-Read

LINUX系统调用mlock的代码分析

PAGE

PAGE 2

LINUX系统调用mlock的代码分析

林才学(9811533)

(本组其他成员:李颖、满世杰、陈晋大)

1999-5-20

目录

TOC \o "1-3" 一、LINUX内存管理简介 PAGEREF _Toc452175456 \h 1

1.1.LINUX的分页管理机制 PAGEREF _Toc452175457 \h 1

1.2.虚存段(vma)的组织和管理 PAGEREF _Toc452175458 \h 3

1.3 内存的共享和保护 PAGEREF _Toc452175459 \h 3

二、mlock系统调用简介 PAGEREF _Toc452175460 \h 5

2.1 mlock介绍 PAGEREF _Toc452175461 \h 5

2.2 mlock所用到的主要数据结构和重要常量 PAGEREF _Toc452175462 \h 6

三、mlock系统调用代码分析 PAGEREF _Toc452175463 \h 9

3.1 mlock系统调用结构和各个子函数结构、功能以及示意图。 PAGEREF _Toc452175464 \h 9

3.2 mlock系统流程及其它重要子函数程序流程 PAGEREF _Toc452175465 \h 15

3.3 核心态内存的申请与释放 PAGEREF _Toc452175466 \h 22

四、mlock系统调用与munlock、mlockall、munlockall的关系 PAGEREF _Toc452175467 \h 33

五、关键技术 PAGEREF _Toc452175468 \h 34

六、结束语 PAGEREF _Toc452175469 \h 35

LINUX系统调用mlock的代码分析

PAGE 34

LINUX内存管理简介

1.1.LINUX的分页管理机制

在LINUX中,每一个用户进程都可以访问4GB的线性虚拟内存空间。其中从0到3GB的虚拟内存地址是用户空间,用户进程可以直接对其进行访问。从3GB到4GB的虚拟内存地址为核心空间,存放仅供核心态访问的代码和数据,用户进程不可访问。当用户进程通过中断或系统调用对其访问时,就会触发处理器的特权级转换(从处理器的特权级3切换到特权级0),即从操作系统的用户态切换到核心态。

所有进程从3GB到4GB的虚拟空间映像都是一样的,LINUX以此方式让核心态进程共享代码段和数据段。

核心态虚拟空间从3GB到3GB+4M的一段(也就是进程页目录第768项所管辖的范围),被影射到物理空间0到4M段。因此,进程处于核心态时,只要通过访问虚拟空间3GB到3GB+4M段,即访问了物理空间0到4M段。

上述两种空间对用户进程来说都是透明的,用户进程所访问的内存地址都是连续的4GB线性虚拟地址。因此,我们首先关心的是LINUX是如何划分虚拟空间的。

LINUX采用“按需调页”(Demand Paging)技术管理虚拟内存。标准LINUX的虚存页表应为三级页表,依次为页目录(PGD,Page Directory)、中间页目录(PMD,Page Middle Directory)和页表(PTE,Page Table)。如图1-1所示。

PGD PMD PTE Page Frame

图1-1,LINUX的三级页表结构

在INTEL微机上,LINUX的页表结构实际为两级。80386体系结构之页管理机制中的页目录就是PGD,页表就是PTE。而PMD和PGD实际上是合二为一的。所有有关PMD的操作实际上是对PGD的操作。所以源代码中形如*_pgd_*()和*_pmd_*()的函数所实现的功能也是一样的。其实现方法是提供一组转换宏(/include/asm/pgtable.h),使得转换页表时不需要知道页表的入口格式。宏定义形如:

#define _PAGE_4M0x080/* 4 MB page */

/* PMD_SHIFT determines the size of the area a second-level page table can map */

#define PMD_SHIFT22

#define PMD_SIZE(1UL<

#define PMD_MASK(~(PMD_SIZE-1))

/* PGDIR_SHIFT determines what a third-level page table entry can map */

#define

转载地址:http://cxqll.baihongyu.com/

你可能感兴趣的文章
分页小算法
查看>>
Cngigure和BUS实现远端配置
查看>>
XML工作原理和过程
查看>>
idea 搭建spring boot
查看>>
DOM、BOM方法起源
查看>>
C语言运算符优先级.
查看>>
算法-01-分治
查看>>
java自定义注解学习(二)_注解详解
查看>>
QTreeView
查看>>
QtCore.QMetaObject.connectSlotsByName:根据objectName和signal自动绑定slot
查看>>
jira
查看>>
elasticsearch rpm 安装
查看>>
Python基础总结(字符串常用,数字类型转换,基本运算符与流程控制)
查看>>
数据预处理——剔除异常值,平滑,归一化
查看>>
Visual stuido 项目路径的奇怪问题
查看>>
java局部变量和临时变量
查看>>
返回杨辉三角前 n 层的数字
查看>>
布局(2、相对布局)
查看>>
在 Eclipse 上配置tomcat7.0并创建工程发布
查看>>
腾讯移动分析 签名代码示例
查看>>