操作系统专栏2进程管理from 小林coding

news2024/11/17 22:37:28

进程管理

  • 基本概念
    • 进程控制
    • 进程上下文切换
  • 线程
  • 进程和线程的比较
  • 进程通信
    • 管道
    • 消息队列
    • 共享内存
    • 信号量
    • 信号
    • socket

基本概念

  • 进程:一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元.
  • 并行和并发:在这里插入图片描述
  • 状态:
    在这里插入图片描述
    其中挂起是指没有给程序分配实际的物理内存空间的情况(被交换到磁盘中)
  • pcb:进程控制块包含的信息有:进程描述信息,进程控制和管理信息,资源分配清单,cpu相关信息
  • pcb的组织:链表,分为就绪链表和阻塞链表
    在这里插入图片描述

进程控制

  1. 创建进程:流程如下,申请一个空白的PCB,向PCB填入进程控制相关的信息,为进程分配运行时资源(如内存),将PCB插入到就绪队列,等待调度
  2. 终止进程:3种方式:正常结束,异常结束和外界干预,子进程终止时,将从父进程继承的资源归还给父进程,父进程终止,该进程变成孤儿进程,资源回收的任务交由init进程管理.流程如下:查找终止进程的PCB,处于执行态,立即终止进程,将CPU分配给其他进程,还有子进程则将子进程交由init进程接管,将该进程的全部资源交由操作系统管理,将PCB删除
  3. 阻塞进程:当进程需要等待某一事件完成时,调用阻塞语句将自己阻塞,一旦阻塞等待,只能由另一个进程唤醒.流程如下 找到进程PCB,运行态则保护现场转为阻塞态停止运行,将PCB插入到阻塞队列
  4. 唤醒进程:阻塞态需要别的进程唤醒自己,唤醒流程如下:在该事件的阻塞队列中找到对应的PCB,从阻塞队列中取出,置为就绪态,插入到就绪队列中

进程上下文切换

不同进程在CPU运行,一个进程切换到另一个进程需要进行上下文切换,进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。

线程

线程是调度的最小单位,是进程中的一条执行流程,每个线程有独立的寄存器和栈,共享代码段,数据段,打开的文件等资源

  • 优点:多个线程并发运行,共享地址空间
  • 缺点:一个线程崩溃,所属进程的其他进程也会崩溃

进程和线程的比较

  • 进程是资源的分配单位,线程是CPU的分配单位
  • 进程拥有完整的资源平台,线程只共享必不可少的资源,比如寄存器和栈
  • 线程能减少并发执行的时间和空间开销

线程能够减少开销体现在

  • 线程的创建比较快,进程在创建的过程中,需要资源管理信息,如页表,文件管理信息,创建线程时,这些东西是共享的
  • 终止时间快,因为线程释放资源相比进程少
  • 线程切换快,线程共享地址空间等,切换时不需要切换页表等
  • 数据交换的速率快

进程通信

管道

ps auxf | grep mysql

中间的竖线就是管道,功能为将前一个命令的输出作为后一个命令的输入,管道传输数据是单向的,如果想相互通信必须创建两个管道.这种管道由于没有名字,因此称为匿名管道,用完即销毁,还有另一种管道被称为FIFO,使用mkfifo命令创建
在这里插入图片描述
pipe系统调用返回两个文件描述符1是写端,0是读端,如果适应shell命令创建管道,那么会开多个进程,命令管道可以在多个进程之间通信数据满足先进先出的顺序并且不支持lseek之类的操作

消息队列

管道不适合进程间频繁的交换数据,消息队列的通信模式就能解决这个问题,比如A进程要给B进程发送消息,那么A进程将数据放在消息队列之后就能返回了

  • 本质:内核中的消息链表
  • 限制:通信不及时,附件大小有限制,存在用户态与内核态的拷贝开销

共享内存

机制就是拿出一块虚拟的地址空间,映射到相同的物理内存中(mmap 和 shmget)
在这里插入图片描述

信号量

主要用于进程之间的同步

信号

kill ...

唯一的异步通信机制,拿到信号之后,有以下几种应对方式

  • 执行默认操作
  • 捕捉信号
  • 忽略信号

socket

网络编程
TCP
UDP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/816602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一百三十八、ClickHouse——使用clickhouse-backup备份ClickHouse库表

一、目标 使用clickhouse-backup在本地全库备份ClickHouse的数据库 二、前提 已经安装好clickhouse-backup 注意:由于之前同事已经按照好clickhouse-backup,所以我就没有安装 如有需要请参考其他人的博客安装一下,下面是我认为比较好的一…

如何看待前端已死这个问题(大学生篇)

小编刚大学毕业,还记得是大三的时候选择的前端开发方向,那个时候行情其实并没有这么差,最近互联网上讨论这一个很火的话题,叫前端已死。那么我就说说我的看法吧,虽然可能比起行业的大佬会比较短浅,但我想就…

盘点12个Vue 3的高颜值UI组件库

今天给大家盘点12个Vue 3的高颜值UI组件库,凡是用过Vue 框架开发项目的老铁们最少有用过其中一种或者二种以上的UI组件库,用广东话讲:个个都靓。 今天给大家盘点12个Vue 3的高颜值UI组件库,凡是用过Vue 框架开发项目的老铁们最少有…

