Chinaunix首页 | 论坛 | 博客
  • 博客访问: 336828
  • 博文数量: 56
  • 博客积分: 2058
  • 博客等级: 中尉
  • 技术积分: 688
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-11 09:19
个人简介

code rush

文章分类

全部博文(56)

文章存档

2012年(2)

2011年(54)

分类: LINUX

2011-08-27 09:29:55

进程上下文:

进程的运行环境主要包括:
1.进程空间中的代码和数据、各种数据结构、进程堆栈和共享内存区等。
2.环境变量:提供进程运行所需的环境信息。
3.系统数据:进程空间中的对进程进行管理和控制所需的信息,包括进程
  任务结构体以及内核堆栈等。
4.进程访问设备或者文件时的权限。
5.各种硬件寄存器。
6.地址转换信息。

在Linux中把系统提供给进程的处于动态变化的运行环境总和称为进程上下文。

处理器总处于以下状态中的一种:
1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
3、用户态,运行于用户空间。

用户态到内核态,进程需要传递进程的运行环境给内核,这个涉及到寄存器状态的
保存,参数传递等等数据。

上下文简单说来就是一个环境,相对于进程而言,就是进程执行时的环境。具体来
说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。

一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。

用户级上下文: 正文、数据、用户堆栈以及共享存储区;
寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);
系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、
pgd、pte)、内核栈。

当发生进程调度时,进行进程切换就是上下文切换(context switch).操作系统
必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的
模式切换(mode switch)。模式切换与进程切换比较起来,容易很多,而且节省时间,
因为模式切换最主要的任务只是切换进程寄存器上下文的切换。

系统中的每一个进程都有自己的上下文。一个正在使用处理器运行的进程称为当前
进程(current)。当前进程因时间片用完或者因等待某个事件而阻塞时,进程调度
需要把处理器的使用权从当前进程交给另一个进程,这个过程叫做进程切换。此时,
被调用进程成为当前进程。在进程切换时系统要把当前进程的上下文保存在指定的
内存区域(该进程的任务状态段TSS中),然后把下一个使用处理器运行的进程的上
下文设置成当前进程的上下文。当一个进程经过调度再次使用CPU运行时,系统要恢
复该进程保存的上下文。所以,进程的切换也就是上下文切换。

在系统内核为用户进程服务时,通常是进程通过系统调用执行内核代码,这时进程的
执行状态由用户态转换为内核态。但是,此时内核的运行是为用户进程服务,也可以
说内核在代替当前进程执行某种服务功能。在这种情况下,内核的运行仍是进程运行
的一部分,所以说这时内核是运行在进程上下文中。内核运行在进程上下文中时可以
访问和修改进程的系统数据。此外,若内核运行在进程上下文中需要等待资源和设备
时,系统可以阻塞当前进程。


阅读(2412) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~