Linux内存管理(最透彻的一篇)

摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与使用。在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理之间的关系,希望大家最终能驾驭Linux内存管理。

前言

内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无论市面上或是网上都充斥着大量涉及内存管理的教材和资料。因此,我们这里所要写的Linux内存管理采取避重就轻的策略,从理论层面就不去班门弄斧,贻笑大方了。我们最想做的和可能做到的是从开发者的角度谈谈对内存管理的理解,最终目的是把我们在内核开发中使用内存的经验和对Linux内存管理的认识与大家共享。

当然,这其中我们也会涉及到一些诸如段页等内存管理的基本理论,但我们的目的不是为了强调理论,而是为了指导理解开发中的实践,所以仅仅点到为止,不做深究。

遵循“理论来源于实践”的“教条”,我们先不必一下子就钻入内核里去看系统内存到底是如何管理,那样往往会让你陷入似懂非懂的窘境(我当年就犯了这个错误!)。所以最好的方式是先从外部(用户编程范畴)来观察进程如何使用内存,等到大家对内存的使用有了较直观的认识后,再深入到内核中去学习内存如何被管理等理论知识。最后再通过一个实例编程将所讲内容融会贯通。

进程与内存

进程如何使用内存?

毫无疑问,所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot外卖系统16:菜品修改模块+菜品信息回显+ID查询口味列表+组装数据并返回

4.1 菜品修改模块需求分析 在菜品管理列表页面点击修改按钮,跳转到修改菜品页面,在修改页面回显菜品相关信息并进行修改,最后点击确定按钮完成修改操作。 4.2 菜品修改模块前端页面(add.html)和服务端的交互过程 1).…

POJ - 2385 Apple Catching (dp)

题意:有两棵树,标号为1和2,在Tmin内,每分钟都会有一个苹果从其中一棵树上落下,问最多移动M次的情况下(该人可瞬间移动),最多能吃到多少苹果。假设该人一开始在标号为1的树下。 分析&…

基于Springboot外卖系统17: 新增套餐模块+餐品信息回显+多数据表存储

1.1 新增套餐需求分析 后台系统中可以管理套餐信息,通过新增套餐功能来添加一个新的套餐,在添加套餐时需要选择当前套餐所属的套餐分类和包含的菜品,并且需要上传套餐对应的图片,在移动端会按照套餐分类来展示对应的套餐。 1.2 新…

cocoscreator editbox 只允许数字_用Cocos做一个数字调节框

点击上方蓝色字关注我们~当玩家购买道具的时候,一个个买可能会比较麻烦,用数字调节框的话玩家一次性就可以买好几十个了(钱够的话)。运行效果如下:Cocos Creator版本:2.2.0后台回复"数字调节框",获取该项目完…

Android Jni 例程

1.Jni的作用 Java是一种比较高级的语言,Java调用c库,调用c++库是必不可少的,所以Jni就应运而生了。 NDK:NDK是Native Development Kit的缩写,是Google提供的一套工具集,可以让你其他语言(C、C++或汇编)开发 Android的 JNI。NDK可以编译多平台的so,开发人员只需要简单…

Xshell 无法连接虚拟机中的ubuntu的问题

转自:http://blog.csdn.net/qq_26941173/article/details/51173320版权声明:本文为博主原创文章,未经博主允许不得转载。 昨天在VMware Player中安装了ubuntu系统,今天想通过xshell连接ubuntu,结果显示 Connecting t…

基于Springboot外卖系统18:套餐分页查询模块+删除套餐+多数据表同步

1. 套餐分页查询模块 1.1 需求分析 系统中的套餐数据很多的时候,如果在一个页面中全部展示出来会显得比较乱,不便于查看,所以一般的系统中都会以分页的方式来展示列表数据。 在进行套餐数据的分页查询时,除了传递分页参数以外&a…

jsp项目开发案例_Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)life...