【我们一起60天准备考研算法面试(大全)-第三十天 30/60】【矩阵翻转】【矩阵相乘】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

一文读懂原生应用与混合应用

大家对于原生应用和混合应用已经非常熟悉了,这里就不再进行详细的介绍,用通俗易懂的话解释下他们的一些特点。 1、原生应用 在 Android、iOS 等移动平台上利用提供的开发语言、开发类库、开发工具进行 App 软件开发。比如 Android 是用 Java、Eclipse、…

日撸代码300行:第59天(数值型数据的 NB 算法)

代码来自闵老师”日撸 Java 三百行(51-60天)“,链接:https://blog.csdn.net/minfanphd/article/details/116975957 相较于符号型数据,数值型是将实例的概率密度带入进行概率计算。数值型数据仅需要对决策属性那里进行…

Vue 基础语法(二)

一、背景: 我们对于基础语法,说白了就是实现元素赋值,循环,判断,以及事件响应即可! 二、v-bind 我们已经成功创建了第一个 Vue 应用!看起来这跟渲染一个字符串模板非常类似,但是 V…

性能测试/负载测试/压力测试之间的区别

做测试一年多来,虽然平时的工作都能很好的完成,但最近突然发现自己在关于测试的整体知识体系上面的了解很是欠缺,所以,在工作之余也做了一些测试方面的知识的补充。不足之处,还请大家多多交流,互相学习。 …

全网最细,性能测试-接口压测 Locust固件实战,从0到1进阶...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 python如何进行性…

基于YOLOv5的S弯识别

基于YOLOv5的S弯识别 目录 基于YOLOv5的S弯识别技术背景算法介绍具体实现1、下载仓库2、配置环境3、数据处理4、转成engine文件5、使用代码实现识别 技术总结 技术背景 S弯识别是一个在自动驾驶和机器人领域中很常见的任务,它需要识别道路上的弯道,特别…

springboot+mybatis-flex初体验

mybatis作为一款应用非常广泛的持久层框架,随之又出现了mybatis的增强框架。mybatis的增强框架就是在mybatis 的基础上又添加了许多的功能,目的就是为简化开发,提供效率而生。mybatis-plus就是一款很流行的增加框架,在 mybatis-pl…

小程序学习(四):WXML模板语法

WXML模板语法-数据绑定 1.数据绑定的基本原则 ①在data中定义数据 ②在WXML中使用数据 2.动态绑定属性 WXML模板语法-事件绑定 3.什么是事件 4.小程序中常用的事件 5.事件对象的属性列表 6.target和currentTarget的区别 7.bindtap的语法格式 8.在事件处理函数中为data中的数据…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(六)

系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟 …

校园跑腿小程序功能分享

提起校园跑腿小程序大家都不陌生,尤其是对上大学的伙伴们来说,更是熟悉得不能再熟悉了,和我们的生活息息相关,密不可分。 对于现在的年轻人来说,网购是非常简单和方便的一种购物方式,随之快递也会越来越多。在我们国家…

rancher2使用helm部署harbor,搭建私有镜像/helm仓库

接上一篇《rancher2安装nfs-subdir-external-provisioner为PVC/PV动态提供存储空间(动态分配卷)》 本篇开始讲如何在rancher2中部署harbor,来搭建一个私有的镜像/helm仓库。 一、安装harbor服务 1. 在目标集群中添加命名空间 2. 将提供harb…

Elbie勒索病毒的最新威胁:如何恢复您的数据?

导言: 在数字时代的浩瀚网络中,隐藏着一支不为人知的黑暗势力,他们的代表之一就是臭名昭著的Elbie勒索病毒。这个神秘的数字幽灵似乎无所不能,几乎每个人都可能成为它的牺牲品。本文91数据恢复将揭示Elbie勒索病毒的背后故事&…

数据结构-链表结构-单向链表

链表结构 说到链表结构就不得不提起数据结构,什么是数据结构?就是用来组织和存储数据的某种结构。那么到底是某种结构呢? 数据结构分为: 线性结构 数组,链表,栈,队列 树形结构 二叉树&#x…

零基础玩转C语言—结构体【初阶】

大家好,我是深鱼~ 目录 【前言】: 一、结构体的声明 1.1结构的基本知识 1.2结构的声明 1.3结构体成员的类型 1.4结构体变量的定义和初始化 二、结构体成员的访问 【前言】:本章来介绍结构体的部分知识,并不会深入讲解&…

webstorm格式化代码后单引号转成了双引号

webStorm格式化js代码时单引号变成了双引号,问题如下: 格式化前: 格式化后: 解决办法: window: File -> Settings -> Editor -> Code Style -> Javascript; mac: webStorm -> Preference …

了解回归测试吗?今天给大家详解一下回归测试

测试工作中,新人对于测试流程、测试方法都有可以直接拿来用的教材,但是对于回归测试中的bug处理的细节,往往需要我们更多的经历才能更好的完成自己的工作,下面我们来谈一谈回归测试bug的处理中需要关注的点: 一、什么…