操作系统第二篇——进程

一、进程、地址空间与线程

1、地址空间
一个进程可以使用的全部内存的地址和它们存储的数据,称为这个进程的地址空间。可以将进程笼统地看做是一个或多个线程与一个地址空间的结合。

2、进程在系统的实现方式
该实现方式达到的目的
1)进程的结构必须包含一个进程的运行状态——当发生中断或者异常时,将该进程的运行状态放入内存后,在之后的某一个时间点根据进程的优先级再根据上一次的运行状态再运行该进程。
2)由于进程在用户那一侧对内存进行了抽象,因此在系统一侧要包含从抽象内存向实际内存和外存(磁盘等存储设备)的映射,以便通过抽象内存的地址获得物理地址和其中存储的数据。

3、并行与线程
1)为了保证进程的结构必须包含一个进程的运行状态,在进程中存储处理器状态寄存器、指令计数器、栈指针、通用寄存器等代表了进程目前的运行状态的值。由于现代计算机中往往有多个核或多个处理器,我们的程序可以达到 并行(parallelism,即在物理时间上同时运行,区别于多个进程在处理器上的并发(concurrency))。因此同一个进程可能同时包含有多个不同的运行状态。为了更好地区分进程在一个处理器上的运行状态和进程本身的运行状态,我们在此引入 线程(thread) 的概念。每个线程拥有一个 线程控制块(thread control block, TCB) ,用来存储我们上述提到的处理器状态寄存器、指令计数器、栈指针、通用寄存器等数值,但同一个进程中的所有线程都共享同一个地址空间。在这里插入图片描述
2)为了支持进程从抽象内存获取物理内存中存储的信息,我们需要在进程中包含从抽象内存向物理内存的映射,即该系统所用的地址转换方法所需要的信息。地址转换有很多种不同方法,包括分页存储、分段存储等,它们都需要不同的信息来实现地址转换。
例子: Base and Bound。在 Base and Bound 方法中,系统将一段连续的物理内存分配给一个进程,Base 代表基地址,即系统分配给一个进程的可用内存的起始地址,Bound 代表这个进程可用的内存的最高地址。为了读写物理内存,我们将基地址与抽象内存地址相加,获得实际地址;只要实际地址不大于 Bound,内核就会允许进程进行该操作。因此在这个方法中,为了实现进程地址空间的抽象,进程在系统一侧的数据结构中必须包括这段可用的内存的基地址、可用长度。
3)为了能在一个进程开始运行的时候方便地载入上面提到的两方面的数据,我们需要一个数据结构来包含这些数据。这个数据结构就是 进程控制块(Process Control Block, PCB) 。由于进程控制块中的信息包含了优先级、基地址、可用地址范围等用户进程不应该有权限修改的信息,用户进程不应该有权限修改进程控制块因此我们将进程控制块存储在内核空间中。

二、进程状态与用户态和内核态之间的切换

1)三态模型——进程的状态
一个进程可能在运行一段时间后被切换出去,一段时间后继续运行。显然,进程至少需要两个状态—— 运行态(running)就绪态(ready) 。进程在运行态中运行一段时间后被切换出去,排入就绪队列,等待继续运行。在三态模型中,进程还有一个状态,即 等待态(wait) 。在等待态中,进程在等待某一事件完成,不会被排入就绪队列,直到该事件发生后,进程才会被排入就绪队列,可能被选为下一个运行的进程。处于等待状态的进程在事件发生后考虑到优先级等问题,必须先回到就绪状态而不能直接运行。
2)五态模型(多引入新建态和终止态)
新建态对应着进程被创建时尚未加入就绪队列的状态。为了建立一个新的进程,内核需要给进程分配资源(如:建立进程控制块)、建立必要的管理信息;在这个过程中,进程就处于新建态。相对的,终止态对应的是进程已经结束但尚未被系统撤销的状态。处于终止态的进程虽然已经结束,但其获得的资源还未被系统回收,因此系统仍然可以获得该进程结束时的信息。
对于新建态而言,如果我们允许一个进程在获得全部资源以前就进入就绪队列,那么一个新进程可能在未获得全部资源前就开始运行,而产生错误。
对于终止态而言,如果一个进程 A 创建了另一个进程 B 而想要等待进程 B 运行完毕,从中获得一些信息,那么终止态的缺失可能导致进程 B 率先运行完毕后被系统撤销,使得进程 A 无法从进程 B 处获得任何信息。如果发生一个进程创建另一个进程的情况,那么在老进程从新进程获取信息前,新进程会一直停留在终止态;如果新进程终止后,仍在运行的老进程没有从新进程获取信息,那么新进程就会成为我们所说的“僵尸进程”,停留在系统内存中,导致系统变慢。在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值