下面25条描述主要从整体上介绍内存的相关概念,如各种地址格式, 及分段、分页机制。

26. 虚拟内存(virtual memory)是硬件内存管理单元(MMU)和应用程序内存请求的一个逻辑层。具有如下作用:a. 支持多个进程并发执行;b. 可以运行内存需求量大于物理内存上限的应用程序;c.进程可以执行只有部分代码在内存中的应用程序;d. 所有进程可以共享一个库或者应用程序的内存镜像(memory image);e. 应用程序可以再定址(relocatable),可以放置在物理内存的任意位置;f. 程序员可以编写机器无关代码,无需考虑物理内存组织的问题。
27. 虚拟地址空间(virtual address space)是内存子系统的要素。内核和MMU一起把进程使用的虚拟地址转化 为物理内存地址。现代的CPU可以已经包含了完成此工作的硬件单元。
28. 可用的RAM通常被分割为4KB或者8KB的页帧(page frames),并使用页表(Page Tables)来描述虚拟地址和物理地址的对应关系。
29. 随机访问内存(RAM)通常被分为两部分, 一小部分用于存储内核镜像(内核代码和内核静态数据结构),其余地给虚拟内存系统(virtual memory system)通过以下三种方式进行使用: a. 用于内核请求的缓冲区、描述符和其它动态内核数据结构;b. 用于进程请求的通用内存区域和文件映射内存;c. 通过caches从硬盘和其它带缓冲区设备获得更好的性能。
30. 当可用内存的某些关键阀值到达时, 页帧回收算法会被调用,从而释放额外的内存。
31. 内存碎片(memory fragmention)是虚拟内存系统必须解决的问题。内核通常强制使用连续的内存区域,所以即使多个内存碎片的总和大于内核的内存请求, 内存分配也可能失败。
32. 内核内存分配器(Kernel Memory Allocator)应该具有如下特征:a. 速度快;b. 最小化地浪费内存;c. 尽可能减少内存碎片;d. 兼容其它内存管理子系统(具有从这些系统借用和释放页帧的能力)。
33. 常见的KMA包括: Resource map allocator, Power-of-two free lists, McKusick-Karels allocator, Buddy System, Mach's Zone allocator, Dynix allocator, Solaris's Slab allocator。 Linux的KMA是在buddy system上面使用Slab allocator。
34. 当一个进程通过exec()执行一个程序时, 内核会给该进程提供一定的虚拟地址空间, 该空间用于以下用途:a. 程序的可执行代码;b. 程序的初始化数据;c. 程序未初始化的数据 ;d. 初始程序堆栈(如用户态栈User Mode Stack);e. 所需共享库的可执行代码和数据;f. 堆(程序动态请求的内存)。
35. 请求调页(demand paging)是近代Uinx操作系统采取的内存分配策略。通过这种策略, 进程 可以在没有页在物理内存的情况下执行程序 。 当进程访问这样的页时, MMU会产生一个异常, 异常处理函数会找到有效的内存区域并分配一个页,同时进行初始化。malloc()、brk()系统调用 也是类似的工作方式。
36. 带复制写(Copy On Write)也是虚拟地址空间所允许的内存分配策略。 如在创建一个新的进程时(fork), 内存只是把父进程的页帧赋给子进各一的地址空间, 但相应的权限被标记为只读, 当子进程试图修改父进程页帧的内容时, 会抛出一个异常, 异常处理函数会为子进程分配新的页帧并用父进程的页帧初始化它。
37. 为了解决磁盘和其它块设备访问速度慢的问题, 一部分可用的物理内存被用作cache。sync()用于磁盘同步(即写及时写回脏的缓冲dirty buffers)。
38. 设备驱动(device drivers)是内存和I/O设备交互的桥梁。设备驱动由控制一个或多个设备的数据结构和功能控制函数组成。
39. 内核提供特定的接口跟设备驱动交互,这种方法的好处在于:a. 与具体设备相关的代码可以封装在一个模块中;b.通过内核提供给驱动的接口,而不必了解内核源代码,设备 厂商就可以添加新的设备;c. 内核通过相同的接口处理所有的设备;d. 设备驱动可以动态地加载和卸载。
40. 用户态的程序是这样操作硬件设备的:需要操作硬件设备的用户态程序通过内核提供的文件系统调用(read, write,etc.)操作/dev下的文件, 这些文件对应的就是具体的设备的驱动接口, 内核会把相应的文件操作转化为针对该设备的具体的操作。
41. 在80 x 86微处理器中,需要区分三种类型的内存地址:a. 逻辑地址(Logical address);b. 线性地址(Linear address);c. 物理地址(Physical address)。
42. 逻辑地址, 通常包含在机器语言指令中,用于指明操作数或者 指令的地址。每个逻辑地址由段(segment)和偏移量(offset)组成。
43. 线性地址,即前面所说的虚拟地址(virtual address), 一个32位的无符号整数可以用于4GB(约4,294,967,296个内存单元)的内存寻址。用十六进制数表示的范围为0x00000000到0xffffffff。
44. 物理地址,用于在内存芯片中定位内存单元。对应于从微处理器(microprocessor)的管脚(pins)地址发送到内存总线(memory bus)的电子信号。 物理地址通常用一个32位或者36位的无符号整数表示。
45. 逻辑地址到物理地址的转换过程:首先是内存管理单元(MMU)通过一个段单元(segmentation unit)的硬件元件把逻辑地址转化为线性地址, 接着由页单元(paging unit)的硬件元件把线性地址转化为物理地址。
46. 内存仲裁器(memory arbiter)是位于总线和各个 内存芯片之间的硬件元件,它的作用是控制内存芯片的访问。 当内存芯片空闲时,它授权一个对该内存的访问请求,而当内存芯片繁忙时, 它延迟对该内存芯片的访问请求。
47. 在多处理器系统中, 所有的CPU通常共享相同的内存, 各个CPU对内存的并发访问通过内存仲裁器协调完成;在单处理器系统中, CPU和DMA(Direct Memory Access)对内存的并发访问也由内存仲裁器协调完成。
48. 实模式(real mode)和保护模式(protected mode)是Intel 微处理器从80286模式开始的用于执行地址转化的两种 不同的方式。实模式的存在是为了兼容以前老的模式和允许操作系统自举(bootstrap)。
49. 一个逻辑地址由两部分组成: 段标志符(segment identifier)和用于指明段内相对地址的偏移量(offset)。
50. 段标志符,也叫做段选择子(Segment Selector),对应一个16位的域;常见的格式为:第0位和第1位对应请求优先级别(RPL, Request Privilege Level),第2位对应表指示器(Table Indicator), 第3位到第15位对应索引index。

