`
pengpeng
  • 浏览: 84154 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

浅析linux内存模型

阅读更多

0. 内存基本知识

        我们通常称 linux的内存子系统为:虚拟内存子系统(virtual memory system),为何这样称谓呢?

        其实这个是个很牛的设计。linux充分利用了程序的局部性原理,结合线性地址的概念(虚拟地址)使得运行于操作系统上的每个进程都可以使用所有用户空间主存。而且虚拟内存还解决了内存不连续和碎片的问题(因为在程序来说线性地址都是连续的);每个进程都有各自的页表,虚拟地址空间都各自独立,互补干扰;

        那么我们的程序里申请的内存的时候,linux内核其实只分配一个虚拟内存( 线性地址),并没有分配实际的物理内存。只有当程序真正使用这块内存时,才会分配物理内存。这就叫做延迟分配和请页机制。释放内存时,先释放线性区对应的物理内存,然后释放线性区;

        什么时候内核为进程划分物理内存的呢? 当进程执行时,申请的内存只是一块虚拟内存区域,而不是实际的物理内存,只是获得了一块虚拟内存区域上线性地址区间的使用权。实际的物理内存只有当进程真的去访问新获得的虚拟地址时,才会由"请页机制"产生"缺页"异常,从而进入分配实际页框的例程。此异常会告诉内核去真正为进程分配物理页,并建立对应的页表。这之后虚拟地址才实实在在的映射到了物理内存上了。"请页机制"将物理内存的分配延后了,这样是充分利用了程序的局部性原来,节约内存空间,提高系统吞吐;

        那么cpu执行指令访存,使用的都是物理内存地址,而我们的编译器生成的二进制码实际上分配的都是逻辑内存(逻辑地址);那么线性地址是如何转换为物理内存地址的呢?我们知道内存模型里有,段,页机制来寻址内存的;(物理内存也是划分为页为单位划分的) ;我们的程序主要分为数据段,代码段;数据段存放代码里已初始化数据,代码段存放可执行代码指令;linux通过段机制将我们程序的逻辑地址转换为线性地址,又通过页机制将线性地址转换为物理地址。

 

1. 内存布局

     我们编写的程序是如何在内存中布局的呢?

     我们知道Linux内核启动起来时,如果是4G内存,那么会有大约1G被内核占用。其他3G会被用户进行使用。我们稍后会讲解内核内存如何和用户内存通信。

     一个进程对应的内存空间包含一下5个区:

     代码段 :存放可执行文件的操作指令;

      数据段: 存放可执行文件申请已经初始化的全局变量;

     BSS段:   存放未初始化的全局变量;

     堆:       存放用户程序运行中,动态申请的内存空间;

     栈:       存放用户程序运行中,临时创建的局部变量;我们知道CPU有寄存器是直接可以访问栈的,所以栈比堆快多了。

 

    那么既然每个进程都有各自的虚拟内存空间,各自互不相干,那么进程间如何共享内存,内核又是如何向进程空间传递数据?  都是通过映射实现的,通过将内核的虚拟内存映射到当前进程用户空间的虚拟内存,当然映射时,要新建一个页表;  

2. 虚拟内存管理

    简单的说linux的虚拟内存管理技术:让每个进程看上去可以使用整个用户空间主存。通过 线性地址加上swap机制; swap机制:如果一个正在被cpu执行的进程恰巧和另外一个进程的线性地址指向了同一块物理内存。那么Linux通过swap机制,将这块内存写到磁盘上,叫做唤出。被唤出的数据,在使用时,又被换入;

    linux还通过cache+buffer机制: 将最近使用过的数据尽量cache,buffer起来,以便稍后会使用到;这就是说我们的可用内存=free + buffer + cache;

 


0
0
分享到:
评论

相关推荐

    浅析Linux内存架构模型.pdf

    "浅析 Linux 内存架构模型" 本文将从 Linux 内存架构模型的角度,讨论 Linux 操作系统中内存管理的机制和实现方式。操作系统的内存管理是指操作系统根据程序的请求,把内存段分配给它们,当程序不再需要内存时释放...

    浅析linux设备模型—(详解设备与驱动)

    此外,设备模型还涉及到中断处理、DMA(直接内存访问)管理以及电源管理等关键功能。中断处理是设备响应外部事件的主要机制,而DMA则提高了数据传输效率,避免了CPU频繁的上下文切换。电源管理则关注如何在不影响...

    LINUX设备模型浅析固件篇.pdf

    根据提供的文件信息,本文将深入探讨Linux设备模型中的固件管理机制,并重点解析与CY68013 USB 2.0芯片相关的固件下载原理。为了更好地理解固件在Linux设备模型中的作用及其管理方式,我们将从以下几个方面进行详细...

    linux 设备模型浅析 设备篇

    # Linux 设备模型浅析 —— 设备篇 ## 前言 为了更好地理解Linux设备模型,我们可以通过结合理论介绍和内核代码的方式来进行学习。这样不仅能让我们更直观地了解概念,还能深入掌握其实现细节。本文将以S3C2410RTC...

    基于Linux的嵌入式应用浅析.pdf

    Linux内核的特性,如多任务、多进程以及内存保护,使得它能够适应复杂的嵌入式环境,支持多种硬件平台,如X86、ARM、NEC和MOTOROLA等芯片。 【Linux内核实时性的局限】 1. **内核模式与用户模式切换**:Linux进程...

    基于Linux的Android OS平台应用浅析.pdf

    - **Linux内核(Linux Kernel)**:提供了基础服务,如内存管理、进程和线程控制、网络协议栈以及驱动模型,是Android系统的基础。 2. **Android系统特点** - **开源性**:Android的开放源代码允许开发者深入...

    Linux下文件系统实现浅析.pdf

    总的来说,Linux下的文件系统实现是一个复杂而精细的过程,涉及内存管理、磁盘I/O、数据结构设计等多个方面。理解VFS的工作原理和数据结构对于系统开发者至关重要,它不仅关乎到文件系统的性能,也直接影响到整个...

    Linux下E1000网卡驱动分析

    在 Linux 下,网卡驱动程序的开发需要遵守 Linux 设备驱动模型,该模型定义了网卡驱动程序的总体架构和工作流程。网卡驱动程序需要实现对应的 PCI 设备驱动程序,以便与操作系统和硬件进行交互。同时,还需要实现...

    Android软件前景浅析

    1. **Linux内核层**:负责提供操作系统的基本功能,如内存管理、进程管理等。 2. **硬件抽象层(HAL)**:包含一系列硬件驱动程序,用于实现硬件与操作系统之间的交互。 3. **应用框架层**:提供一系列API,允许...

    Android嵌入式系统架构及内核浅析_王茜

    Android嵌入式系统架构及内核浅析的知识点 一、Android系统概述 Android是Google公司推出的基于Linux平台的开源手机操作系统,它不仅包括操作系统本身,还整合了中间件、用户界面和应用程序,旨在消除移动产业创新...

    Android嵌入式系统架构及内核浅析

    此外,Android内核还实现了安全性、内存管理、进程管理、网络协议栈和驱动模型等功能,为上层应用提供了一个稳定且高效的运行环境。 - **硬件驱动程序**:这部分主要包括了各种硬件设备的驱动,如显示屏、摄像头、...

    Android嵌入式系统架构及内核浅析.pptx

    Linux内核是Android系统的核心,它负责系统的基本功能,如硬件驱动、内存管理、进程调度等。Android运行时(ART)是Android应用程序的执行环境,它负责应用程序的编译、安装和运行。应用程序框架是Android系统的软件...

    浅析frmware的加载和init通过netlink处理uevent事件的一般流程

    3. **加载固件**:一旦找到固件文件,驱动程序会调用`request_firmware()`函数向固件加载子系统发送请求,加载固件到内存中。 4. **传递固件**:固件加载子系统会读取文件内容并将其传递给驱动程序,然后驱动程序...

    Qtopia部分内部机制浅析.rar

    3. **事件驱动模型**:Qtopia采用事件驱动的编程模型,当用户与界面交互或系统发生其他事件时,事件被分发到相应的对象进行处理,这极大地提高了程序的响应速度和用户体验。 4. **多线程支持**:为了充分利用多核...

    浅析wlan驱动和sd卡硬件绑定的简单流程.rar

    本篇将深入探讨“wlan驱动”(无线局域网驱动)与“sd卡”(Secure Digital Card)硬件绑定的简单流程,主要基于Linux开发环境。 首先,让我们了解wlan驱动。WLAN驱动是为无线网络适配器设计的软件组件,它负责与...

    LINUX系统开发技术详解---基于ARM

    2.1.3 Linux 与ARM处理器........................................................................................ 12 2.2 ARM指令集...........................................................................

    浅析计算机软件JAVA编程的特点及应用.zip

    并且,Java内存管理的垃圾回收机制自动处理不再使用的对象,减少了内存泄漏的问题,让开发者可以更专注于业务逻辑。 Java在计算机软件应用上广泛且多样。例如,在企业级应用开发中,Java EE(企业版)提供了一系列...

    计算机虚拟化技术浅析.doc

    计算机虚拟化技术是一种创新的计算模型,它将物理硬件资源逻辑化,使多个操作系统和应用程序可以在同一硬件平台上并发运行,而彼此之间互不影响。虚拟化技术的核心在于将硬件资源(如CPU、内存、磁盘存储)从物理...

Global site tag (gtag.js) - Google Analytics