一、linux IO 编程---内存管理

时间:2022-04-08 11:47:32

1.1 进程在虚拟空间中的布局

  32位的操作系统虚拟空间的大小为 4GB,即每个进程在系统中分配的虚拟空间大小为4GB。这4GB的大小被分为了两个部分:

  • 内核空间:1GB,内核起的进程
  • 用户空间:3GB,主要是普通用户起的进程

  一、linux IO 编程---内存管理    一、linux IO 编程---内存管理

  

  一、linux IO 编程---内存管理

  物理内存和虚拟内存之间的交互:

  一、linux IO 编程---内存管理

  虚拟地址和物理地址通过 CPU 的内存管理单元(MMU)进行转换。

1.1.1 虚拟地址

  一、linux IO 编程---内存管理

  辅存:物理内存不够用时,在硬盘上临时创建的一个分区,用来存放进程使用率很低的数据,要用的时候再从辅存中提取进硬盘中,比如ubuntu 中的交换空间

1.2 内存管理

1.2.1 作用

  • 进程隔离:保护独立的进程,防止互相干涉数据和存储控件
  • 自动分配和管理:动态的分配,分配对程序员是透明的
  • 支持模块化的程序设计:能够定义程序模块,并且动态地创建、销毁,改变模块大小
  • 保护和访问控制:允许一部分内存可以由各种用户以各种方式进行访问
  • 长期存储:关机后长时间保存信息  

1.2.2 段页式管理

  • 进程在虚拟内存中分为代码段、数据段和堆栈段

  • 进程在段中有许多固定大小的块组成,这些块称为页

  • 虚拟地址由段号、页号和页中偏移量构成

  • 虚地址和主存中实地址(物理地址)进行动态映射,映射的单位就是页,一般的系统一页为4K的大小

  • 换页过程:
    • 换出:物理内存到辅存
    • 换入:辅存到物理内存  
    • 消除了进程全部载入内存中
    • 按需调页