今天再来写一篇,
本文章是在研究了linux-2.6.11版本的内核源码写的,其他版本可能存在差异。
一. fork()函数从用户态到内核态的过程
1. 基本名词
用户空间:虚拟地址空间中较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间。
内核空间:虚拟地址空间中最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”。
用户态:当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。此时处理器在特权级最低的(3级)用户代码中运行,用户栈。
内核态;当一个任务(进程)执行系统调用而陷入内核代码中执行时,就称进程处于内核运行态(内核态)。处理器便处于特权级最高的(0级)内核代码中执行,内核栈。
2. 此过程的实现机制 —— 中断
(1). 中断:在运行一个程序的过程中,继续以“插入”的方式执行一些完成特定功能的程序段的处理方式。
(2). 分类: