Linux内存体系及文件系统

一.linux内存体系

  1. 物理和虚拟内存

    • Linux内核只能直接映射第一个GB的的物理内存(896M,因为还要考虑到保留的空间)。在此上的内存被称作ZONE_NORMAL,这部分空间必须映射到最下面的1GB。
    • 虚拟内存寻址布局

      32位和64位架构Linux系统的虚拟寻址布局:

      在32位架构上,单个进程可以利用的最大地址空间是4GB,这是受到了32位虚拟内存映射的限制;64位架构,因为没有内存限制存在,每个进程能够都有可能使用巨大的地址空间。

  2. 虚拟内存管理器
    • 页帧分配:页是物理内存或虚拟内存中一组连续的线性地址,Linux内核以页为单位处理内存,页的大小通常是4KB。
    • 伙伴系统:Linux内核使用名为伙伴系统(Buddy system)的机制维护空闲页,伙伴系统维护空闲页面,并且尝试给发来页面申请的进程分配页面
    • 伙伴系统分配内存页:

    • 页帧回收:当进程请求指定数量的内存页没有可用的内存页时,内核会尝试释放特定的内存页给新的请求使用,这个过程叫内存回收.kswapd内核线程和try_to_free_page()内核函数负责页面回收.

      kswapd通常在task interruptible状态下休眠,当一个区域中的空闲页低于阈值的时候,它就会被伙伴系统唤醒。页面主要有两种用途:页面缓存(page cahe)和进程地址空间(process address space)。

    • swap:是保证操作系统可以分配超出物理内存大小的空间,但是Linux使用swap的空间的办法更加高效。

二.linux文件系统

  1. 虚拟文件系统

    虚拟文件系统(VFS)是一个处于用户进程和各类文件系统之间的抽象接口层,VFS提供访问文件系统对象的通用对象模型(例如,i-node、文件对象、页缓存、)和方法

    • 日志

      日志系统解决了fsck工作完才能使用文件系统的问题,他先把要修改的数据写入一个叫做日志区域(journal area)的地方。

    • Ext2

      Ext2是一个简单和快速的文件系统,没有日志功能。

      Ext2的文件系统数据结构,文件系统由一个引导扇区(boot sector)开始,后面跟着块组(block groups)。

      内核首先搜索文件的i-node,在接到进程打开/var/log/messages文件的请求时,内核分析文件路径,然后搜索/(根目录)的条目,内核会找到/var目录的i-node,然后再来看看/var目录,直到找到/var/log/messages文件的i-node。一旦内核找到了文件的i-node,然后就试着访问真正的用户数据块。

    • Ext3

      ext3拥有:可用性,数据完整性,速度,灵活性

    • 日志模式

      日志(journal) 通过记录文件数据和元数据

      有序(ordered) 该模式下只记录元数据

      回写(writeback) 这个日志选项提供最快的数据访问能力

    • ReiserFS

      ReiserFS是一个快速的日志文件系统,具备优化磁盘空间利用率和快速的崩溃恢复功能

    • 日志文件系统

      日志文件系统(Journal File System,JFS)是一个全64位文件系统,能支持超大文件和分区。

    • XFS

      支持超大文件和分区

原文地址:https://www.cnblogs.com/magicianyin/p/8529102.html

时间: 2024-10-22 04:37:51

Linux内存体系及文件系统的相关文章

Linux 内存文件系统

Linux内存文件系统:可满足高IO的要求 ramdisk: 基于虚拟在内存中的其他文件系统(ex2fs). 挂载方式:mount /dev/ram /mnt/ramdisk ramfs: 物理内存文件系统,只存在于物理内存中.其大小也不是固定的,而是随着所需要的空间动态得增减. 挂载方式:mount -t ramfs none /mnt/ramfs -o maxsize=2000 tmpfs: 虚拟内存文件系统,不同于块设备形式实现的ramdisk, 也不同于真对物理内存实现的ramfs 文件

