操作系统中进程和线程知识点总结

进程和线程

进程和线程都是OS中的重要概念,要理解进程和线程,就要理解并发和并行。

并发:两个或多个事件在同一时刻发生
并行:两个或多个事件在同一时间间隔发生

在单处理机系统中,在一秒中内,可能1-15ms运行A程序,15-30运行B程序,以此类推,给人一种错觉是在同一时刻运行的。
在多处理机系统中,在一秒内,可能1-15ms在C1处理器运行A程序,也可能在1-15ms内在C2处理器运行B程序,这才是并行

处理机从现在的硬件的角度看,就是CPU

进程

在早期没有配置OS和单道批处理系统中,程序的执行方式是顺序执行,即在内存中仅装入一道用户程序,由它独占系统中的所有资源,只有在一个用户程序执行完成后,才允许装入另一个程序并执行。

也就是说以前都是一个程序执行完毕,别的程序才能执行,浪费硬件资源,而现在,都是多进程并发执行,多个程序并发执行,极大地提高了硬件资源使用,但是又会出现性的问题,比如程序并发,两个程序都共享同一个变量,必然会出现新的结果,诸如此类的问题就引出了进程的概念。

进程定义

OS利用 PCB 来描述进程的基本情况和活动过程,进而控制和管理进程。

这样,由程序段、相关的数据段和 PCB 三部分便构成了进程实体,进程是进程实体运行的过程,是系统进行资源分配和调度的独立单位。

所谓创建进程,实质上是创建进程实体中的 PCB ;而撤消进程,实质上是撤消进程的 PCB。

进程基本状态

当然,进程还有其它的状态,但是这里只看进程的基本状态:
在这里插入图片描述

  1. 创建一个进程是个很复杂的过程:首先由进程申请一个空白 PCB ,并向 PCB 中填写用于控制和管理进程的信息;然后为该进程分配运行时所必须的资源:最后,把该进程转入就绪状态并插入就绪队列之中。但如果进程所需的资源尚不能得到满足,比如系统尚无足够的内存使进程无法装入其中,此时创建工作尚未完成.进程不能被调度运行,于是把此时进程所处的状态称为创建状态。当满足PCB初始化的条件后,就会由创建转换为就绪

  2. 进程在运行过程中会经常发生状态的转换。在调度程序的分配下为之分配了处理机之后便可执行,相应地,其状态就由就绪态转变为执行态;

  3. 正在执行的进程(当前进程)如果因分配给它的时间片己完而被剥夺处理机暂停执行时,其状态便由执行转为就绪

  4. 如果因发生某事件,致使当前进程的执行受阻(例如进程访问某临界资源,而该资源正被其它进程访问时),使之无法继续执行,则该进程状态将由执行转变为阻塞。

PCB的作用

为了便于系统描述和管理进程的运行,在OS的核心为每个进程专门定义了一个数据结构―进程控制块 PCB ( Process Control Block )。PCB是一种数据结构,专门来描述和管理进程运行的全部信息

PCB中的内容:

  1. 进程标识:外部标识为进程的父子关系以及拥有该进程的用户,内部标识就是进程号
  2. 处理机标识,比如处理机上的寄存器信息,指令计数器,程序状态字等等
  3. 调度信息,进程的优先级,当前的状态等等
  4. 控制信息,程序和数据的地址,下一个进程PCB的地址等等

由于PCB是一种数据结构,是一种逻辑结构,真实的物理结构可以由链表,顺序表或者索引表实现

临界区和临界资源

假设A和B并发执行,变量i是全局变量,会出现三种结果:

在这里插入图片描述

但是,如果将2,3,4行这个整体设定为串行执行就解决这个问题了。这个整体就是临界区,其中占有的资源就是临界资源。

在这里插入图片描述

锁机制

锁机制:将临界区标志为不可用状态为上锁,将临界区标志为可用操作为开锁,用来解决互斥问题
在这里插入图片描述

上锁操作的伪代码的:
在这里插入图片描述

开锁操作伪代码:

在这里插入图片描述

程序并发过程中上锁开锁的流程:

