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

article/2025/10/14 18:58:33

文章目录

      • (1)什么是进程?
      • (2)进程的状态
      • (3)OS何时介入进程调度?
      • (4)多进程的意义
      • (5)并行和并发
      • (6)进程间通信
      • (7)死锁
      • (8)什么是线程?
      • (9)多线程的意义
      • (10)进程和线程的区别
      • (11)Java线程和OS线程的关系


提示:以下是本篇文章正文内容,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 进行了进一步的抽象和封装。

回到目录…


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


http://chatgpt.dhexx.cn/article/uddJgjrS.shtml

相关文章

【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第二章

前言 此书在最后的附录B中,有给出部分重难点部分的参考答案。会在最后放上图片。如果想要此书习题答案,可点以下链接:为一个压缩包,以图片形式,习题图片按章节排序,答案图片按书页排序。 《操作系统原理…

操作系统原理——第六章:页面置换算法

文章目录 1. 功能与目标2. 实验设置与评价方法3. 局部页面置换算法3.1 最优页面置换算法(OPT,optimal)3.2 先进先出算法(FIFO)3.3 最近最久未使用算法(LRU,Least Recently Used)3.4 …

操作系统原理模拟实验(基于C/C++模拟处理机调度、存储管理和文件系统)

目录 引言一、处理机调度模拟1、下载链接2、目的与要求3、截图示例 二、存储管理模拟动态分区分配1、下载链接2、目的与要求3、截图示例 分页存储地址转换1、下载链接2、目的与要求3、截图示例 三、文件系统模拟1、下载链接2、目的与要求3、截图示例 引言 包含多个实验的完整源…

操作系统原理总结

转载:https://blog.csdn.net/yanglingwell/article/details/53745758 操作系统原理总结 made by 杨领well (yanglingwellsina.com) 一、基础知识点 1. 操作系统的资源管理技术 资源管理解决物理资源数量不足和合理分配资源这两个问题。 操作系统虚拟机为用户提供…

操作系统原理:覆盖技术、交换技术、虚拟内存概要

随着时间的推移,程序不断地更新,规模不断增长,运行的时候可能会发现内存会越来越不够用。所以希望一个容量大,更快,更便宜,数据不易丢失的存储器。 首先想到的就是硬盘,所以在硬盘的基础上建立了…

操作系统原理、实现与实践课后习题参考答案(已完结)

习题二–系统接口 通向操作系统内核的大门 1.调用fork()的父子进程执行“同样”的代码,如何理解”同样“? 答: fork()函数为系统调用,用于创建进程。创建的进程与原来进程几乎完全相同. 一个进程调用fork(&#xff09…

操作系统原理1-3章答案 黑新宏 胡元义主编

第1章引论 一、单项选择题 1.A 2. C 3. D 4. A 5.A 6. C 7. C 8. D 9. C 10.C 11. D 12.A 13.C 14.D 15.D 16.C 17.D 18.C 19.B 20.C 21.D 22.D 23.C 24.B 25.C 26.B 二、判断题 1.错误 2. 错误 3.错误 4. 错误 5.错误 6.错误 7.正确 8.错误 9.错误 10.错误 11.正确 12.错误 1…

操作系统原理:文件系统、磁盘调度

目录 一、相关概念 二、文件的分配 三、空闲空间列表 四、多磁盘管理-RAID 五、磁盘调度 一、相关概念 文件系统是一种用于持久性存储的系统抽象。硬盘属于持久性存储介质的一种。管理文件系统例如硬盘,需要管理文件块,哪一块属于哪一…

Linux的操作系统原理详解

Linux的操作系统原理详解 ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿/// 1.操作系统基本概念 操作系统是一个基本程序的集合,在这个集合中,最重要的程序称为内核(Kernel&a…

操作系统原理

操作系统原理 第一章第二章第三章第四章第五章第六章总结 第一章 计算机系统组成部分: 硬件 应用程序 操作系统 用户操作系统的作用: 1.操作系统是管理计算机硬件的程序,为应用程序提供基础并充当计算机用户和计算机硬件的中介。 2.操作系统…

操作系统基本原理

操作系统的类型与结构 操作系统是计算机系统中最基本的系统软件,它既管理计算机系统的软、硬件资源,又控制程序的执行。操作系统的基本类型有:批处理操作系统、分时操作系统和实时操作系统。从资源管理的角度看,操作系统主要是对处…

操作系统原理(概述)

1.操作系统的工作: (1)程序的执行:负责启动每个程序,以及结束程序的工作。 (2)完成与硬件有关的工作:实现代码中包含存储器的物理地址、对设备接口寄存器和设备接口缓冲区的读写等…

Unity UGUi之Panel

Unity UGUI之Panel制作滑块 新建一个Panel和一个Image,image放在Panel下做子物体。 给Panel添加 Scroll Rect 和 Mask 组件, Mask组件是用来隐藏image超出Panel的区域。 然后将image拖拽到Scroll Rect组件下的Content属性上。 Horizontal是水平滑动,…

winform 设置panel边框

var panel1 new Panel(); var old panel1.Margin; panel1.Margin new Padding(old.Left, -50, old.Right, old.Bottom);

EasyUI中Panel面板的简单使用

场景 效果 属性 名称类型描述默认值idstring面板(panel)的 id 属性。nulltitlestring显示在面板(panel)头部的标题文字。nulliconClsstring在面板(panel)里显示一个 16x16 图标的 CSS class。nullwidthnu…

[C# WinForm设计]Panel布局及TabControl增加关闭按钮和Treeview导航 源码

前段时间因工作需要做一个类似进销存的系统,这里要用到基于C/S架构的WinForm界面,为了给我一样的菜鸟多一个参考,现将过程及关键界面的实现代码贴在后面,供参考!老鸟飘过~~ 一、实现效果 演示 namespace TabTest {part…

C#Winform中如何将窗体显示在panel中

在窗体中我们有时候做美观就需要将一个窗体显示在panel或SplitContainer里的panel中如何实现呢? 代码: public void Showform(Form form) //定义方法 { //清除panel里面的其他窗体 this.splitContainer1.Panel2:要显示的panel this.splitCont…

从零开始学习CANoe(四)—— 设计panel

相关文章 从零开始学习CANoe(一)—— 新建工程从零开始学习CANoe(二)—— CANdb 创建 dbc文件从零开始学习CANoe(三)—— 系统变量的创建和使用从零开始学习CANoe(四)—— 设计pane…

winform无边框在panel上拖动窗口位置,改变窗口大小

将窗体的FormBorderStyles属性设置为None 窗体上放一个新的panel,设置Dock属性为Fill 创建变量 private bool isMouseDown false;//表示鼠标当前是否处于按下状态,初始值为否 MouseDirection direction MouseDirection.None;//表示拖动的方向&#x…

C# Winform Panel 内控件大小不随Panel大小改变设置

(1)将Anchor属性设置为:None (2)将AutoSize属性设置为:False 不过还存在一个问题点,就是Button的位置还是会随着Panel大小变化而改变。