linux内存管理

一.Linux 进程在内存中的数据结构 一个可执行程序在存储(没有调入内存)时分为代码段,数据段,未初始化数据段三部分:    1) 代码段:存放CPU执行的机器指令.通常代码区是共享的,即其它执行程序可调用它.假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段.     2) 数据段:存放已初始化的全局变量.静态变量(包括全局和局部的).常量.static全局变量和static函数只能在当前文件中被调用.     3) 未初始化数据区(uninitializeddata s

Linux内存管理机制

一.首先大概了解一下计算机CPU.Cache.内存.硬盘之间的关系及区别. 1.  CPU也称为中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路, 是一台计算机的运算核心(Core)和控制核心( Control Unit).它的功能主要是解释计算机指令以及处理计算机软件中的数据.中央处理器主要由三核心部件组成,运算器.控制器和总线(BUS),运算器又主要由算术逻辑单元(ALU)和寄存器(RS)组成. 2.Cache即高速缓冲存储器,是位于CPU与主内存

Linux内存管理 【转】

转自:http://blog.chinaunix.net/uid-25909619-id-4491368.html Linux内存管理 摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法.力求从外到内.水到渠成地引导网友分析Linux的内存管理与使用.在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理之间的关系,希望大家最终能驾驭Linux内存管理. 前言 内存管理一向是所有操作系统书

Cgroup - Linux 内存资源管理

Hi ,我是 Zorro .这是我的微博地址,我会不定期在这里更新文章,如果你有兴趣,可以来关注我呦. 另外,我的其他联系方式: Email: [email protected] QQ: 30007147 本文PDF 在聊 cgroup 的内存限制之前,我们有必要先来讲解一下: Linux 内存管理基础知识 free 命令 无论从任何角度看, Linux 的内存管理都是一坨麻烦的事情,当然我们也可以用一堆.一片.一块.一筐来形容这个事情,但是毫无疑问,用一坨来形容它简直恰当无比.在理解它之前,我

20150222 IMX257 Linux内存空间内存分配

2015-02-22     李海沿 不知道为什么,最近做梦总是梦见以前的事,以前的场景,可能是28号回学校的缘故吧!好了,不扯废话了,前面我针对gpio按键这个实验学习了中断,信号量,定时器等内核实现,下面我们,使用以前的字符设备模板来写一个Linux内存空间内存分配的实验. 一.KMALLOC kmalloc 是一个功能强大且高速(除非被阻塞)的工具,所分配到的内存在物理内存中连续且保持原有的数据(不清零).原型: #include <linux/slab.h> void *kmalloc

linux内存基础知识和相关调优方案

内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁.计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大.内存作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据.只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行.对于整个操作系统来说,内存可能是最麻烦的的设备.而其性能的好坏直接影响着整个操作系统. 我们知道CPU是不能与硬盘打交道的,只有数据被载入到内存中才可

伙伴系统之伙伴系统概述--Linux内存管理(十四)

日期 内核版本 架构 作者 GitHub CSDN 2016-09-02 Linux-4.7 X86 & arm gatieme LinuxDeviceDrivers Linux内存管理 1 前景回顾 1.1 Linux内存管理的层次结构 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点 管理区(Zone)

linux内存管理概述

其中介绍了虚拟内存的机制以及mmap系统调用的实现.mmap允许直接将设备内存映射到用户进程的地址空间中.物理内存的管理,包括缓存的分配及回收,请页机制,交换空间等. 1)交换模块(swap) 这个模块负责控制内存内容的换入换出,它通过替换机制,使得物理内存的页框(RAM页)中保留有效的逻辑页,即从主存中淘汰最近没被访问的逻辑页,保存近来访问过的逻辑页.该模块实现的源程序分别是: page_io.c的主要函数功能是读写交换文件. swap_state.c的主要函数功能是修改交换高速缓存(swap