0


操作系统原理之多进程、多线程与并发

文章目录


提示:以下是本篇文章正文内容,Java系列学习将会持续更新

(1)什么是进程?

进程是(用户视角)程序的一次执行过程,是(OS视角)系统进行资源分配的基本单位,每个进程都有它自己的内存空间和系统资源。

(2)进程的状态

新建(进程处于正在创建中)、就绪(万物具备,只欠CPU)、运行(进程的指令真正在CPU运行着)、
阻塞(进程由于等待外部条件,所以暂时无法继续)、
结束(进程的所有指令执行结束,但PCB暂时保留,OS还需要做一些其他工作)
在这里插入图片描述

->新建:随着程序的启动运行
新建->就绪:进程的初始化工作完全完成(这个工作是由OS的指令完成的)
就绪->运行:进程被OS选中,并分配了CPU之后
运行->结束:进程的最后-条指令执行结束(粗略地理解,就是main方法执行结束了)
运行->就绪:1.被高优先级的进程抢占了 2.时间片耗尽 3.进程可以执行一些OS提供的系统调用,主动放弃
运行->阻塞:等待一些外部条件:等待I0设备;进程休眠一-段时间; …
阻塞->就绪:外部条件满足: I0数据来了;休眠时间到了…
**结束->**:进程PCB彻底被OS回收了

(3)OS何时介入进程调度?

OS什么时候会介入进程调度?需要选择一个新的进程,进行CPU分配
 1.一个新的进程刚处于就绪状态时,当该进程的优先级较高时,具备这种能力的OS被称为抢占式(实时)
 2.运行状态的进程->结束。一个进程结束了
 3. OS每隔一段时间,会调度一次:进程的时间片耗尽 CPU空闲下来的时候
 4.进程主动放弃CPU
   ①运行->阻塞
   ②运行->就绪

(4)多进程的意义

 单进程计算机只能做一件事情,而我们现在的计算机都可一边听歌一边玩游戏,所以我们常见的操作系统(Windows、Mac、linux)都是多线程操作系统,能在同一个时间段内执行多个任务。

单核计算机,游戏进程和音乐进程是同时运行的吗?
 不是。因为CPU在某个时间点只能做一件事情,计算在游戏进程和音乐进行中坐着频繁切换,且切换速度很快,所以,让我们感觉游戏和音乐在同时运行,其实并不是同时执行的。
 多进程的作用不是提高执行速度,而是提高CPU使用率

(5)并行和并发

并行是指两个或者多个事件在同一时刻发生,只会出现在多CPU多核场景下。
并发是指两个或多个事件在同一时间间隔发生。宏观下多个进程同时进行,微观下一次只能执行一个进程。

(6)进程间通信

OS需要提供一套机制,用于让A、B进程之间进行必要的数据交换——进程间通信。
进程间通信的常见方式:
 1.管道(pipe)    学习linux的时候会接触一些
 2.消息队列(message queue)
 3.信号量(semaphore)
 4.信号(signal)   学习linux 的时候会接触一些
 5.共享内存(shared memory)
 6.网络(network)   workbench 和mysql通信的方式。

(7)死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象。

哲学家吃饭问题描述死锁,银行家算法解决死锁。

 某个哲学主要的时间是在思考哲学问题,思考的间隙时不时的要吃饭。吃饭需要筷子(资源)哲学家会去申请筷子(资源)。哲学家申请到两个资源之后(左边的筷子+右边的筷子),吃饭释放资源。
在这里插入图片描述

银行家算法

 1.操作系统按照银行家指定的规则为进程分配资源,当进程首次申请资源时,需要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请资源分配资源,否则就推迟分配。
 2.当进程在执行中继续申请资源时,先测试该进程本次申请的资源数,是否超过了该资源剩余的总量,若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。

死锁产生的必要条件

互斥:一个资源每次只能被一个进程使用(资源独立)
请求与保持:一个进程因请求资源而阻塞时,对已获得的资源保持不放(不释放锁)
不剥夺:进程已获得的资源,在未使用之前,不能强行剥夺(抢夺资源)
循环等待:若干进程之间形成一种头尾相接的循环等待的资源关闭(死循环)

(8)什么是线程?

 在一个进程的内部又可以执行多个任务,而每一个任务可以看作是一个线程。线程是进程中的一条执行流,是CPU资源调度的基本单位。

(9)多线程的意义

多线程可以使程序反应更快、交互性更强、执行效率更高。
多线程的作用不是提高执行速度,而是为了提高应用程序使用率。

错觉:让我们认为多个线程是并发执行的,实际上并不是。
 因为多个线程共享同一个进程资源(堆内存和方法区),但是栈内存是独立的,一个线程一个栈,所以他们任然实在抢CPU的资源执行,一个时间点上只能有一个线程执行,谁抢到谁就执行,不知道谁能抢到,所以造成线程运行的随机性。

(10)进程和线程的区别

进程是包含线程的,每个进程至少有一个线程存在,即主线程。
进程和进程之间不共享内存资源,同一个进程的线程之间共享同一个内存空间。
进程是系统分配资源的最小单位,线程是系统调度的最小单位。

(11)Java线程和OS线程的关系

 线程是操作系统中的概念。操作系统内核实现了线程这样的机制, 并且为用户层提供了一些 API 使用(例如 Linux 的 pthread 库)。
 Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装。


总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是操作系统原理的学习,认识进程和线程、进程调度、进程状态、进程和线程的区别。之后的学习内容将持续更新!!!


本文转载自: https://blog.csdn.net/qq15035899256/article/details/125584669
版权归原作者 一只咸鱼。。 所有, 如有侵权,请联系我们删除。

“操作系统原理之多进程、多线程与并发”的评论:

还没有评论