1 开发需要环境工欲善其事,必先利其器。在正式开发之前我们检查好需要安装的拓展,不要开发中发现这些问题,打断思路影响我们的开发效率。安装 swoole 拓展包安装 redis 拓展包安装 laravel5.5 版本以上如果你还不会用swoole就out了程序猿的生…

Service rootservice does not have a SELinux domain defined

新增一个SELINUX启动的时候出现问题 新增如下 service rootservice /system/bin/rootserviceuser rootgroup rootdisabledoneshoton property:sys.boot_completed1start rootservice具体补丁请查看文件 链接:https://pan.baidu.com/s/1AlBuXfdn-xFRwDwmsX4svA 提取…

Docker系列第01部分:介绍+虚拟化+什么是Decker+组件

0 应用部署难点 1.在软件开发中,最麻烦的事情之一就是环境配置。在正常情况下,如果要保证程序能运行,我们需要设置好操作系统,以及各种库和组件的安装。2.举例来说,要运行一个Python程序,计算机必须要有 P…

1.7.08:字符替换

08:字符替换 查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。 输入只有一行,由一个字符串和两个字符组成,中间用单个空格隔开。字符串是待替换的字符串&#xf…

net.conn read 判断数据读取完毕_1.5 read, write, exit系统调用

接下来,我将讨论对于应用程序来说,系统调用长成什么样。因为系统调用是操作系统提供的服务的接口,所以系统调用长什么样,应用程序期望从系统调用得到什么返回,系统调用是怎么工作的,这些还是挺重要的。你会…

Android内核学习笔记

0、android系统启动 《Android系统启动流程 -- bootloader》 《The Android boot process from power on》 《Android 启动过程介绍》 《Android培训班(86)内核运行之前的引导程序》 这是一系列文章 《Android 分区挂载》 1、init 《深入理解android 卷1》 第3章 深入理解…

Docker系列第02部分:Docker安装与启动

1 安装环境说明 这里将Docker安装到CentOS上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。 2 Docker安装与使用 2.0 windows安装 1 windows安装&#xff08…

ORA-00918:未明确定义列解决

ORA-00918:未明确定义列解决 问题:ORA-00918:未明确定义列 eg. select name, name from a left join b on a.flag b.flag 原因:列名重复了(select后面跟了两个 name) 解决办法: 每个列名,都加上其所在表的表名作为前缀 e…

Docker系列第03部分:列出镜像+搜索镜像+拉取镜像+删除镜像

1.什么是Docker镜像 Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一…

RK方案 manifest.xml编译问题,并解决方案

编译出错 Install: out/target/product/rk3288/system/priv-app/TeleService/TeleService.apk Install: out/target/product/rk3288/system/priv-app/Telecom/Telecom.apk Install: out/target/product/rk3288/system/priv-app/TelephonyProvider/TelephonyProvider.apk …

c语言sort函数_C语言的那些经典程序 第八期

戳“在看”一起来充电吧!C语言的那些经典程序 第八期上期带大家欣赏的指针经典程序,感觉如何?这期我们准备了几个新指针的内容,灵活运用指针可以大大减少程序的复杂度,接下来就让小C来说说这三个有关指针应用的经典程序吧&#xf…

BJFU 质数相关

1 /*2 BJFU 质数相关3 http://101.200.220.237/contest/19/problem/116/4 二分图5 按质因数奇偶性建立二分图6 *7 *8 */9 #include <cstdio>10 #include <algorithm>11 #include <cstring>12 #include <cmath>13 #include <vector>14 #i…

Docker系列第04部分:查看容器+创建容器+启动容器+文件挂载+删除容器

1 容器的创建和启动 1.1 虚拟机的生命周期 1.2 容器的生命周期 2、容器操作 2.1 查看容器 查看正在运行容器&#xff1a; docker ps 查看所有的容器&#xff08;启动过的历史容器&#xff09; docker ps –a 查看最后一次运行的容器&#xff1a; docker ps -l 查看停止的容…