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

进程管理

  • 基本概念
    • 进程控制
    • 进程上下文切换
  • 线程
  • 进程和线程的比较
  • 进程通信
    • 管道
    • 消息队列
    • 共享内存
    • 信号量
    • 信号
    • 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.mzph.cn/news/16302.shtml

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

相关文章

学习中遇到的好博客

c日志工具之——log4cpp ECU唤醒的本质就是给ECU供电。 小文件:零拷贝技术 传输大文件:异步 IO 、直接 IO:如何高效实现文件传输:小文件采用零拷贝、大文件采用异步io直接io (123条消息) Linux网络编程 | 彻底搞懂…

机器学习01 -Hello World(对鸢尾花(Iris Flower)进行训练及测试)

什么是机器学习? 机器学习是一种人工智能(AI)的子领域,它探索和开发计算机系统,使其能够从数据中学习和改进,并在没有明确编程指令的情况下做出决策或完成任务。 传统的程序需要程序员明确编写指令来告诉…

QT 视图(view)模型(model)汇总

QStringListModel和QListView UI界面 widget头文件 #ifndef WIDGET_H #define WIDGET_H#include <QStringList> #include <QStringListModel> #include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : publi…

使用AOP切面对返回的数据进行脱敏的问题

1.注解类 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** Author: xiaoxin* Date: 2023/7/21 17:15*/ Retention(RetentionPolicy.RUNTIME) Targe…

python文件处理方式

python文件处理方式 file open(D:\pythonText.txt, r, encodingUTF-8) print(file) # <_io.TextIOWrapper nameD:\\pythonText.txt moder encodingUTF-8> print(type(file)) # <class _io.TextIOWrapper>读取文件 file open(D:\pythonText.txt, r, encodingU…

3d软件动物生活习性仿真互动教学有哪些优势

软体动物是一类广泛存在于海洋和淡水环境中的生物&#xff0c;其独特的形态和生活习性给学生带来了新奇和有趣的学习主题&#xff0c;为了方便相关专业学科日常授课教学&#xff0c;web3d开发公司深圳华锐视点基于真实的软体动物&#xff0c;制作软体动物3D虚拟展示系统&#x…

【visual studio2019】如何打开即时窗口

在 Visual Studio2019 中打开即时窗口&#xff0c;有两种方法&#xff1a; 1、可以通过“调试”菜单&#xff0c;然后选择“窗口”下的“即时窗口”选项 2、直接使用快捷键“Ctrl Alt I” 此时即时窗口将显示在 Visual Studio2019 的底部。在即时窗口中&#xff0c;可以执…

Java读取及生成pb文件并转换jsonString

Java读取及生成pb文件并转换jsonString 1. 效果图2. 原理2.1 Protocol Buffers是什么2.2 支持的语言2.3 根据.proto生成.java2.4 初始化及构建pb&#xff0c;读取&#xff0c;转jsonString 3. 源码3.1 address.proto3.2 PbParseUtil.java 参考 读取pb及生成pb文件pb文件转换jso…

stable diffusion

一&#xff1a;安装。 stable diffusion 安装和使用全教程 - 知乎 Stable Diffusion安装 - 知乎 环境安装&#xff1a; 1&#xff1a;python 3.10安装。 Download Python | Python.org 切记要安装3.10版本&#xff0c;因为Stable diffusion是用3.10版本编写的&#xff0c;所…

【C++】 哈希

一、哈希的概念及其性质 1.哈希概念 在顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过关键码的多次比较。比如顺序表需要从第一个元素依次向后进行查找&#xff0c;顺序查找时间复杂度为…

VS Code环境配置问题

VS Code 环境配置问题 文章目录 VS Code 环境配置问题配置 C问题解决不乱码只显示结果避免闪退&#xff0c;中文乱码 配置 Java下载 JDKJDK 环境配置安装插件 配置 C 跟着官网教程&#xff08;英文版&#xff09;和其他博客配置了一遍&#xff0c;却遇到了很多小问题&#xff…

MyBatis源码剖析之延迟加载源码细节

文章目录 什么是延迟加载&#xff1f;实现局部延迟加载全局延迟加载 延迟加载原理实现延迟加载原理&#xff08;源码剖析)Setting 配置加载&#xff1a;延迟加载代理对象创建注意事项 什么是延迟加载&#xff1f; 在开发过程中很多时候我们并不需要总是在加载⽤户信息时就⼀定…

Android 开发代码规范

一. AndroidStudio开发工具规范 使用最新的稳定版本.统一文件的编码格式为utf-8. 清除每个类里面的无效的import导包.代码样式统一,比如&#xff0c;tab缩进4个空格&#xff0c;或者 tab size等如果没有特殊情况使用默认的配置即可。每行字数每行字符数不得超过 160 字符&…

【100天精通python】Day20:文件及目录操作_os模块和os.psth模块,文件权限修改

目录 专栏导读 1 文件的目录操作 os模块的一些操作目录函数​编辑 os.path 模块的操作目录函数 2 相对路径和绝对路径 3 路径拼接 4 判断目录是否存在 5 创建目录、删除目录、遍历目录 专栏导读 专栏订阅地址&#xff1a;https://blog.csdn.net/qq_35831906/category_12…

Mysql-MVCC 并发版本控制

参考链接&#xff1a;一文读懂MVCC实现原理_Nicolos_Z的博客-CSDN博客 1.总述&#xff1a; MVCC 主要是InnoDB解决数据库事务读写&#xff0c;导致的脏读、重复读问题的处理方法。通过快照读的方式&#xff0c;提高数据库并发查询的能力。 2.MVCC的实现 实现MVCC主要用到了…

在OK3588板卡上部署模型实现人工智能OCR应用

一、主机模型转换 我们依旧采用FastDeploy来部署应用深度学习模型到OK3588板卡上 进入主机Ubuntu的虚拟环境 conda activate ok3588 安装rknn-toolkit2&#xff08;该工具不能在OK3588板卡上完成模型转换&#xff09; git clone https://github.com/rockchip-linux/rknn-to…

金蝶云星空任意文件读取漏洞复现(0day)

0x01 产品简介 金蝶云星空是一款云端企业资源管理&#xff08;ERP&#xff09;软件&#xff0c;为企业提供财务管理、供应链管理以及业务流程管理等一体化解决方案。金蝶云星空聚焦多组织&#xff0c;多利润中心的大中型企业&#xff0c;以 “开放、标准、社交”三大特性为数字…

ChatGPT伦理挑战:人工智能的权利与责任

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

HCIP期中实验

考试需求 1 、该拓扑为公司网络&#xff0c;其中包括公司总部、公司分部以及公司骨干网&#xff0c;不包含运营商公网部分。 2 、设备名称均使用拓扑上名称改名&#xff0c;并且区分大小写。 3 、整张拓扑均使用私网地址进行配置。 4 、整张网络中&#xff0c;运行 OSPF 协议…

实时协作:团队效率倍增的关键

实时协作是指团队在当前时刻共同完成项目的能力。无论是否使用技术&#xff0c;都能实现这一点。然而&#xff0c;随着远程工作的盛行&#xff0c;安全的协作工具被用来让团队成员在项目和一般业务之间保持联系和同步。 传统协作与实时协作的区别 两种类型的协作最明显的区别…