Linux系统的中断、系统调用和调度概述(2)

如何去理解上面所说的区别,特别是区别1呢?真正理解这点,需要对进程在内存中的表示有个大致的理解。

每个程序需要被装入(全部或部分)装入内存后才能开始运行,在32位机器中,每个进程都有4G的虚拟地址空间。但是对这4G的空间并不是全部都可以被进程使用的,在Linux中,对这4G的空间的大致划分如下

Linux系统的中断、系统调用和调度概述

因此,从原则上来说,在进程中用户能使用的虚拟地址空间是只有3G的。正常情况下,用户程序在用户态运行的时候,只能访问在这3G范围内的地址(当然也不是所有地址都能访问)。当进程由于系统调用而进入核心态时,这时系统内核会执行相应的操作,它能访问自己1G的地址空间,同时也能访问3G的用户地址空间。而用户进程的指令的数据是存在与那3G的地址空间中的。当然还有进程的栈等部分。

细分来说的话,一个进程在内存中一般包含以下部分,数据段、指令段、运行时堆、栈等。示意图如下

Linux系统的中断、系统调用和调度概述

内核自己的栈这在最上层的1G的地址空间内,这是只能由内核访问的部分。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ad0d32c95352c697edbd32473573d092.html