03_007linux内存管理架构以虚拟内存空间布局架构

内存管理子系统架构

内存管理子系统架构可以分为:用户空间、内核空间及硬件部分3个层面,具体结构如
下图所示:
1、用户空间:应用程序使用malloc()申请内存资源/free()释放内存资源。
2、内核空间:内核总是驻留在内存中,是操作系统的一部分。内核空间为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数。
3、硬件:处理器包含一个内存管理单元 (Memory Management Uint,MMU)的部件,负责把虚拟地址转换为物理地址。
下面的这个架构图 但是就为了说明 中间有个系统调用在kernel和app的c库之间 在内核层
在这里插入图片描述

内核空间模块分布图

简单把内核氛围下面的模块
Process shedule 进程管理调度运行
Mem 内存管理调度 负责内存资源
Ipc 系统中进程间通信
VFS 虚拟文件系统,把磁盘硬盘进行抽象,通过统一的文件接口进行操作
Net 网络子系统 管理网络设备 各种网络标准
Dev 驱动
app通过各种系统调用在用户空间操作到内核空间
在这里插入图片描述

用内存开辟举个例子,看看app怎么通过系统调用操作到内核

比如应用程序app需要开辟空间 需要通过c的一些标准函数 malloc new free等 操作到各种库提供的函数
这些函数使用系统调用 sys_brk来继续进行内存的分配
到虚拟内存管理 页错误异常处理 页表管理 内存控制 内存碎片整理 页回收 内存耗尽
分配器 都是这些内核里面的模块

在这里插入图片描述
1、用户空间
相当于应用程序使用malloc()申请内存,通过free0释放内存。malloc()/free()是 glibc库的内存分配器ptmalloc提供的接口,
ptmalloc使用系统调用brk或mmap向内核以页为单位申请内存,然后进行分成很小内存块分配给对应应用程序。
2、内核空间
虚拟内存管理负责从进程的虚拟地址空间分配虚拟页, sys_brk来扩大或收缩堆,sys mmap用来在内存映射区域分配虚拟页,
sys
munmap用来释放虚拟页。页分配器负责分配物理页,使用分配器是伙伴分配器
内核空间扩展功能,不连续页分配器提供分配内存的接口vmalloc和释放内存接口vfree。在内存碎片化的时候,申请连续物理页的成功
比较低,可以申请不连续的物理页,映射到连续的虚拟页,即虚拟地址连续而物理地址不连续。
内存控制组用来控制进程占用的内存资源。当内存碎片化的时候,找不到连续的物理页,内存碎片整理通过迁移方式得到连续的物理
页。在内存不足的时候,页回收负责回收物理页。
3、 硬件
MMU包含一个页表缓存, 保存最近使用过的页表映射,避免每次把虚拟地址转换为物理地址都需要查询内存中的页表。解决处理器执行速
度和内存速度不匹配问题,中间增加一个缓存。一级缓存分为数据缓存和指令缓存。 二级作用协调一级缓存和内存之间的工作效率。

代码详解

所以代码在系统调用中怎么传递的
在这里插入图片描述

在执行结果看看内存分配的对应地址
使用cat /proc/进程号/maps 找到对应进程的一个内存分布图
下面的heap(堆)中的内存分布和代码中创建的一样

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main(int argc, char* argv[])
{// 使用 sbrk 系统调用申请 堆内存int *p = sbrk(0);// 记录该堆内存地址int *p_old = p;// 继续为 申请的堆内存, 申请 1024 字节内存p = sbrk(1024);// 打印进程 ID , PID printf("pid : %d\n", getpid());// 打印 申请的 堆内存地址 , 发现地址没有变化printf("p_old : %p \np : %p \n", p_old, p);// 申请新的 堆内存int *p_new = sbrk(0);// 打印新的 堆内存地址printf("p_new : %p\n", p_new);// 此处死循环阻塞, 方便查看 /proc/pid/maps 中的信息// 进程退出后 , 进程相关内存信息也会同时销毁while (1);return 0;
}

sbrk 返回的指针 p , 在第二次申请内存时 , 指针始终没有改变 , 一直都是 0x0000 557f fee6 6000 地址 ;
如果使用新的指针 p_new 接收 sbrk 系统调用返回的堆内存指针 , 则分配的是新的地址 ;
在这里插入图片描述

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

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

相关文章

【React笔记】react循环列表的写法