在这里插入图片描述

进程同步和互斥

进程同步的目的就是为了使多进程并发额环境下更好的协调,更好的利用系统资源,修正多进程并发带来的缺点,比如,多进程共享变量,不加以规则,最后程序的执行结果肯定是不同的。失去了可再现性

进程互斥:是指两个或两个以上的进程共享临界资源,必须协调各进程对资源的存取顺序,确保没有两个或两个以上进程同时进行存取操作。

进程同步:多个进程为了完成同一件事情,需要开始协调,一个进程完成某个操作之前就要求另一个进程已经完成了某个操作,否则只能等待。

互斥是同步的一种

在这里插入图片描述

进程同步带来了很多经典问题:生产者消费者问题,读者写者问题,哲学家进餐问题。

信号灯机制

信号灯的数据结构:
在这里插入图片描述

P,V操作:
在这里插入图片描述

P具体操作,小心设置S初值,否则就会阻塞进程:

在这里插入图片描述

V具体操作

在这里插入图片描述

P,V操作使三个进程互斥访问

假设一次调用Pa,Pb,Pc函数,P,V造作包含临界区,这样三个进程并发会顺利执行,不会互相干扰。
在这里插入图片描述

P,V操作解决进程同步问题

在这里插入图片描述

P,V操作解决司机和售票员同步:关门对起步有影响,所以起步可能阻塞,执行P操作,关好门,可能唤醒进程,执行一个V操作,停车对开门有影响,所以开门之前可能阻塞,执行P操作,在停车之后就可以开门了,执行V操作,唤醒进程。

在这里插入图片描述

进同步经典问题

生产者消费者问题

问题:核心就是生产者和缓冲区是否满是一个同步问题,消费者和缓冲区是否空是一个同步问题,生产者和消费者都是互斥访问缓冲区这个临界区。
在这里插入图片描述

解决方法:
在这里插入图片描述

死锁

哲学家进餐问题
在这里插入图片描述

使用线程描述:每个哲学家是一个线程,可以并发思考和休息,一个哲学家吃饭,但是他的邻座哲学家就不能吃饭。

在这里插入图片描述

使用P,V操作解决,但是五个线程都并发,可能导致了五个哲学家拿起左边的筷子,都不能继续拿右边的筷子,造成了死锁
在这里插入图片描述

死锁就是两个或多个进程无限期的等待永远都不会发生的条件的一种系统状态,结果每个进程都阻塞。

线程

在一个未引入进程的系统中,在属于同一个应用程序的计算程序和 UO 程序之间只能是顺序执行,即只有在计算程序执行告一段落后,才允许 UO 程序执行;反之,在程序执行 UO 操作时,计算程序也不能执行。但在为计算程序和 1 / 0 程序分别建立一个进程( Process ) 后,这两个进程便可并发执行。若对内存中的多个程序都分别建立一个进程,它们就可以并发执行,这样便能极大地提高系统资源的利用率,增加系统的吞吐量。所谓进程,是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。多个进程之间可以并发执行和交换信息。事实上,进程和并发是现代操作系统中最重要的基本概念,也是操作系统运行

线程经典应用场景

  1. 程序的多个功能并发执行,比如一个播放视频软件:并发执行视频解码,音屏解码,网络接受数据包等功能
    在这里插入图片描述

  2. 提高窗口交互性

后台很耗时间,倒置前台交互界面和计算串行,无法及时反应。
在这里插入图片描述

在这里插入图片描述

  1. 文件拷贝程序
    将大量的字节和文件拷贝到相应的目录中,需要大量的循环计算,这是一个独立的线程。
    在这里插入图片描述

  2. 多处理机情况下,可以使用多线程编程

进程和线程的区别

进程和线程是类似的,但是进程占据的资源一般比线程占据的资源要大,线程只需要少量的资源就可以运行,TCB和程序计数器等等,在进行上下文切换的时候,自然线程也比进程快,并且线程可以共享进程的资源,因为多线程并发,线程拥有者相同的地址空间。

猜你喜欢

转载自blog.csdn.net/liutao43/article/details/114673657