1) 用户栈与核心栈
一个进程的核心栈和用户栈是分开的,当一个进程在用户态下执行时,它的核心栈为空。进程执行过程:
用户态 -> 系统调用 -> 汇编指令引发中断 -> 核心态
当进程转换至核心态时,开始使用核心栈。
2) 进程表
内核进程表包括一个本进程区表,指向区表。一个区是进程地址空间中连续的区域,如正文区、数据区及栈区。
3) 进程上下文
一个进程上下文包括进程状态、进程的全局用户变量及数据结构的值、寄存器值、u区的值以及用户栈和核心栈内容。 操作系统正文和它的全局变量是被所有进程共享,因而不是进程上下文的以部分。
一个进程从用户态移到核心态时,是执行态的改变而不是上下文切换。
中断发生时,内核保留进程上下文,以恢复被中断了的进程的执行。
4)进程状态
主要状态:用户态运行、核心态运行、准备好执行、睡眠。
任何时刻一个处理机只能执行一个进程,所以之多有一个进程可以处在用户态或核心态运行。
5) 状态转换
对内核中的进程转换需要加以限制,否则可能会破坏全局核心数据结构中的信息。通过禁止任意的上下文切换和控制中断的发生,内核可保护它的一致性。
进当进程从“核心运行状态”转移到“内存休眠”状态时,内核才允许上下文切换,从而保证数据的一致性,保证在任何时刻至多一个进程执行临界区代码。
临界区(critical region)通过互斥、禁止中断等方式避免冲突、临界区应小且不经常出现。
进程调度能够抢占用户态下的进程,对核心态的进程不能抢占?
6)睡眠与唤醒
中断处理程序不能睡眠,否则被中断的进程会被投入睡眠。
进程在等待某些事件发生时会进入睡眠,如等待外围设备的IO完成、等待一个进程退出、等待获得系统资源。直到时间发生,它们一直处于睡眠状态。
当事件发生时,所有睡眠在这个时间上的进程都被唤醒,进程转换到“就绪”状态,等待调度进程调度。
阅读(1187) | 评论(0) | 转发(0) |