操作系統3-內存管理(Linux內存管理)
操作系統3-內存管理(Linux系統的內存管理方法)
9.Linux系統的內存管理方法
Linux採用“按需調頁”算法,支持三層管理策略。由於Intel CPU在硬件級提供了段式存儲管理和二層頁式存儲管理,Linux作為軟件,必須與之兼容。所以Linux實際上放棄了段式存儲管理,將第二層的頁式管理與第一層的頁式管理合併,因此整整發揮作用的是以頁目錄和頁表為中心的數據結構和函數。
9.1 Linux的分頁管理機制
在Linux中,每個進程都可以訪問4GB的線性虛擬內存空間,注意可以訪問的空間和實際享有的空間並不是一回事。其中0~3GB的虛擬內存地址空間為用戶空間,用戶進程可以直接訪問;3~4GB的空間為內核態空間,存放僅供內核態訪問的代碼和數據,當用戶進程通過中斷或系統調用訪問內核態空間時,就會觸發處理特權級轉換,從用戶態轉到內核態。
所有進程從3GB到4GB的虛擬空間是一樣的,有相同的頁目錄項和頁表,對應同樣的物理內存段,Linux以此方式讓內核態進程共享代碼段和數據段。
Linux採用“按需調頁”管理內存,標準Linux的虛存頁表為3級頁表,依次為頁目錄(Page Directory, PGD)、中間頁目錄(Page Middle Directory, PMD)和頁表(Page Table, PTE)。
而在Intel微型計算機上,Linux的頁表結構實際只有兩級,PGD和PMD合二為一,在用戶進程通過mm_struct結構來管理進程中與存儲相關的信息。
9.2 虛存段的組織與管理
為了能夠自然地管理進程虛存空間,Linux定義了虛存段(virtual memory are, vma),一個vma段時某個進程的一段連續的虛擬空間,在這段虛擬空間的所有單元擁有相同的特征。例如屬於同一進程,有相同的訪問權限等。
9.3 內存的共享
Linux內存的共享並不設置一個共享頁表,而是讓共享該頁的各進程的頁表項直接指向共享頁。這種方式節約內存,但是效率較低。
9.4 內存空間管理
Linux物理空間以頁幀為單位,就相當於前面講的物理塊,大小等於頁長,對於Intel CPU默認是4KB。
Linux對物理內存的管理通過mem_map來描述,mem_map在系統初始化時,由free_area_init()來創建。用bitmap記錄所有物理內存的空閒情況,也有這個函數創建。
操作系統3-內存管理(Linux內存管理)的更多相关文章
- tomcat 注冊成操作系統服務
nginx注冊成服務1.把srvany.exe和instsrv.exe拷貝到nginx安裝路徑下面.2.執行命令Command代碼instsrv Nginx D:\nginx\srvany.exe3. ...
- 幾個步驟輕鬆在windows操作系統上搭建GO語言開發環境
1. 首先下载官方GO語言安装包: https://code.google.com/p/go/wiki/Downloads?tm=2 2. 设置 GOPATH 在任意磁盘根目录新建一个文件夹,名字随意 ...
- 20個命令行工具監控 Linux 系統性能
對於每個系統管理員或網路管理員來說,每天要監控和調試 Linux 系統性能問題都是非常困難的工作.我已經有5年 Linux 管理員的工作經歷,知道如何監控系統使其保持正常運行.為此,我們編寫了對於 L ...
- 第一章 Linux內核簡介
1. Linux是類Unix系統,但他不是Unix. 儘管Linux借鑑了Unix的許多設計並且實現了Unix的API(由Posix標準和其他Single Unix Specification定義的) ...
- 【转】Linux內核驅動之GPIO子系統(一)GPIO的使用 _蝸牛
原文网址:http://tc.chinawin.net/it/os/article-2512b.html 一 概述 Linux內核中gpio是最簡單,最常用的資源(和interrupt ,dma,ti ...
- Linux-PAM(Linux下的密碼認證和安全机制)系統管理員指南(中文版)
he Linux-PAM 系统管理员指南作者:Andrew G. Morgan, morgan@linux.kernel.org翻译:孙国清(Thomas Sun),thomassun@yeah.ne ...
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...
- oracle系統表、數據字典介紹與日常問題診斷
oracle系統表.數據字典介紹與日常問題診斷 數據字典是由唯讀的table和view組成的,產生於$oracle_home\rdbms\admin\catalog.sql.裡面儲存Oracle資料庫 ...
- Linux进程调度器的设计--Linux进程的管理与调度(十七)
1 前景回顾 1.1 进程调度 内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来. 调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为 ...
随机推荐
- ArcMap 新建空白图层,并添加元素
想要添加新的图层,不能从File 里找,那里都是添加数据,貌似ArcGIS的定位是对数据的处理. 比如导入其他格式文件,或者导入对应的数据文件.excel csv cad 等,在此基础上进行分析,而不 ...
- JavaScirpt 一些基本知识
var name = prompt('请输入你的姓名:'); //弹出输入框 var age = prompt('请输入你的年龄'); var sex = prompt('请输入你的性别'); 检测字 ...
- luoguP5219 无聊的水题 I 多项式快速幂
有一个幼儿园容斥:最大次数恰好为 $m=$ 最大次数最多为 $m$ - 最大次数最多为 $m-1$. 然后来一个多项式快速幂就好了. code: #include <cmath> #in ...
- gulp常用插件之wiredep使用
更多gulp常用插件使用请访问:gulp常用插件汇总 wiredep这是一款gulp插件,能够将js.css文件自动插入到html中. 更多使用文档请点击访问wiredep工具官网. Bower是一个 ...
- PAT (Advanced Level) Practice 1035 Password (20 分)
To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...
- (一)Python模块化编程简介
1 引言 众所周知,模块化编程具备很多优点,尤其在复杂项目上体现更为明显.Python模块化编程有助于开发者统筹兼顾和分工协作,并提升代码灵活性和可维护性,是编程开发者不可或缺的一项重要工具. 2 P ...
- 深入浅出Mybatis系列八-mapper映射文件配置之select、resultMap
注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之inse ...
- ZOJ 4081 Little Sub and Pascal's Triangle 题解
ZOJ 4081 Little Sub and Pascal's Triangle 题解 题意 求杨辉三角第n行(从1开始计数)有几个奇数. 考察的其实是杨辉--帕斯卡三角的性质,或者说Gould's ...
- 二叉堆(1)BinaryHeap
封装一个简单二叉堆,亦可视为优先队列. 测试文件 main.cpp: #include <iostream> #include "BinaryHeap.h" using ...
- 松软科技课堂:jQuery 效果 - 淡入淡出
jQuery Fading 方法 通过 jQuery,您可以实现元素的淡入淡出效果. jQuery 拥有下面四种 fade 方法: fadeIn() fadeOut() fadeToggle() fa ...