Linux进程3——虚拟地址访问

1.虚拟地址到物理地址

  X86芯片访问内存,需要使用MMU功能,实现虚拟地址到线性地址,再到物理地址的访问。

X86的分段机制是强制的,分页机制是可选的。

2.分段机制

  X86的虚拟地址,由选择符:偏移值决定。段选择符由CS,SS,DS等组成。CS为代码段选择符,SS为堆栈段选择符,

DS为数据段选择符。

  Index为段描述符在全局段描述符表或局部段描述符表的索引,因为段描述符为8字节,所以从bit3开始。

  TI表示是GDT或者LDT

  RPL表示段访问权限,内核态为0,用户态为3.

  段描述符结果如下:

  

  通道段描述符和偏置计算线性地址。

3.Linux分段机制

  Linux主要使用分页机制,为了适应X86芯片,简化了分段机制。为用户态程序和内核态程序分别建立CS和DS

段描述符,使基地址为0,长度为4GB。

  

4.Linux段分页机制

  X86的32位地址分成3个区域,包括目录、页表和偏移量。如果采用2级模式,会导致每个进程需要4MB(4B * (2^20))空间

保存页表项。采用这种3级页表安排方式,可以保证程序只保存使用的页表项,并且在实际访问地址时才加载缺省的页面。

  目录项和页表项具有相同的数据结构,每个进程可以有1024个目录项,每个目录项可以有1024个页表项,

每个页表项指向一个4KB的目录内存页。

   

时间: 2024-10-26 03:45:36

Linux进程3——虚拟地址访问的相关文章

【原创】访问Linux进程文件表导致系统异常复位的排查记录

前提知识: Linux内核.Linux 进程和文件数据结构.vmcore解析.汇编语言 问题背景: 这个问题出自项目的一个安全模块,主要功能是确定某进程是否有权限访问其正在访问的文件. 实现功能时,需要在内核里通过扫描该进程打开的文件表,获取文件的路径,和安全模块里配置的可访问文件的进程白名单进行匹配: 模块会一直到搜索到进程pid为1的进程,也就是init进程.在访问中间某个父进程的文件表时,出现struct task_struct的files指针为空的情况, 导致系统异常复位. 下面就是这次

[Z] Linux下进程的文件访问权限

原文链接:http://blog.csdn.net/chosen0ne/article/details/10581883 对进程校验文件访问权限包括两个部分,一是确定进程的角色(属于哪个用户或者组),二是确定对应的角色是否具有该操作的权限. 首先看第一部分.默认情况下,进程的有效角色就是当前执行这个进程的用户及其所在组.但是,文件具有设置用户ID位和设置组ID位(stat.st_mode的S_ISUID和S_ISGID),用于改变这种默认的行为,将进程的有效角色设置为文件所属的用户和组.这主要用

Linux进程环境

1.进程是什么 正在运行的程序,就是进程,进程是动态的,程序是静态的:进程在执行过程中具有状态的变化. 进程具有三个不同的状态 : 运行.就绪.阻塞; 三模型分析 : 查看进程的命令ps -ef 和 top,   kill PID(杀死进程) 运行态:进程获得CPU资源,能够使用CPU计算机程序中的指令,当CPU的使用时间用完时,则进入就绪状态. 就绪态:其它资源已经就绪,只差CPU资源. 阻塞态:处理CPU之外的其它资源还未就绪. 进程的调度:进程启动时处于就绪状态,为了调度进程对CPU的使用

Linux进程管理知识整理

Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) TASK_INTERRUPTIBLE(可中断等待状态) TASK_UNINTERRUPTIBLE(不可中断等待状态) TASK_STOPPED(进程被其它进程设置为暂停状态) TASK_TRACED(进程被调试器设置为暂停状态) TASK_DEAD(退出状态) 进程由于所需资源得不到满足,从而进入

Linux进程地址空间与虚拟内存

http://blog.csdn.net/xu3737284/article/details/12710217 32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间.进程的地址空间存在于虚拟内存中.虚拟内存不能被禁用. 进程地址空间 进程地址空间分为内核空间和用户空间 因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享.于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间. A.正文段.这是由cpu执行的

Linux进程管理——fork()和写时复制

写时复制技术最初产生于Unix系统,用于实现一种傻瓜式的进程创建:当发出fork(  )系统调用时,内核原样复制父进程的整个地址空间并把复制的那一份分配给子进程.这种行为是非常耗时的,因为它需要: ·      为子进程的页表分配页面 ·      为子进程的页分配页面 ·      初始化子进程的页表 ·      把父进程的页复制到子进程相应的页中 创建一个地址空间的这种方法涉及许多内存访问,消耗许多CPU周期,并且完全破坏了高速缓存中的内容.在大多数情况下,这样做常常是毫无意义的,因为许多

[Linux]进程(十)——进程地址空间

1,进程的虚拟内存: 背景知识a.out分段以及运行时候内存的结构点击打开链接 linux进程地址空间 linux进程地址空间 \ [cpp] view plaincopy struct mm_struct { struct vm_area_struct  *mmap;               /* list of memory areas */ struct rb_root         mm_rb;               /* red-black tree of VMAs */

Linux进程2——进程加载

Linux每个可执行程序都具有相同的虚拟地址分配,当OS启动进程时,是如何加载程序呢? 1. 进程结构体 每个进程都具有task_struct结构体,该结构体的mm字段负责对程序内存的虚拟地址映射. mm中每个vm_area_struct对应可执行程序的段虚拟地址空间,例如.text等.当程序被执行时,程序的这些虚拟地址 就被填入不同的vm_area_struct中. struct vm_area_struct { ... ... unsigned long vm_start; //虚拟地址开始

LinuxELF文件格式详解--Linux进程的管理与调度(十二)

日期 内核版本 架构 作者 GitHub CSDN 2016-06-04 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的描述 对象文件格式 对象文件 首先,你需要知道的是所谓对象文件(Object files)有三个种类: 可重定位的对象文件(Relocatable file) 可执行的对象文件(Executable file) 可被共享的对象文件(Shared object file) 可重定位的对象文件(Re