`
lobin
  • 浏览: 425479 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于os的一些整理:第三篇:内存管理

 
阅读更多

主要关于物理内存以及x86架构对内存的管理。

 

通常我们说的内存主要指的是内存条。

 

内存条

内存条也是一种设备,不同的是x86可以直接读写操作内存。内存条中提供的可以临时存储我们数据的介质就是我们说的物理内存。

 

写道
| |
| ... |
---+-----+--- ~
^ | | ^
64k+-----+ | 1048575:0xfffff
v | ... | |
---+-----+ | 983040:0xf0000
^ | | |
64k+-----+ | 983039:0xeffff
v | ... | |
---+-----+ | 917504:0xe0000
| | |
+-----+ | 917503:0xdffff
| ... | |
+-----+ | 851968:0xd0000
| | |
+-----+ | 851967:0xcffff
| ... | |
+-----+ | 786432:0xc0000
| | |
+-----+ | 786431:0xbffff
| ... | |
+-----+ | 720896:0xb0000
| | |
+-----+ | 720895:0xaffff
| ... | |
+-----+ | 655360:0xa0000
| | |
+-----+ | 655359:0x9ffff
| ... | |
+-----+ | 589824:0x90000
| | |
+-----+ | 589823:0x8ffff
| ... | |
+-----+ 1M 524288:0x80000
| | |
+-----+ | 524287:0x7ffff
| ... | |
+-----+ | 458752:0x70000
| | |
+-----+ | 458751:0x6ffff
| ... | |
+-----+ | 393216:0x60000
| | |
+-----+ | 393215:0x5ffff
| ... | |
+-----+ | 327680:0x50000
| | |
+-----+ | 327679:0x4ffff
| ... | |
+-----+ | 262144:0x40000
| | |
+-----+ | 262143:0x3ffff
| ... | |
---+-----+ | 196608:0x30000
^ | | |
64k+-----+ | 196607:0x2ffff
v | ... | |
---+-----+ | 131072:0x20000
^ | | |
64k+-----+ | 131071:0x1ffff
v | ... | |
---+-----+ | 65536:0x10000
^ | | |
64k+-----+ | 65535:0x0ffff
v | ... | v
---+-----+--- 00000:0x00000

 

 

物理内存

根据上面对内存条的解释,我们可以将输入写入到内存。这里有个内存的物理地址。

 

物理地址

像我们平常编程的时候,也会涉及到内存地址,但我们通常所说的内存地址,基本都是指逻辑地址,即便是在C这种能够直接操纵访问内存的编程语言。

 

在上面图示中,右边标示的就是内存的物理地址。如0x20000,就是从内存条其实位置0x00000到0x20000的偏移。在汇编中,我们通常也不是直接表示和操纵这个物理地址,而是通过段寄存器和段偏移来表示这个物理地址,如ds=0x2000,bx=0x0000。

 

 

写道

 

| |
| ... |
---+-----+--- ~
^ | | ^
64k+-----+ | 1048575:0xfffff
v | ... | |
---+-----+ | 983040:0xf0000
^ | | |
64k+-----+ | 983039:0xeffff
v | ... | |
---+-----+ | 917504:0xe0000
| | |
+-----+ | 917503:0xdffff
| ... | |
+-----+ | 851968:0xd0000
| | |
+-----+ | 851967:0xcffff
| ... | |
+-----+ | 786432:0xc0000
| | |
+-----+ | 786431:0xbffff
| ... | |
+-----+ | 720896:0xb0000
| | |
+-----+ | 720895:0xaffff
| ... | |
+-----+ | 655360:0xa0000
| | |
+-----+ | 655359:0x9ffff
| ... | |
+-----+ | 589824:0x90000
| | |
+-----+ | 589823:0x8ffff
| ... | |
+-----+ 1M 524288:0x80000
| | |
+-----+ | 524287:0x7ffff
| ... | |
+-----+ | 458752:0x70000
| | |
+-----+ | 458751:0x6ffff
| ... | |
+-----+ | 393216:0x60000
| | |
+-----+ | 393215:0x5ffff
| ... | |
+-----+ | 327680:0x50000
| | |
+-----+ | 327679:0x4ffff
| ... | |
+-----+ | 262144:0x40000
| | |
+-----+ | 262143:0x3ffff
| ... | |
---+-----+ | 196608:0x30000
^ | | |
64k+-----+ | 196607:0x2ffff
v | ... | | / +---------+ +---------+
---+-----+ | 131072:0x20000<------ds:bx |ds:0x2000| |bx:0x0000|
^ | | | \ +---------+ +---------+
64k+-----+ | 131071:0x1ffff
v | ... | |
---+-----+ | 65536:0x10000
^ | | |
64k+-----+ | 65535:0x0ffff
v | ... | v
---+-----+--- 00000:0x00000

 

 

并不是整块物理内存我们都可以用上,我们将低地址区间的内存区间称为低端内存,将高地址区间的内存区间称为高端内存。Phoenix BIOS系统内存映射(mm)在将各地址区间进行映射描述时,有些地址区间可以分配给os使用,有些地址区间不能分配给os使用。

 

低端内存

 

高端内存

 

x86

 

内存探测

 

Int 15/AX=E820h

Phoenix BIOS system memory map address range descriptor

菲尼克斯BIOS系统内存映射地址区间描述符

 

Offset  Size    Description

00h    QWORD   base address

08h    QWORD   length in bytes

10h    DWORD   type of address range

 

基地址占8个字节,字节长度占8个字节,地址区间类型占4个字节。

 

Values for System Memory Map address type:

01h    memory, available to OS

02h    reserved, not available (e.g. system ROM, memory-mapped device)

03h    ACPI Reclaim Memory (usable by OS after reading ACPI tables)

04h    ACPI NVS Memory (OS is required to save this memory between NVS

sessions)

other  not defined yet -- treat as Reserved

 

地址区间类型为01h表示可分配给os使用的内存,02h表示预留的,不可用的内存区间,例如系统只读内存(ROM),内存映射的设备,03h表示分配给ACPI(高级配置电源接口)的内存区间,在os读取了ACPI表之后,这块内存区间也可以分配给os使用,04h表示分配给ACPI(高级配置电源接口)NVS(Network Video System,网络视频系统)的内存区间。

 

如果有其他地址区间类型的值,这些都是还没有定义的类型,表示预留的地址区间类型。

 

这种方式读取出来的内存映射地址区间并不是连续的,中间可能存在内存空洞。

 

下面是我读取出来的BIOS系统内存映射地址区间描述符表实际信息:

base address=0(0x0);                 length=651264,   in bytes; type=1; next offset=1; 

base address=651264(0x9F000);        length=4096,     in bytes; type=2; next offset=2; 

base address=950272(0xE8000);        length=98304,    in bytes; type=2; next offset=3; 

base address=1048576(0x100000);      length=32440320, in bytes; type=1; next offset=5; 

base address=33488896(0x1FF0000);    length=65536,    in bytes; type=3; next offset=6; 

base address=4294705152(0xFFFC0000); length=262144,   in bytes; type=2; next offset=0; 

 

Int 15/AX=E802h

 

 

Int 15/AX=E801h

和Int 15/AX=E801h对应的还有个Int 15/AX=E881h,它和Int 15/AX=E801h不同的是,Int 15/AX=E881h通过32位寄存器返回信息。

 

Int 15/AH=C7h

SYSTEM - later PS/2s - RETURN MEMORY-MAP INFORMATION

 

通过Int 15/AH=C0h中断来检测Int 15/AH=C7h是否支持。

 

Int 15/AH=88h

关于Int 15/AH=88h中断,有两个说明:

 

第1个说明:

SYSTEM - GET EXTENDED MEMORY SIZE (286+)

第2个说明:

HUNTER 16 - GET POWER UP KEYS

 

我们这里要说的是第1个。它返回的是超过1M以上的,也就是从1M内存(绝对地址0x100000)开始的那块连续内存的大小(KB),这块内存被称为扩展内存。

 

标准BIOS在实现此中断时只返回1MB到16MB之间的内存,超过16M边界的内存不返回。

 

 

在探测内存的时候,如果如果支持Int 15/AX=E820h中断,应该首先通过Int 15/AX=E820h中断去探测,然后依次Int 15/AX=E802h中断,Int 15/AX=E801h中断,Int 15/AH=88h中断。

 

分段管理

实地址模式

通过段寄存器和段偏移来管理访问内存。通过它们去直接访问物理地址。

 

V8模式

这种模式和实地址模式一样。

 

保护模式

在保护模式下,引入了GDT全局描述符表和LDT局部描述符表以及段描述符,另外还有个段选择子。

 

分页管理

 

 

 

1
0
分享到:
评论

相关推荐

    iOS Mac.OS.X cocoachina知识点整理 part02

    在“iOS Mac.OS.X cocoachina知识点整理 part02”这个资源中,我们可以期待学习到一系列关于iOS和Mac OS X开发的重要概念和技术。CocoaChina作为一个知名的开发者社区,提供了丰富的教程和资料,帮助开发者深入理解...

    Mac OS X Lion 10.7.5

    以下是关于Mac OS X Lion 10.7.5的一些关键知识点: 1. **多点触控手势增强**:Lion引入了更多基于触摸板的多点触控手势,如全屏切换、捏合滚动、平滑滚动以及应用切换等,这些功能使得用户在没有触控屏的Mac上也能...

    zuoyediaodu.rar_os

    在操作系统(OS)中,内存管理是至关重要的一个部分,特别是在处理大容量内存时。动态分区分配方式是一种灵活且常见的内存管理策略,它允许系统在运行时根据需求动态地为进程分配内存空间。本主题主要关注动态分区...

    iOS Mac.OS.X cocoachina知识点整理 part01

    本知识点整理是针对CocoaChina上分享的内容的一部分,主要聚焦于iOS和Mac OS X开发的基础概念和核心技术。这部分内容是“part01”,意味着它可能是系列教程的第一部分,旨在为初学者提供坚实的入门基础。 1. **...

    OS_chapter1.rar

    标题“OS_chapter1.rar”表明这是一份关于操作系统(Operating System, OS)的资料,章节为第一章。根据描述“笔记整理”,我们可以推测这可能是某位学习者或教师整理的操作系统基础理论的笔记,可能包括了概念解释...

    第一个讲了大机以及Z/OS概述,第二个讲了GDG,以及JCL,第三个跟第四个讲了PL/I,第五个讲COBOL,第三部分PL/I.学费180,000.本人精心整理

    Z/OS提供了丰富的管理工具和接口,使得系统管理员可以高效地监控和管理整个大机环境。 GDG(Generation Data Group)是IBM大机系统中的一个数据管理机制,它允许创建和管理数据集的多个版本。GDG通过创建一系列有序...

    HCIA鸿蒙设备开发认证习题整理1

    "HCIA鸿蒙设备开发认证习题整理1" 本资源摘要信息对应的知识点主要涉及到HarmonyOS设备开发认证的相关知识领域,涵盖了操作系统、编程语言、开发工具、设备驱动、软件开发等方面。 一、操作系统 * HarmonyOS设备...

    操作系统电子课件

    3. 内存管理: - 分区管理:将内存分为固定大小的区域,分配给不同的进程。 - 页式存储管理:通过页表实现虚拟内存,解决内存碎片问题。 - 段式存储管理:基于逻辑模块分配内存,方便代码共享。 - 段页式存储...

    电脑知识整理大全 菜鸟变高手

    这篇详尽的电脑知识整理旨在帮助初学者快速提升技能,从电脑的基本操作到高级应用,逐步成长为电脑高手。以下是系统学习电脑知识的一些关键点: 一、操作系统基础 操作系统是电脑的核心,它管理并协调硬件与软件...

    计算机考点整理第三章.doc.pdf

    计算机考点整理第三章主要聚焦于软件、知识产权以及操作系统等相关知识点,这些都是计算机科学和技术领域的基础知识。 首先,软件是指计算机程序、所需的数据以及相关的文档资料的集合。软件由三部分构成:程序、...

    动态分区分配存储管理

    5. 改进与优化:提出可能的改进措施,如引入更高级的内存整理算法,或者结合其他内存管理技术。 通过这个课程设计,学生不仅能够学习到动态分区分配的基本理论,还能掌握实际操作系统的内存管理机制,提升编程和...

    整理的计算机应用基础简答题.pdf

    - 第三代计算机采用集成电路,出现了分时操作系统。 - 第四代计算机是大规模和超大规模集成电路的时代,微型计算机成为主流。 2. **计算机应用**: - 科学计算:解决复杂的数学问题。 - 数据处理:收集、存储、...

    整理的一些学习Python的内容.zip

    6. **第三方库**:Python生态系统中有众多优秀的第三方库,如数据分析的Pandas、科学计算的NumPy、机器学习的Scikit-learn、Web开发的Django等,它们极大地扩展了Python的功能。 7. **函数式编程**:Python支持函数...

    Mac OS X 应该如何维护和保养.docx

    你可以使用第三方工具或手动删除`~/Library/Caches`和`/Library/Caches`目录下的文件。 3. **修理和备份属性文件**: 属性文件(如plist)是系统配置的重要部分。使用`diskutil`命令行工具或第三方软件检查和修复...

    Mac OS X Mavericks系统的新特性.docx

    3. 多显示支持:Mavericks改进了对多显示器的支持,让用户在第二个显示屏上能显示更多内容,提升了多任务处理能力,尤其适合需要大屏幕空间的工作环境。 4. 新版Safari浏览器:与iOS 7同步,Mac OS X Mavericks配备...

    嵌入式系统设计师考试笔记(完整整理版).pdf

    文档中包含了大量与嵌入式系统相关的专业术语和概念,以下是一些知识点的整理: 1. 嵌入式系统的基础知识:包括嵌入式系统的定义、特点、组成和开发流程。 2. 微处理器和微控制器:如8086、ARM7、MIPS、AVR、ARM9...

Global site tag (gtag.js) - Google Analytics