Chinaunix首页 | 论坛 | 博客
  • 博客访问: 129799
  • 博文数量: 17
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-13 14:07
文章分类

全部博文(17)

文章存档

2011年(1)

2009年(5)

2008年(11)

我的朋友

分类: LINUX

2008-12-15 15:03:54



1) 用户栈与核心栈

一个进程的核心栈和用户栈是分开的,当一个进程在用户态下执行时,它的核心栈为空。进程执行过程:

用户态 -> 系统调用 -> 汇编指令引发中断 -> 核心态

当进程转换至核心态时,开始使用核心栈。

2) 进程表

内核进程表包括一个本进程区表,指向区表。一个区是进程地址空间中连续的区域,如正文区、数据区及栈区。

3) 进程上下文

一个进程上下文包括进程状态、进程的全局用户变量及数据结构的值、寄存器值、u区的值以及用户栈和核心栈内容。 操作系统正文和它的全局变量是被所有进程共享,因而不是进程上下文的以部分。

一个进程从用户态移到核心态时,是执行态的改变而不是上下文切换。

中断发生时,内核保留进程上下文,以恢复被中断了的进程的执行。

4)进程状态
 
主要状态:用户态运行、核心态运行、准备好执行、睡眠。

任何时刻一个处理机只能执行一个进程,所以之多有一个进程可以处在用户态或核心态运行。

5) 状态转换

对内核中的进程转换需要加以限制,否则可能会破坏全局核心数据结构中的信息。通过禁止任意的上下文切换和控制中断的发生,内核可保护它的一致性。

进当进程从“核心运行状态”转移到“内存休眠”状态时,内核才允许上下文切换,从而保证数据的一致性,保证在任何时刻至多一个进程执行临界区代码。

临界区(critical region)通过互斥、禁止中断等方式避免冲突、临界区应小且不经常出现。

进程调度能够抢占用户态下的进程,对核心态的进程不能抢占?

6)睡眠与唤醒

中断处理程序不能睡眠,否则被中断的进程会被投入睡眠。

进程在等待某些事件发生时会进入睡眠,如等待外围设备的IO完成、等待一个进程退出、等待获得系统资源。直到时间发生,它们一直处于睡眠状态。

当事件发生时,所有睡眠在这个时间上的进程都被唤醒,进程转换到“就绪”状态,等待调度进程调度。








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