文章目录
- [1 进程和程序区别](#1 进程和程序区别)
- [2 进程状态](#2 进程状态)
-
- [2.1 进程的5种基本状态](#2.1 进程的5种基本状态)
- [2.2 进程状态之间转换](#2.2 进程状态之间转换)
- [2.3 七状态模型](#2.3 七状态模型)
- [3 进程描述](#3 进程描述)
-
- [3.1 进程控制块 PCB](#3.1 进程控制块 PCB)
- [3.2 进程块组织方式](#3.2 进程块组织方式)
- [4 进程控制](#4 进程控制)
- [5 进程同步 互斥](#5 进程同步 互斥)
-
- [5.1 区分进程互斥和同步](#5.1 区分进程互斥和同步)
- [5.2 核心方案](#5.2 核心方案)
- [5.3 其他方案](#5.3 其他方案)
-
- [方案1 设置锁变量](#方案1 设置锁变量)
- [方案2 严格轮转法](#方案2 严格轮转法)
- [方案3 Peterson解决方案](#方案3 Peterson解决方案)
- [方案4 关中断](#方案4 关中断)
1 进程和程序区别
进程是程序的1次执行。
进程(Process)和程序(Program)是两个不同的概念,它们在计算机科学中有明确的区别:
- 程序(Program) :
- 定义:程序是一组计算机指令的有序集合,这些指令被编写成一个文件,通常以可执行文件的形式存在。程序是静态的,它只是一段代码的集合,等待被执行。
- 特点:程序包含了计算机程序员编写的源代码,它描述了一系列任务的算法和逻辑,但并没有实际执行。程序不占用计算机的内存空间,也不消耗计算机的CPU时间。
- 例子:一个文本编辑器的程序文件、一个游戏的可执行文件、一个网页浏览器的应用程序等都是程序的例子。
- 进程(Process) :
- 定义:进程是计算机中正在运行的程序的实例。它是程序在内存中加载并执行时的活动状态,包括程序的代码、数据、执行状态、系统资源分配等。
- 特点:进程是动态的,它占用计算机的内存空间,可以执行计算机指令,与其他进程并发运行。每个进程都有自己的独立内存空间,因此它们不会相互干扰。进程可以创建、启动、暂停、终止等。
- 例子:当您运行一个文本编辑器、播放音乐、浏览网页或打印文档时,每个活动都对应一个独立的进程。
总结来说,程序是静态的、不执行的计算机指令集合,而进程是程序的运行实例,它占用计算机内存,执行指令,并与其他进程一起协同工作。进程是计算机操作系统中的核心概念,它使多任务处理成为可能.
可以将程序和进程比喻为烹饪的过程:
- **程序(Program)**就像是一本菜谱。菜谱是一份详细的食物制作指南,它包含了食材清单、烹饪步骤和所需的厨具。但菜谱本身并不能做出美味的食物,它只是一份指导,等待着被厨师(计算机)读取和执行。就像您需要拿出菜谱并按照其中的步骤去做一道菜一样,计算机需要将程序加载到内存中并执行其中的指令。
- **进程(Process)**就像是正在烹饪中的一道菜。当您选择一道菜谱并开始烹饪时,您实际上在制作一道具体的菜肴。这个菜肴有自己的成分、调味料和烹饪状态。它在火上烹煮、被切割、被摆盘等等。这个菜肴是实际被制作和提供给食客的,就像进程是正在计算机内存中运行和执行的程序实例。
所以,程序就像是一份指导,而进程是实际的动态执行。程序是静态的,而进程是具体的、可见的操作。
2 进程状态
2.1 进程的5种基本状态
(1)新建(new):进程正在被创建。
(2)就绪(ready):进程可运行,正等待获得处理机。
(3)运行(running):进程的指令正在被执行。
(4)阻塞(blocked)或等待:进程因等待某事件(如请求I/O)而暂停执行。
(5)完成(done):进程结束。
2.2 进程状态之间转换
2.3 七状态模型
引入挂起
就绪(Ready):进程在内存且可立即进入运行状态
阻塞(Blocked):进程在内存并等待某事件的出现
阻塞挂起(Blocked, suspend):进程在外存并等待某事件的出现
就绪挂起(Ready, suspend):进程在外存,但只要进入内存,即可运行
运行
新建
完成
注意 挂起都在外存
挂起:把进程从内存转到外存
激活:把进程从外存转到内存
3 进程描述
3.1 进程控制块 PCB
作用
1 是OS管理和控制进程的数据结构。
2 PCB记录着进程的描述信息。
每个进程对应1个PCB。
信息内容
(1)进程本身的标识信息
进程标识符pid(process ID):整数,由OS分配,唯一
用户标识符uid(user ID):创建该进程的用户
对应程序的地址:内存、外存
(2)CPU现场 - 为进程正确切换所需
所有寄存器的值
或称进程上下文(context)
(3)进程调度信息
进程的状态
优先级
使进程阻塞的条件
占用CPU 、等待CPU的时间(用于动态调整优先级)
(4)进程占用资源的信息
进程间同步和通信机制,如信号量、消息队列指针
打开文件的信息,如文件描述符表
CPU现场 - 为进程正确切换所需
所有寄存器的值
或称进程上下文(context)
Linux的进程控制块:task_struct
.
进程创建时,由OS创建PCB;
进程终止时,由OS撤销PCB;
进程运行时,以PCB作为调度依据。
3.2 进程块组织方式
一般来说,系统把所有PCB组织在一起,并把它们放在内存的固定区域,构成PCB表。
PCB表的大小决定了系统中最多可同时存在的进程个数。
同一状态进程的PCB组成一个链表,不同状态对应多个不同的链表,如就绪链表、阻塞链表
4 进程控制
原语
由若干指令构成的具有特定功能的函数
具有原子性,其操作具有不可分割性
创建、撤销进程以及完成进程各状态之间的转换,由具有特定功能的原语完成
进程创建原语
进程撤销原语
阻塞原语
唤醒原语
挂起原语
激活(解挂)原语
改变进程优先级
5 进程同步 互斥
在执行时间上互相重叠(或交替),一个进程的执行尚未结束,另一个进程的执行已经开始的执行方式。
这样会有一个问题
因为资源共享的问题,结果会产生不确定性
为此,引入同步(synchronization)和互斥(mutual exclusion)。
临界资源 一次只允许一个进程独占访问(使用)资源 ,越小越好
临界区 进程中访问临界资源的的程序段
5.1 区分进程互斥和同步
互斥是指执行某个进程的时候访问某一临界资源的时候,另一个进程不能执行访问这一临界资源。
经典只有互斥问题:打印机打印
同步是指完成某一进程执行是有条件的,必须等另一个进程的某一资源结束才可以
经典只有同步的问题:售票员售票
既有互斥又有同步问题:消费者问题
5.2 核心方案
信号量
利用信号量P-V操作可以实现进程的互斥访问
利用信号量P-V 操作可以实现进程的同步访问
5.3 其他方案
实现互斥方案
一个好的互斥方案应满足以下条件:
(1)任何两个进程不能同时处于临界区。
(2)临界区外的进程不应阻止其他进程进入临界区。
(3)不应使进程在临界区外无休止地等待。就是说,临界区代码执行时间要短。
(4)不应对CPU的个数和进程之间的相对运行速度作任何假设。
方案1 设置锁变量
会导致两个进程同时进入临界资源
来不及上锁就被切换走了
可能会存在盲等待
方案2 严格轮转法
本质互为锁
临界区外的进程会阻止其他进程进入临界区。
方案3 Peterson解决方案
为什么进程号只有0和1
方案4 关中断
关中断权利交给用户不合适
对多处理机系统无效