Linux程序地址空间及库函数与系统调用接口

程序地址空间

  • 概念:程序地址空间也叫虚拟地址空间,在Linux下,每运行一个程序即一个进程,操作系统都会为其分配一个虚拟的地址空间,在32位操作系统下,操作系统分配的虚拟地址空间为0~4G。

  • 进程的内存描述符(mm_struct):每个进程都有一个mm_struct,它是一个结构体,我们也把它叫做内存描述符,Linux就是通过这个结构体实现对内存的管理,mm_struct就是用来描述一个进程的虚拟地址空间

  • 虚拟地址空间的分配情况
    从下到上为:
    受保护的区域 (0~4K)
    代码段 – 二进制机器指令
    全局区 (已初始化全局变量 (data段) 未初始化全局变量(bss段))
    堆 (从下往上存储)
    共享库 (c标准库及Linux系统IO函数)
    栈 (从上往下存储)
    命令行参数
    环境变量
    内核区 (kernel)
    示意图如下
    在这里插入图片描述

  • 为什么要引入虚拟地址空间
    1、 虚拟地址空间能够让进程使用连续的内存地址。
    2、 它能保证进程的独立性
    3、 它能进行内存访问控制,提高内存的利用率

  • Linux下内存管理
    CPU通过进程描述符task_struct中指向内存描述符的一个指针找到内存描述符,进而通过mm_struct内存描述符查到页表信息,通过页表将虚拟地址映射到实际的物理内存中,进而操作内存。

库函数与系统调用接口

  • 关系:库函数其实是对系统调用接口的一层封装,它们是上下级的调用关系,库函数调用了系统调用函数。库函数通过发起系统调用,调用系统调用接口,通过系统调用接口调用设备驱动,再通过设备驱动进而操作硬件设备。
  • 示意图如下

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43503315/article/details/89054554
今日推荐