《深入Linux内核架构》学习笔记1

1.虚拟地址空间

  CPU的字长决定了可管理的地址空间的最大长度。例如:32位机器可管理2^32即4G的地址空间;64位机器可管理2^64的地址空间;

  地址空间实际上与物理内存的最大长度无关,每个进程都会使用对应的一个虚拟的地址空间,从0 - 2^32或2^64,称之为虚拟地址空间

  所以:

    a. 每个进程都认为只有自己一个进程存在,每个进程都有各自互不干涉的进程地址空间;

    b. 进程的虚拟空间可能大于实际的内存空间;

    c. 用户所看到和接触到的都是该虚拟地址,无法看到实际的物理内存地址;

    d. 虚拟地址可起到保护操作系统的效果,因为用户不能直接访问物理内存;

  进程通过虚拟地址找到实际物理地址,需要经过 “逻辑地址”--段转换-->"线性地址"--页转换-->"物理地址"。

 

  虚拟地址空间分为:用户空间和内核空间。用户空间:0--TASK_SIZE;内核空间:TASK_SIZE--2^32或2^64。 linux系统中,用户空间和内核空间比通常为3:1,windows系统默认为2:2。

 

2.进程虚拟地址空间特权

  linux将虚拟地址空间分为“用户态”和“核心态”。

  处于“用户态”的进程禁止直接访问内核空间,不可直接对其进行任何读写或代码执行操作。

  从“用户态”进程想要执行任何影响操作系统的动作,必须借助“系统调用”向内核发出相应指令。内核会检测进程权限,然后执行操作,再返回到用户态。

  “核心态”的进程(一般指内核)分为:

    ①普通内核线程;可以访问虚拟地址空间的用户空间

    ②通过中断调用的中断上下文。不可以访问虚拟地址空间的用户空间

  执行流程:

    ① CPU大部分时间在执行用户空间的代码,处于用户态。当执行到系统调用的时候,CPU会进入到核心态,内核将完成请求,此时,内核可以访问虚拟地址空间的用户空间。当系统调用完成时,返回到用户态。

    ② CPU也可以通过中断进入核心态,执行中断上下文,但此时不可访问虚拟地址空间的用户空间。

 

 

 

 

参考:

  1. https://www.cnblogs.com/ralap7/p/9184773.html

  2. https://blog.csdn.net/tjh_i_can/article/details/80117005

posted @ 2019-02-26 09:50  谁说我是二师兄  阅读(172)  评论(0)    收藏  举报