1 分页机制
早期计算机直接使用物理地址进行内存的使用和管理,但是硬件资源有限,而且不同的程序需要使用不同的物理地址,这样给程序的管理和运行造成了很大的难度,而且极易造成一个程序覆盖其他程序的问题,使正常运行的程序出现错误。
针对以上问题提出了使用虚拟地址与物理地址映射的管理方式,这样每个程序都可以使用相同的地址,但是由于每个进程使用不同的叶表,所以使用不同的物理页,这样就可以解决以上的问题。
下图为Linux下分页机制的实现原理,虚拟地址经过页面目录和页表的查询,找到页物理地址,最后将偏移量合成为物理地址。
2 分段机制
其实分页机制已经能够满足虚拟内存管理和保护模式的要求,现在的一些构架的处理器完全不使用分段机制。段机制是x86遗留的历史问题。
下图为分段机制原理图,其实现核心是一个全局的描述符表GDT,这个表作用很大,比如每个进程都有一个TSS段,但是当前进程如果切换到另一个进程,一定要使用到另一个进程的TSS段,由于使用不同的叶表,肯定无法相互访问各自的地址空间,这个时候全局描述符表解决了这一问题,他就像是一个共享的地址空间,这样就能很好的相互访问了。
3 两个机制的结合
有了新方法,但是也不能摒弃旧的,需要新旧结合,所以需要将两个机制相互结合。
下图为完整的地址转换过程图:
4 地址空间分配
虚拟地址空间由地址总线位数决定,现在的计算机大多是32位的。
32位也就是4G大小,linux中将0-3G的线性地址由用户态程序使用,3G-4G的线性地址留给内核态使用。
虽然内核态只是用1G空间,但是它管理着整个物理地址空间,Linux内核将物理地址分成3个区,ZONE_DMA(0-16M),ZONE-NORMAL(16-896M),ZONE_HIGHTMEM(896M - ~)。
ZONE_DMA区用于DMA设备的映射,DMA设备可以不通过CPU将数据发送的内存,这样CPU可以处理其他事务,从而提高系统的效率。
ZONE_NORMAL区为内核使用的区域,这个区主要被内核所使用,当然在用户态出现缺页时,也会在此区中分配物理页。
ZONE_HIGHTMEN区,其实是一个让我开始很困惑的去,书上说他是高端内存,内核使用不到它,那岂不是1G以上的内存条也没用,因为内核都够不到,怎么将它分配给进程使用,后来才明白什么意思。内核使用不到ZONE_HIGHTMEN区意思是其物理地址不能被内核所使用,但是能够被内核所操控,控制它映射给用户态程序。用户态程序在缺页时首先在ZONE_HTIGHTMEN区寻找页,如果找不到就需要到ZONE_NORMAL去寻找了,而内核在缺页时只能在ZONE_NORMAL里寻找。
- 大小: 32.7 KB
- 大小: 27.8 KB
- 大小: 29.5 KB
- 大小: 53.4 KB
分享到:
相关推荐
在探讨Linux内核学习之前,我们要明确一点:学习任何复杂的技术都需要一定的基础知识和实践经验。对于Linux内核,这个操作系统的心脏,以下几点是学习前应该掌握的: 1. **操作系统理论基础**:虽然不需要深入阅读...
Linux内核学习路径是指为学习者提供的一系列步骤和资源,以系统地掌握Linux内核的相关知识。Linux内核是Linux操作系统的核心部分,负责硬件资源的管理、内存管理、进程调度等关键任务。了解Linux内核的设计与原理...
Linux内核是Linux操作系统的核心,负责管理硬件资源,提供系统调用接口,以及处理进程调度、内存管理、文件系统、网络协议等关键功能。它的设计遵循模块化和层次化原则,使得代码易于维护和扩展。 二、内核主要组成...
1. 内核初始化:这是Linux启动的第一步,包括加载引导程序、解压内核镜像、设置内存管理、初始化中断处理等。通过注释,读者可以了解到系统如何从零开始构建整个运行环境。 2. 进程管理:内核如何创建、调度、终止...
总之,Linux内核学习涵盖的内容广泛而深入,从基本概念到高级特性,每一个部分都值得深入探讨。无论是为了系统优化、故障排查,还是开发驱动程序,对Linux内核的深入了解都能极大提升你的IT技能。
根据提供的文件信息,“Linux内核学习资料”似乎是一本经典的书籍资源,主要聚焦于Linux内核及驱动的学习。虽然给出的部分内容并未包含实际的技术细节,但从标题和描述中可以推测,这本书应该涵盖了以下核心知识点:...
这本书由Robert Love编写,是学习Linux内核不可或缺的经典之作。以下将从标题、描述以及标签中提炼出的关键信息,详细阐述Linux内核设计与实现的相关知识点。 1. **Linux内核的基本概念**:Linux内核是Linux操作...
在Linux内核学习中,模块化设计是一个重要的话题。内核模块允许你根据需要加载或卸载特定的功能,这对于资源有限的嵌入式设备尤其重要。此外,内核编译和配置过程也是学习的重点,这涉及到理解makefile、配置选项,...
在学习过程中,你可能会遇到诸如调度算法(如CFS)、内存管理(如伙伴系统和slab分配器)、文件系统(如EXT4)以及网络协议栈(如TCP/IP)等关键知识点。这些是Linux内核的基础,理解它们的工作原理对任何系统级开发...
这份"Linux内核学习资料合集"包含了四本重量级的书籍,它们分别是《Linux内核设计与实现_第三版_清晰中文版》、《UnderStanding The Linux Kernel (3rd Edition)》、《深入linux内核架构》以及《深入理解Linux内核...
在学习Linux内核之前,首先需要理解操作系统的基本概念,包括进程、线程、内存管理、I/O操作和文件系统。Linux内核是开源的,这使得开发者可以直接查看和修改源代码,深入理解其工作原理。通过这套视频教程,你可以...
内存管理是另一个重要的方面,Linux内核通过虚拟内存管理技术,实现了内存的保护、共享和高效利用。 2. 内核模块化设计:Linux内核采用了模块化的架构设计,能够动态地加载和卸载内核模块。这种设计使得内核能够...
Linux内核是整个操作系统的心脏,负责管理和调度硬件资源,提供进程间通信、内存管理、设备驱动等功能。"Linux内核完全注释"提供了对内核源代码的详细解读,帮助开发者理解每一行代码背后的逻辑,从而更深入地了解...
《深入理解Linux内核》是Linux开发者和爱好者的重要参考资料,其中第八章专注于内存管理这一核心主题。内存管理在操作系统中起着至...本章详细介绍了这些内容,对于学习和掌握Linux内核的内存管理机制具有很高的价值。
1. **Linux内核**:Linux内核是Linux操作系统的核心,负责管理硬件资源,调度进程,实现内存管理,提供文件系统以及网络通信等功能。它是操作系统的核心部分,确保了系统运行的稳定性和高效性。 2. **内核结构**:...
1. **Linux内核概述**:首先,书中会介绍Linux内核的基本架构,包括内核的模块化设计、进程管理、内存管理和I/O处理机制等,这些都是理解内核工作流程的基础。 2. **进程管理**:深入讲解进程的创建、调度、同步和...
- 学习Linux内核中的物理和虚拟内存管理机制。 - 掌握内存分配器(如slab分配器)的工作原理。 - 理解页表和TLB(转换后援缓冲器)的工作。 3. 进程调度 - 理解Linux内核的进程调度策略和优先级管理。 - 学习...
通过对Linux内核内存管理模块的深入研究,不仅可以了解其内部的实现细节,还能够学习到高级内存管理技术的实际应用。此外,对于开发人员而言,这些知识还能帮助他们在编写高效、稳定的软件时更好地利用操作系统提供...
1. **进程管理**:在Linux内核中,进程是系统中执行程序的实例。内核负责创建、调度、同步和销毁进程。0.11内核中的进程管理包括进程表、上下文切换、信号处理等内容,这些都是理解多任务操作系统运行机制的关键。 ...