操作系統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时间, 创造并行执行的错觉, 该任务分为 ...
随机推荐
- 数据库中间件DBLE学习(一) 基础介绍和快速搭建
dble基本架构简介 dble是上海爱可生信息技术股份有限公司基于mysql的高可用扩展性的分布式中间件.江湖人送外号MyCat Plus.开源地址 我们首先来看架构图,外部应用通过NIO/AIO进行 ...
- 思科命令 service password-encryption
service password-encryption 将会把所有password用思科私有方式加密, 标记是 7,show run 查看密码时,5为md5加密结果即secret, no servic ...
- vue 项目
项目搭建 1. npm install -g @vue/cli 2.vue -h 3.vue create list-demo 4.yarn serve 运行项目 路由 1.yarn add vue- ...
- 2020 CCPC Wannafly Winter Camp Day1 Div.1& F
#include<bits/stdc++.h> #define forn(i, n) for (int i = 0; i < int(n); i++) #define fore(i, ...
- 牛客寒假6-C汉诺塔
链接:https://ac.nowcoder.com/acm/contest/3007/C来源:牛客网 题目描述 现在你有 N 块矩形木板,第 i 块木板的尺寸是 Xi*Yi,你想用这些木板来玩汉诺塔 ...
- idea中如何配置git以及在idea中初始化git,并push到码云
一.给idea配置git 打开IDEA,按照路径 Fie-->Settings --> Tools -->Terminal 找到后设置右边的Shell path(自己安装的Git路 ...
- SDN-数据控制分离
严格来说,控制面与数据面分离并不是SDN的专利.从一个chassis角度看,传统路由器其实控制面和转发面也是分离的.Route-enginee和line card分别负责控制面板和转发面.但是传统网络 ...
- python3运行时候报错集锦:读取文件报错
1.关于读取文件报错: 命令执行到cf.read(cfpath),出现如下报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa0 in po ...
- UML 工具 Dia
linux下一款不错的流程图工具:dia. dia是一款非常优秀的制图工具,可以用于绘制 类图,流程图等等 安装此工具: 1.打开终端(快捷键:ctrl+alt+t). 2.输入命令:$sudo ap ...
- 03_TypeScript函数
1.函数的定义 es5定义函数的方法 //函数声明法 function run(){ return 'run'; } //函数表达式 var run = function(){ return 'run ...