Linux
文章平均质量分 55
赢在拼搏中
这个作者很懒,什么都没留下…
展开
-
两张图看懂GDT、GDTR、LDT、LDTR的关系
段选择器:32位汇编中16位段寄存器(CS、DS、ES、SS、FS、GS)中不再存放段基址,而 是段描述符在段描述符表中的索引值,D3-D15位是索引值,D0-D1位是优先级(RPL)用于特权检查,D2位是描述符表引用指示位TI,TI=0指 示从全局描述表GDT中读取描述符,TI=1指示从局部描述符中LDT中读取描述符。这些信息总称段选择器(段选择子).段描述符:8个 字节64位,每一转载 2016-07-24 21:04:38 · 1046 阅读 · 0 评论 -
堆、栈的地址高低? 栈的增长方向?
作者:RednaxelaFX链接:https://www.zhihu.com/question/36103513/answer/66101372来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 进程地址空间的分布取决于操作系统,栈向什么方向增长取决于操作系统与CPU的组合。不要把别的操作系统的实现方式套用到Windows上。x86硬件直接支持的栈确实...转载 2018-07-24 08:38:28 · 10903 阅读 · 1 评论 -
MMU和cache学习
本文转自:http://blog.csdn.net/chinesedragon2010/article/details/59223241. MMUMMU:memory management unit,称为内存管理单元,或者是存储器管理单元,MMU是硬件设备,它被保存在主存(main memory)的两级也表控制,并且是由协处理器CP15的寄存器1的M位来决定是enable转载 2016-11-18 21:15:28 · 394 阅读 · 0 评论 -
MMU、Cache、TLB 的作用
VM通过页表转换成PM,MMU、Cache、TLB在转换过程中发挥作用:(1)PTE和PA都在Cache或者Memory中:(2)将Cache和Memory拆开描述,PTE和PA是否在Cache中命中:(3)PTE在Cache或Memory中,但是PA不在Cache或Memory中,只能访问Disk:(转载 2016-08-13 21:43:12 · 1530 阅读 · 0 评论 -
linux内存映射
内存管理分为对连续物理内存区管理和非连续内存区管理,本文主要讲解连续的物理内存区管理的技术中所涉及到的内核线性地址空间映射的相关知识。涉及到的东西有:页框,管理区(高端内存,低端内存),高端内存映射等,这些知识是掌握伙伴系统算法和slab分配器的基础。一、页框 页框为物理内存分配的基本单元,现代32位计算机一般设置为4KB(见上文计算机内存寻址)。内核必须记录每个页框的当前转载 2016-08-13 21:42:03 · 478 阅读 · 0 评论 -
linux进程地址空间--vma的基本操作
在32位的系统上,线性地址空间可达到4GB,这4GB一般按照3:1的比例进行分配,也就是说用户进程享有前3GB线性地址空间,而内核独享最后1GB线性地址空间。由于虚拟内存的引入,每个进程都可拥有3GB的虚拟内存,并且用户进程之间的地址空间是互不可见、互不影响的,也就是说即使两个进程对同一个地址进行操作,也不会产生问题。在前面介绍的一些分配内存的途径中,无论是伙伴系统中分配页的函数,还是slab分配转载 2016-08-13 21:34:37 · 1495 阅读 · 0 评论 -
Linux内核中的内存管理浅谈 .
1。基本框架(此处主要谈页式内存管理)4G是一个比较敏感的字眼,早些日子,大多数机器(或者说操作系统)支持的内存上限都是这个数字。为什么呢?之所以说是早些日子,因为现在64位的计算机已经很多了,而对于32位的计算机而言,页式管理是这么进行的,逻辑地址格式如下:0 -11位:页内偏移OFFSET12-21位:页面表偏移PT22-31位:页面目录偏移PGD转载 2016-08-13 21:33:24 · 626 阅读 · 0 评论 -
如何在LINUX中获取进程中某个虚拟地址所在物理内存地址
/**伪代码,示例*32位地址,三级映射(没有pud_t),页面大小4KB*/unsigned long addr = 0x12345678;//要找的虚拟地址,用户空间所访问的地址unsigned long real_addr = 0x00;//要输出的地址struct task_struct *cur_task = get_current();//获取当前进程控制块转载 2016-08-13 21:31:38 · 2324 阅读 · 0 评论 -
Linux 虚拟内存和物理内存的理解
首先,让我们看下虚拟内存: 第一层理解1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存转载 2016-08-13 21:30:33 · 389 阅读 · 0 评论 -
Linux内存管理原理
1. 虚拟地址、物理地址、逻辑地址、线性地址 虚拟地址又叫线性地址。linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在用户态,内核态逻辑地址专指下文说的线性偏移前的地址)是一个概念。物理地址自不必提。内核的虚拟地址和物理地址,大部分只差一个线性偏移量。用户空间的虚拟地址和物理地址则采用了多级页表进行映射,但仍称之为线性地址。2. DMA/HIGH_MEM/NROMA转载 2016-08-13 21:11:44 · 320 阅读 · 0 评论 -
Linux程序加载过程
一个进程在内存中主要占用了以下几个部分,分别是代码段、数据段、BSS,栈,堆,等参数。其中,代码、数据、BSS的内容是可执行文件中对应的内容,加载程序并不是把它们的内容从可执行程序中填充到内存中,而是将它们的信息(基地址、长度等)更新到进程控制块(task_struct)中,当CPU第 一次实际寻址执行的时候,就会引起缺页中断,操作系统再将实际的内容从可执行文件中复制内容到物理内存中。原创 2016-08-13 16:56:11 · 4117 阅读 · 0 评论 -
Linux内核缺页
整个缺页异常的处理过程非常复杂,我们这里只简单介绍一下缺页涉及到的内核函数。 当CPU产生一个异常时,将会跳转到异常处理的整个处理流程中。对于缺页异常,CPU将跳转到page_fault异常处理程序中,该异常处理程序会调用do_page_fault()函数,该函数通过读取CR2寄存器获得引起缺页的线性地址,通过各种条件判断以便确定一个合适的方案来处理这个异常。原创 2016-08-13 19:07:02 · 782 阅读 · 0 评论 -
程序在内存中运行的奥秘
内存管理是操作系统的核心功能,无论对于开发者还是系统管理员内存管理的重要性都是不言而喻的。我会在接下来的几篇文章通过计算机的实际运行过程谈谈内存管理,当然在必要的时候我也会从底层原理去阐释这个问题。我们提到的概念是不局限于平台特性的通用概念,不过为了阐述这些概念我们选取的实例大多来源于Linux和基于x86架构的32位Windows操作系统。这篇文章,我们首先来看看程序是如何使用内存的。 ...转载 2018-07-24 08:41:45 · 1331 阅读 · 0 评论