react循环的写法 简单循环输出人名简单循环输出json格式数组 简单循环输出人名 循环输出people数组中的四个人名 import ReactDOM from react-dom/client;const people [宋江,卢俊义,吴用,公孙胜 ]; const root ReactDOM.createRoot(document.getElementById(root)); root.…

gitee提交项目失败记录:remote:error:hook declined to update refs/heads/master

问题描述&#xff1b; 今天修改了项目里面一些文件内容&#xff0c;结果提交的时候报错了&#xff0c;可以提交到本地仓库&#xff0c;但提交到中央仓库报如下异常&#xff0c;因此记录下&#xff0c;防止后面再遇到…… 解决办法&#xff1a; 登录gitee账号&#xff0c;在设置…

spring10-配置数据元

他的作用是提高我们程序性能的&#xff1a;我们怎么用呢&#xff01;先创建我们数据源对象&#xff1a;创建初始化对象之后&#xff0c;创建数据源对象之后&#xff0c;会给我们一些初始化资源。 使用完后还给他 &#xff0c;这是一种环保的思想。 常见的数据源&#xff1a;底…

Markdown 进阶语法:Mermaid 绘图 (一) - 流程图 (Flowchart)

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

架构课学习笔记:职业成长

架构师没有明确的定义&#xff0c;郭老师提出具备的能力&#xff1a;就是为一个复杂系统设计软件的能力&#xff0c;以及引导研发团队实施的能力。从5个 阶段来看对应的能力维度&#xff1a;结构化设计、解决横向问题、解决跨领域冲突、正确的技术决策和创造生存优势。 一结构…

哈夫曼树-算法

一、霍夫曼树基本概念&#xff1a; 路径&#xff1a;从树的一个结点到另外一个结点的分支构成这两个结点的路径 结点的长度&#xff1a;两节点之间路径的分支数 树的路径长度&#xff1a;从树根到每一个结点的长度之和&#xff0c;记做TL: 结点数目相同的二叉树中&#xff0…

Linux--冯诺依曼体系结构

【Linux】冯诺依曼体系结构、操作系统及进程概念_linux io 冯诺依曼_平凡的人1的博客-CSDN博客 存储器指的是内存还是磁盘&#xff1f; 内存 输入设备&#xff1a;键盘、摄像头、话筒、磁盘、网卡... 输出设备&#xff1a;显示器、音响、磁盘、网卡... CPU: 运算器&#x…

自然语言处理实战项目12-基于注意力机制的CNN-BiGRU模型的情感分析任务的实践

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下自然语言处理实战项目12-基于注意力机制的CNN-BiGRU模型的情感分析任务的实践&#xff0c;本文将介绍一种基于注意力机制的CNN-BiGRU模型&#xff0c;并将其应用于实际项目中。我们将使用多条CSV数据样例&#xff0…

flask和Vue3的前后端数据传输

&#xff08;一&#xff09;基于flask&#xff0c;构建一个后端 后端就采用flask的一般构建方法&#xff0c;然后用 flask-restful 构建一个接口&#xff0c;接口返回为json数据。 datas [{id: 1, name: xag, 年龄: 18}, {id: 2, name: xingag, age: 19}]class UserView(Res…

Docker学习笔记25

Docker swarm 应用&#xff1a; 镜像准备&#xff1a; 参照Docker学习笔记13&#xff0c;创建centos-nginx:v1的镜像&#xff1a; [rootswarm-1 nginxtest]# docker build -t centos-nginx:v1 . [] Building 211.5s (12/13) [] Building 211.7s (12/13) [] Building 211.8s (…

【操作系统】PV操作模型总结

根本方法&#xff1a;行为所需资源、行为与行为前后关系的图分析法 1.0顺序执行模型 特点&#xff1a;&#xff08;1&#xff09;多进程之间的执行具有牵制性&#xff08;2&#xff09;每个进程执行内容不复杂&#xff0c;强调进程之间的执行顺序。 分析方法&#xff1a;有向图…

SpringBoot 如何使用 EmbeddedDatabaseBuilder 进行数据库集成测试

SpringBoot 如何使用 EmbeddedDatabaseBuilder 进行数据库集成测试 在开发 SpringBoot 应用程序时&#xff0c;我们通常需要与数据库进行交互。为了确保我们的应用程序在生产环境中可以正常工作&#xff0c;我们需要进行数据库集成测试&#xff0c;以测试我们的应用程序是否能…