Day03 Linux的内存管理 虚拟内存 系统调用

Linux的内存管理:

一、内存管理的调用关系
    用户层
        STL     自动申请/释放内存   调用C++
        C++     new/delete         调用C
        C       malloc/free        调用POSIX 或者 Linux
        POSIX   brk/sbrk           调用内核kernal
        Linux   mmap/munmap        调用内核kernal
    系统层
        kernal kmalloc/vmalloc      调用驱动
        driver get_free_page

二、进程映像
    程序是存储在磁盘上的可执行文件(二进制文件、脚本文件)
    当执行程序时,系统会自动将该文件加载到内存中,在内存的分布情况称为进程映像
    从低地址到高地址的分区:
        text 代码段
        data 数据段
        bss  静态数据段
        heap 堆
        stack栈
        environ 环境变量表
        argv  命令行参数

        命令:ps -aux 查看当前所有进程信息
            可以查看进程号
        作业:打印出每个内存段中的数据所在的地址,然后与进程的内存信息记录文件中的地址对比
        /proc/进程号/maps

    总结:
    1、栈内存的增长方向,受操作系统影响,大部分是从高地址向低地址增长,但也有些系统例如Ubuntu就是从低地址向高地址增长
    2、如果是栈内存存储数组数据,数组中元素的增长方向一定是从低地址向高地址增长

虚拟内存:
    1、操作系统会为每个进程分配4G的虚拟内存
    2、用户只能使用虚拟内存,不能直接使用物理内存
    3、虚拟内存要与物理内存进行映射后才能被用户使用,如果使用了没有映射的虚拟内存就会产生段错误
    4、虚拟内存与物理内存的映射由操作系统(MMU)动态维护
    5、虚拟内存能让系统使用更安全,不会暴露真实的物理内存地址
    另一方面操作系统可以让进程使用比实际物理内存更大的地址空间
    6、4G的虚拟内存地址分为两个部分
        [0G~3G) 用户空间
        [3G~4G) 内核空间
    7、当进程\线程运行在用户空间时称进程处于用户态,当进程\线程运行在内核空间时称进程处于内核态
    8、当进程处于内核态时,进程运行存储使用在内核空间,此时CPU可以发出执行任何指令,运行的代码不受任何限制,可以自由地访问任意有效的地址,也可以直接访问接口
    9、当进程处于用户态时,进程运行存储使用在用户空间,
    此时被执行的代码要受到CPU很多的检查:例如:用户进程只能访问自己映射过的内存
    10、所有进程的内核

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值