进程

进程是操作系统核心构造,提供逻辑控制流和私有地址空间的抽象。它们可以在用户模式和内核模式下运行,通过上下文切换实现并发。创建进程涉及初始化PCB和分配资源,而进程状态变化如阻塞、唤醒、挂起和激活则由特定事件触发,如资源请求、系统调用和数据到达等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程

异常是允许操作系统内核提供进程概念的基本构造块,进程是计算机科学中最深刻、最成功的概念之一。

进程提供给应用程序的关键抽象:

  • 一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占的使用处理器。
  • 一个私有的地址空间,它提供一个假象,好像我们的程序独占的使用内存系统。

逻辑控制流

进程可以向每个程序提供一个假象,好像它在独占使用处理器。如果想用调试器单步执行程序,我们将会看到一系列的程序计数器(PC)的值,这些值唯一地对应于包含在程序的可执行目标文件中的指令,或是包含在运行时动态连接到程序的共享对象中的指令。

并发流

一个逻辑流的执行在时间上与另一个流重叠,称为并发流

多个流并发地执行的一般现象被称为并发
一个进程和其他进程轮流运行的概念称为多任务
一个进程执行它的控制流的一部分的每一时间段叫做时间片

注意:并发流的思想与流运行的处理器核数或者计算机数无关。

私有地址空间

进程为每个程序提供它私有地址空间。一般而言,和这个空间中某个地址相关联的那个内存字节是不能被其他进程读或者写的。
这里写图片描述

用户模式和内核模式

处理器提供了一种机制:利用一个控制寄存器中的一个模式位来限制一个应用可以执行的指令以及它可以访问的地址空间范围。

  • 没有设置模式位时,进程运行在用户模式中。用户模式下无法执行特权指令。(eg:停止处理器、改变模式位、发起I/O操作)不允用户模式中的进程引用地址空间中内核区的代码和数据。反之,用户可以通过系统调用接口间接的访问内核代码和数据。
  • 设置了模式位时,进程运行在内核模式中,可以执行任何指令,访问系统任何内存位置。

Linux提供了一种机制, /proc文件系统,它允许用户模式进程访问内核数据结构的内容。/proc文件系统将许多内核数据结构的内容输出为一个用户程序可以读取的文本文件的层次结构。2.6版本的Linux内核引入了/sys文件系统,它输出关于系统总线和设备的额外低层信息。

上下文切换

内核为每个进程维持了一个上下文。上下文就是内核重新启动一个被抢占的进程所需的状态。它由一些对象的值组成,这些对象包括通用目的寄存器、浮点寄存器、程序计数器、用户栈、状态寄存器、内核栈和各种内核数据结构,比如描述地址空间的页表,包含有关进程信息的进程表,以及包含进程已打开文件的信息的文件表。

在进程执行的某些时刻,内核可以决定抢占当前进程,并重新开始一个先前被抢占了的进程,这种决策叫做调度

内核调度了一个新的进程运行后,它就抢占当前进程,并使用一种称为上下文交换的机制来将控制转移到新的进程。上下文切换,保存当前进程的上下文,回复某个先前被抢占的进程被保存的上下文,将控制传递给这个新恢复的进程。

  1. 当内核代表用户执行系统调用时,可能会发生上下文切换。
  2. 中断也可能引发上下文切换。

创建一个新进程

(1)申请空白的PCB,为新申请的PCB获取一个数字标识。
(2)为新进程分配其所运行所需要的资源,包括各种物理和逻辑资源,如内存、文件、I/O设备和CPU时间等。
(3)初始化进程控制块(PCB)。
(4)如果进程就绪队列能接纳新进程,就将新进程插入就绪队列。

引起创建进程的事件

(1)用户登陆。
(2)作业调度。在多道批处理系统中,当作业调度按一定的算法调度到某个作业时,便把他们装入内存,为他们创建进程,并插入就绪队列。
(3)提供服务。当运行中的程序提出某种请求后,OS将专门创建一个进程来提供用户所需要的服务。
(4)应用请求,用户自己创建新进程,使新进程以同创建者并发运行的方式完成特定任务。

进程阻塞与唤醒

引起阻塞和唤醒的事件
  • 向系统请求共享资源失败。
  • 等待某种操作的完成。
  • 新数据尚未到达。
  • 等待新任务的到达。
进程阻塞过程
进程通过调用block原语将自己阻塞,可见阻塞是一种主动行为。进入block过程后,由于该进程还处于执行状态,所以应先立即停止执行,把进程中的状态改为阻塞,并将PCB插入阻塞队列。最后,转调度程序重新进行调度,将处理机分配给另一就绪进程,并进行切换,也就是说按照新进程的PCB中的处理机状态设置CPU环境。
进程唤醒过程
wakeup原语是把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将PCB插入到就绪队列中。

进程的挂起与激活

进程的挂起
OS利用suspend将制定进程或处于阻塞状态的进程挂起。suspend执行过程首先是检查被挂起进程的状态。若出去就绪态,便将其改为静止就绪;对于活动阻塞则改成静止阻塞,若被挂起的程序正在执行,则专向调度程序重新调度。
进程的激活过程
OS利用激活原语active,将指定进程激活。激活原语先将进程从外存调入内存,检查该进程的现行状态,若是静止就绪,便将之改为活动就绪;若静止阻塞,便将之改为活动阻塞。假如采用抢占调度策略,则每当有静止就绪进程被激活而插入就绪队列时,就要检查是否进行重新调度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值