后续会介绍硬件中的段是如何组织的。

转载于:https://www.cnblogs.com/quiet/archive/2012/03/27/2419205.html

《深入理解Linux内核》条目式笔记 _2相关推荐

  1. 《深入理解Linux内核》 读书笔记

    深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...

  2. 深入理解LINUX内核(影印版第3版)》的笔记

    书名: 深入理解LINUX内核(影印版第3版) 作者: Daniel P.Bovet/Marco Cesati 副标题: Understanding the Linux Kernel 页数: 923 ...

  3. 笔记:深入理解Linux内核(二)

    笔记:深入理解Linux内核(二) 二零二一年十月二十四日 文章目录 笔记:深入理解Linux内核(二) 第二章:内存寻址 内存地址 硬件中的分段 段选择符和段选择器 段描述符 快速访问段描述符 分段 ...

  4. 深入理解Linux内核第3版--笔记-1.pdf

    深入理解Linux内核第3版.pdf         Understanding the Linux Kernel, 3rd Edition Preface    The Audience for T ...

  5. 深入理解Linux内核之主调度器(下)

    4.进程上下文切换 接前文:深入理解Linux内核之主调度器(上) 前面选择了一个合适进程作为下一个进程,接下来做重要的上下文切换动作,来保存上一个进程的"上下文"恢复下一个进程的 ...

  6. 深入理解 Linux 内核

    Linux 内核系列文章 Linux 内核设计与实现 深入理解 Linux 内核 深入理解 Linux 内核(二) Linux 设备驱动程序 Linux设备驱动开发详解 文章目录 Linux 内核系列 ...

  7. 深入理解Linux内核-内存管理

    页框管理 内核对整个物理内存进行分页,每页大小为4KB或者4MB(大小无所谓,不同os都可能不一样),一般认为Linux的页大小为4KB,内核必须记录好每个页框的信息,所以linux内核把所有的页框都 ...

  8. 深入理解Linux内核(一)——Linux操作系统基础概念

    文章目录 前言 操作系统基本概念 多用户系统 用户和组 进程 内核体系结构 Unix文件系统概述 文件 硬链接和软链接 文件类型 文件描述符与索引节点 访问权限和文件模式 文件操作的系统调用 打开文件 ...

  9. 深入理解Linux内核之内存寻址

    说明: 本文基于第三版<深入理解 Linux 内核>,该部分以 80x86 处理器为基准进行介绍,并且略过了原文中详细介绍32位扩展分页部分. https://xcraft.tech/20 ...

最新文章

  1. java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文
  2. 想通关「限流」?只要这一篇
  3. MyBatisPlus条件构造器带条件更新update使用
  4. 模拟人生4修身拉德兰连衣裙MOD下载
  5. cloudstack java api_CloudStack API编程指引
  6. 爆赞!java生成文件
  7. mysql语句错误怎么查找_SQL语法错误但是怎么也找不出来,求指导
  8. ESRI大赛三维模块介绍
  9. 织梦程序添加音乐上传功能
  10. Lodop,前端自定义打印
  11. 如何找到QQ互联开发者认证在哪?
  12. 【Linux】linux清除ip地址命令
  13. 使用GLSurfaceView实现涂鸦画板功能
  14. b51显微镜_1112-揭开微观世界的奥秘--显微镜发明的科学历程
  15. echarts-半圆
  16. XtraReport 填补空白行,生成空白行
  17. C++function,future,packaged_task
  18. 嵌入式中串口、COM口、TTL、RS232、RS485的区别详解
  19. 1259_STM32CubeProgrammer的简单使用
  20. 老大说不要在项目中使用存储过程

热门文章

  1. Java继承、封装、多态
  2. 软件测试工程师面试必备技能
  3. Jmeter如何在大并发测试下,让登录或者后续接口只执行一次?
  4. tcpdf html 支持css吗,TCPDF 5.1 发布,增加对CSS的支持
  5. Spring – IoC 容器
  6. 125w短波通信距离_125W军用自主选频短波电台
  7. 蓝牙广播错误码3_蓝牙简介—物理层(PHY)
  8. 零基础小白如何学习UI设计
  9. Web前端前景、最新技术、学习路线?
  10. c51随机数不重复_怎么让51单片机产生随机数?