一、linux IO 编程---内存管理
1.1 进程在虚拟空间中的布局
32位的操作系统虚拟空间的大小为 4GB,即每个进程在系统中分配的虚拟空间大小为4GB。这4GB的大小被分为了两个部分:
- 内核空间:1GB,内核起的进程
- 用户空间:3GB,主要是普通用户起的进程
物理内存和虚拟内存之间的交互:
虚拟地址和物理地址通过 CPU 的内存管理单元(MMU)进行转换。
1.1.1 虚拟地址
辅存:物理内存不够用时,在硬盘上临时创建的一个分区,用来存放进程使用率很低的数据,要用的时候再从辅存中提取进硬盘中,比如ubuntu 中的交换空间
1.2 内存管理
1.2.1 作用
- 进程隔离:保护独立的进程,防止互相干涉数据和存储控件
- 自动分配和管理:动态的分配,分配对程序员是透明的
- 支持模块化的程序设计:能够定义程序模块,并且动态地创建、销毁,改变模块大小
- 保护和访问控制:允许一部分内存可以由各种用户以各种方式进行访问
- 长期存储:关机后长时间保存信息
1.2.2 段页式管理
-
进程在虚拟内存中分为代码段、数据段和堆栈段
-
进程在段中有许多固定大小的块组成,这些块称为页
-
虚拟地址由段号、页号和页中偏移量构成
-
虚地址和主存中实地址(物理地址)进行动态映射,映射的单位就是页,一般的系统一页为4K的大小
- 换页过程:
- 换出:物理内存到辅存
- 换入:辅存到物理内存
- 消除了进程全部载入内存中
- 按需调页