操作系統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內存管理)的更多相关文章

  1. tomcat 注冊成操作系統服務

    nginx注冊成服務1.把srvany.exe和instsrv.exe拷貝到nginx安裝路徑下面.2.執行命令Command代碼instsrv Nginx D:\nginx\srvany.exe3. ...

  2. 幾個步驟輕鬆在windows操作系統上搭建GO語言開發環境

    1. 首先下载官方GO語言安装包: https://code.google.com/p/go/wiki/Downloads?tm=2 2. 设置 GOPATH 在任意磁盘根目录新建一个文件夹,名字随意 ...

  3. 20個命令行工具監控 Linux 系統性能

    對於每個系統管理員或網路管理員來說,每天要監控和調試 Linux 系統性能問題都是非常困難的工作.我已經有5年 Linux 管理員的工作經歷,知道如何監控系統使其保持正常運行.為此,我們編寫了對於 L ...

  4. 第一章 Linux內核簡介

    1. Linux是類Unix系統,但他不是Unix. 儘管Linux借鑑了Unix的許多設計並且實現了Unix的API(由Posix標準和其他Single Unix Specification定義的) ...

  5. 【转】Linux內核驅動之GPIO子系統(一)GPIO的使用 _蝸牛

    原文网址:http://tc.chinawin.net/it/os/article-2512b.html 一 概述 Linux內核中gpio是最簡單,最常用的資源(和interrupt ,dma,ti ...

  6. Linux-PAM(Linux下的密碼認證和安全机制)系統管理員指南(中文版)

    he Linux-PAM 系统管理员指南作者:Andrew G. Morgan, morgan@linux.kernel.org翻译:孙国清(Thomas Sun),thomassun@yeah.ne ...

  7. 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)

    作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...

  8. oracle系統表、數據字典介紹與日常問題診斷

    oracle系統表.數據字典介紹與日常問題診斷 數據字典是由唯讀的table和view組成的,產生於$oracle_home\rdbms\admin\catalog.sql.裡面儲存Oracle資料庫 ...

  9. Linux进程调度器的设计--Linux进程的管理与调度(十七)

    1 前景回顾 1.1 进程调度 内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来. 调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为 ...

随机推荐

  1. python读取mongodb并提供接口

    # -*- coding: utf-8 -*- import flask, json import time import pymongo client=pymongo.MongoClient(hos ...

  2. NODEJS 使用 sqlite3 本地文件数据库

    npm install sqlite3 var sqlite3 = require('sqlite3').verbose();var db = new sqlite3.Database('WebFil ...

  3. 手动安装 saltshaker-plus 版本选择特别说明(后期重点讲解Docker安装方式)

    前后端都建议使用1.12版本

  4. Zjnu Stadium HDU - 3047 带权并查集板子题

    #include<iostream> #include<cstring> #include<cstdio> using namespace std; +; int ...

  5. QS Network ZOJ - 1586 板子题

    #include<iostream> #include<algorithm> using namespace std; ; struct edge{ int a,b; doub ...

  6. 数据库中的sql语句总结

    初识SQL   1. 什么是SQL:结构化查询语言(Structured Query Language). 2. SQL的作用:客户端使用SQL来操作服务器.   > 启动mysql.exe,连 ...

  7. Linux 基础操作命令

    关机和注销 shutdown -h now 立刻关机 shutdown -r now 立刻重启 shutdown -h + 1分钟后关机(重启同样用法) shutdown -h : 11点钟关机(重启 ...

  8. 记录 Docker 的学习过程 (自建私有仓库)

    私有仓库的创建 node1#wget http://harbor.orientsoft.cn/harbor-v1.4.0/harbor-offline-installer-v1.4.0.tgz nod ...

  9. 0级搭建类002-Oracle Linux 8.x安装(OEL 8.0) 公开

    项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...

  10. java exec python program

    I find three methods, the first is using jython, the module of jython can transform the type of data ...