本科生操作系统原理学习记录
学习记录全家桶
第三章 进程
3.1 进程概念
操作系统执行各种程序
批处理系统 - 作业 (job)
分时系统 - 用户程序或任务(Task)
作业:被组装成一个整体运行的一组计算步骤
任务:进程或线程
作业、Task 和 Process 基本可以互换,但是不可以与 程序 互换
进程:一个程序在一个数据集上的一次运行,是执行中的程序,三个一很重要
3.2 内存中的进程
进程包括:
代码(Code)
当前活动:
- 程序计数器(PC)-指向当前要执行的指令的地址
- 堆栈(Stack):存放函数参数、临时变量等临时数据
- 数据(Data):全局变量,处理的文件
- 堆(Heap):动态内存分配
3.2.1 进程和程序的区别和联系
- 进程是程序的一个实例,是程序的一次执行
- 一个程序可以对应一个或多个进程,同样一个进程可以对应一个或多个程序
- 程序是进程的代码部分
- 进程是活动实体,程序是静止(被动)实体
- 进程在内存,程序在外存
3.2.2 进程状态
进程执行时,改变状态
- 新建(new):在创建进程
- 运行(running):指令在执行
- 等待(阻塞):进程等待某些事情的发生
- 就绪(ready):进程等待分配处理器
- 终止(terminated):进程执行完毕
3.2.3 状态的转换
3.2.4 进程控制块(PCB)
PCB可以理解为C语言中的结构体
PCB包含同进程有关的信息,包括:
- 进程状态
- 程序计数器
- CPU寄存器
- CPU调度信息
- 内存管理信息
- 计账信息
- I/O状态信息
Windows 中 的为KPROCESS
3.2.5 CPU在进程间的切换
上下文切换
3.3 进程操作
父进程创建子进程,如此轮流创建下去,构成一棵进程树
资源共享:三种情况
- 父进程子进程共享所有的资源
- 子进程共享父进程资源的子集
- 父进程和子进程无资源共享
执行:
- 父进程和子进程并发执行
- 父进程等待,直到子进程终止
3.3.1 进程创建
地址空间:
- 子女复制双亲
- 子女有一个程序被调入
UNIX 例子:
- fork 系统调用创建新进程
- 在fork用一个新程序代替了进程的内存空间后,采用exec系统调用
原子操作(操作期间不允许被中断)
3.3.2 进程终止
进程执行最后一项并退出 (exit)
父进程可以中止子进程的执行(abort)
3.3.3 父进程和子进程
fork() 返回值来区分
pid_t
fork() 返回类型为 pid_t
返回值为 0 子进程创建成功
返回值大于 0,父进程
返回值小于 0 ,创建失败
3.3.4 等待
父进程阻塞直到子进程完成任务
调用wait或者 waitpid
系统调用
3.3.5 进程操作的原语
进程创建是一个原语操作
内核或微核提供核外调用的过程或函数称为原语(primitive)。
原语是一段用机器指令编写的完成特定功能的程序,在执行过程中不允许中断。
原语是操作系统的核心,它不是由进程而是由一组程序模块所组成,是操作系统的一个组成部分,它必须在管态
(一种机器状态,管态下执行的程序可以执行特权和非特权两类指令,通常把它定义为操作系统的状态)下执行,并
且常驻内存,而个别系统有一部分不在管态下运行。
3.4 进程间通信
3.4.1 协同进程
独立进程:不会影响另一个进程的执行或被另一个进程执行影响
协同进程:可能影响另一个进程的执行或被另一个进程执行影响
进程协同的优点
- 信息共享
- 加速运算
- 模块化
- 方便
3.4.2 进程间通信
两种基本模式:
共享内存和消息传递机制
3.4.3 共享内存
通信速度最快
一块内存在多个进程之间共享
通信由应用程序自己控制
一般用于大数据通信
实现手段:
- 文件映射
- 映射
- 剪贴板
存在问题:需要在进程间进行访问控制
具体举例就是 生产者和消费者的进程问题
3.4.4 消息传递
消息传递在 微内核 中的应用
远程通信无法采用内存共享 (最直接的就是两个不同的计算机 之间的通信)
两个操作:
- 发送消息:send(message)
- 接收消息:receive(message)
若P与Q要通信,需要:
- 建立通信连接
- 通过send/receive交换消息
通信连接的实现
- 物理的(如,共享存储,硬件总线)
- 逻辑的(如,逻辑特性)
直接通信
进程必须显式的命名
- send (P, message) –向进程P发消息
- receive(Q, message) –从进程Q收消息
通信连接的特性
- 连接自动建立
- 连接精确地与一对通信进程相关
- 在每一对通信进程间存在一个连接
- 连接可单向,但通常双向
间接通信
消息传递过程中,通过中间媒介 信箱 来传递消息
若进程用信箱来传递信息,那么发送信息者的进程名应 存放在信箱之中
慕课单元作业
1、为什么进程需要有自己的PCB?请举例谈谈PCB在进程运行过程中的作用。
PCB是进程不可或缺的数据结构,是进程存在于系统中的唯一标志。
作用:
- PCB作为独立运行基本单位的标志
- PCB能实现间断性运行方式
- PCB提供进程管理所需要的信息
- PCB提供进程调度所需要的信息
- PCB实现与其他进程的同步与通信
2、请从进程创建和进程终止角度谈谈父进程和子进程的关系
创建:
父进程的执行顺序要先于子进程,以Linux下的fork()函数为例,子进程会执行 pid = fork()语句之后的逻辑
父进程和子进程的进程ID不同
终止:
父进程可以中止子进程的执行。
父进程监视子进程,在子进程执行的过程中,父进程不会消亡,调用wait函数查看子进程的状态。直到子进程终止之后,父进程才会终止自己的程序。
3、进程状态转换图
(1)引起各种状态转换的典型事件有哪些?
就绪到运行:当前运行进程阻塞,调度程序优先选择一个优先级最高的进程占有处理机
运行到就绪:当前运行进程时间片用完了或者被中断
运行到阻塞:请求I/O操作
阻塞到就绪:I/O操作完成,被中断处理程序唤醒
(2)当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换。在 什么情况下,转换 3 的发生能立即引起转换 1 的发生?
当前进程阻塞,调度程序选择一个优先级最高的进程占有处理机
(3)试说明是否会发生下述因果转换:
a)转换 2 是否会引起转换 1
可能发生。当前运行进程优先级下降,调度程序选择一个优先级最高的进程占有处理机
b)转换3是否会引起转换2
不可能。占有CPU的一个进程不能同时进入两个状态;在单CPU的系统中,状态3发生后,CPU没有执行进 程,故不会发生状态转换2
c)转换4是否会引起转换1
一般无关,但当就绪队列为空时,一个进程被唤醒转入就绪队列后,调度程序使该进程占有处理机
(4)一个进程的状态转换引起另一个进程的状态转换的所有可能
运行到就绪 引起 就绪到运行
运行到阻塞 引起 就绪到运行
运行到结束 引起 就绪到运行
4、描述内核在两个进程间进行上下文切换的过程。
以两个进程P1
和P2
为例,当进程P1
切换到进程P2
时:
首先保存旧进程P1
的上下文到进程控制块 PCB1
之中,将PCB1
加入到队列之中
然后修改新的进程P2
的进程控制块PCB2
的信息,为进程P2
设置地址空间,使用PCB2
的信息,执行进程P2
最后恢复新进程的上下文,执行进程P2
,完成上下文切换
5、什么是直接通信?什么是间接通信?请各举一个例子并讨论他们各自的优缺点
直接通信:两个进程以直接指明通信的接收方或发送方的方式进程通信的过程
例子:通信链路
优点:通信速度快,效率高
缺点:只能一对一之间进行通信
间接通信:两个进程之间的消息的发送和接收通过媒介 信箱(或端口)进行的通信方式
例子:邮箱媒介传递信息
优点:可以一对多,多对一通信
缺点:用户空间和内核空间通信的系统开销增加