操作系统中的(进程,线程)

news2024/11/19 18:29:08

操作系统是一个搞管理的软件,它对上给各个应用程序提供稳定的运行环境;对下管理各种硬件设备。 

进程

一个操作系统由内核和配套的应用程序组成。而进程就是操作系统内核中众多关键概念中的一个。进程通俗一点来讲就是一个已经跑起来的程序。

每个进程都会消耗一定量的系统资源(CPU,GPU,内存……)。而操作系统是按照进程来分配资源的,即:进程是系统分配资源的基本单位

PCB

在操作系统中有一个专门的结构体(操作系统内核是C/C++实现的)来描述进程的属性,而这个结构体被统称为 “进程控制块” 也叫PCB(Process Control Block)(此处的pcb并不是硬件中的pcb板)。

一个进程可以使用一个或多个PCB来表示,操作系统中会使用一个类似双向链表的数据结构来管理和组织多个PCB。

  • 进程的创建就是创建PCB并将其插入链表;
  • 销毁进程就是将PCB从链表上删除并释放;
  • 展示进程列表就相当于遍历链表。

pid

pid是进程的身份标识。每个进程都会有一个pid,程序一运行系统就会自动分配给进程一个独一无二的PID。 进程中止后PID被系统回收,可能会被继续分配给新运行的程序。

内存指针(一组属性)

内存指针描述了进程持有的内存资源是啥样的。

每个进程在创建的时候都会分配一块内存。

  • 进程需要一块专门的内存来存储需要执行的指令,例如当我们打开电脑中的exe文件时系统就会读取文件内容并将其加载到内存中,之后CPU从内存中取走并执行这些指令;
  • 同时还会存储一些运行时产生的临时数据。

文件描述符表

文件描述符表是一种类似于顺序表的数据结构。描述了进程持有的硬盘资源是啥样的。

每个进程都有一个自己的文件描述符表,通过文件描述符表可以知道当前程序关联了哪些文件都能操作那些文件。


PCB中还引用了一些属性,用来支持操作系统实现进程的调度。

进程的状态

就绪状态:进程时刻准备着去CPU上执行,也就是此时进程被CPU随叫随到,呼之即来挥之即去。

具体情况:

  • 进程正在CPU上执行;
  • 虽然此时进程没有在CPU上执行但时刻准备着去CPU执行

阻塞状态:当进程中某种执行条件不具备,而导致这个进程无法参与CPU的调度执行。比如程序在等待用户输入。

进程一共有 5 种状态,分别是创建、就绪、运行(执行)、终止、阻塞

进程的优先级

在操作系统中对多个进程进行调度时并非是一视同仁的,有些进程操作系统会给予更高的优先级。比如:当你打游戏时游戏的优先级就高于QQ。

  • 每个进程都有相应的优先级,优先级决定它何时运行和接收多少 CPU 时间
  • 进程的优先级可以动态变化,高优先级进程优先运行,优先级相同的进程按照时间片轮流运行

 

上下文

进程在从CPU离开之前需要保存现场,将当前CPU中的各种寄存器的状态都记录在内存中。等下次进程再回到CPU中执行时,就会将这些内存信息恢复回去让接着上次的继续执行。简单来说就是存档和读档。

记账信息

因为操作系统会通过进程优先级机制对不同优先级的进程分配不同的硬件资源。而这就有可能会导致某一个或几个进程占用了太多的资源而导致某一个或某几个进程因为分配不到资源而发生异常。

记账信息会记录当前进程所持有的CPU状况,而根据这些信息对资源进行动态的分配。


虚拟地址空间

早期的电脑并没有虚拟内存,那时操作系统为进程所分配的都是物理内存。

1b801f1995ab4c1dbd73c29c796be2ff.png

此时就会存在一些问题如果进程A在访问内存时发生了越界就有可能会更改进程B内存中的数据进而导致A和B两个进程都发生异常。

之后操作系统对内存进行了一层抽象,引入了“虚拟地址空间”的概念,此时操作系统分配的就不是真实的物理内存地址了而是分配的虚拟内存地址。

0c8a501778464c12a26d8da5bc56970d.png

 此时因为进程得不到真实的物理内存地址也就不会发生上述的,错误修改别的进程的内存的情况了。

但是此时又引入了一个新的问题:此时的进程与进程之间被完全的隔离了起来,之前如果两个进程之间想要实现通信就可以直接在对方的内存中进行修改,可是引入了虚拟内存之后因为无法得到真正的内存地址,所以就无法使用相同的方式进行修改。

此时进程之间的通信就需要借助一个额外的公共的内存空间进行实现:比如 A 在网上买了一台电脑,然后快递员将它送到菜鸟驿站,然后 A 再去菜鸟驿站拿到电脑。

其实此处的通信方式有很多种但整体的核心思想都是借助一个额外的公共的内存空间。


线程

此处利用工厂来举例线程和进程的关系:

此时 A 是一个工厂的老板现在他有一个工厂,但工厂里只有一条流水线 A 们每天可以赚到 100 块钱。

这时 A 想要每天赚 200 块钱那么他现在有两种解决方案,第一种再建一个工厂同样也只有一条流水线;第二种就是在旧工厂里面增加一条流水线。

这里的流水线就相当于线程;而工厂就相当于进程。

在JAVA中鼓励使用多线程而并不鼓励使用多进程的方式来实现并发编程。

上文提到过进程是系统分配内存的基本单位,而分配内存对于系统来说并不轻松所以导致:进程太重量,效率不高

  • 创建一个进程消耗的时间较多;
  • 销毁一个进程消耗的时间也较多;
  • 调度消耗的时间也多。

而线程是比较轻量的也叫 “轻量级进程” 。就像上面举的例子新建一个工厂肯定没有新加一条流水线省时省力。

虽然线程的创建,销毁,调度都较快但是线程却无法离开进程单独存在,也就是进程里面是包含线程的可以包含多个线程但至少要包含一个线程。

线程来负责执行代码,如果需要可以创建多个线程,每个线程都可以独立的执行一段代码,从而实现并发编程的效果。

线程是调度执行的基本单位。

而上文提到的PCB和线程是一一对应的,也就是说一个进程可以有多个PCB而每个PCB都对应一个线程。但是 pid,内存指针,文件描述符表 在同一个进程之间是公用的。也就是说除了第一个线程剩下的线程在创建时都不需要重新申请资源了。

线程也不是越多越好,因为工厂的大小是一定的,如果线程过多效率不但不会提高可能还会降低

线程的特点

  • 每个线程都可以单独去CPU上调度执行;
  • 同一个进程中的多个线程公用同一块内存空间,文件资源。

总结:

进程中包含线程(线程数至少为 1 )=> 每个PCB都对应一个线程 => 每个线程都有自己的状态,上下文,优先级,记账信息 => 每个线程都可以独立去CPU上调度执行 => 同一个进程中的多个线程公用同一块内存空间,文件资源 => 创建线程不需要重新申请资源 => 线程更轻量

  • 进程是资源分配的基本单位;
  • 线程是调度执行的基本单位。

进程和进程之间相互独立,一个进程挂了并不会影响其他的进程;而如果一个线程挂了如果没有妥善处理是会影响到其他线程的

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

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

相关文章

【数据结构与算法】二叉树的镜像实现

需求分析: 将所有节点的左子树与右子树交换,以达到交换前与交换后成为镜像的效果。 如图: 实现代码: 先准备一个二叉树具有节点类,添加左右子节点的方法和层序遍历方法。 /*** author CC* version 1.0* since2023/10…

数学术语之源——“齐次(homogeneity)”的含义

1. “homogeneous”的词源 “homogeneous”源自1640年代,来自中古拉丁词“homogeneus”,这个词又源自古希腊词“homogenes”,词义为“of the same kind(关于同一种类的)”,由“homos”(词义“same(相同的)”,参见“ho…

msvcr110dll是干嘛的,win系统提示缺少msvcr110.dll解决步骤分享

今天,要和大家探讨一个非常重要的话题——由于找不到msvcr110.dll无法执行代码的五种解决方案。首先,请允许我为大家简要介绍一下msvcr110.dll这个文件。 msvcr110.dll是Visual Studio 2012的一个动态链接库文件,它是Microsoft Visual C 2012…

如何报考产品总监认证(UCPD)?

从产品经理到产品总监,是我们职业生涯中锦鲤化龙的一次历程。中、高级管理人员所需要的知识和能力常常会泾渭分明,甚至大相迳庭。所以,当我们走向高级管理岗位前,尤其是有机会应聘大厂总监岗位时,我们需要一张产品总监…

ESP32网络开发实例-从SPIFFS加载Web页面文件

从SPIFFS加载Web页面文件 文章目录 从SPIFFS加载Web页面文件1、应用介绍2、软件准备3、硬件准备4、Web页面代码与SPIFFS文件系统上传4.1 Web页面代码实现4.2 Web页面代码上传5、Web服务器代码实现在文中,将展示如何构建一个 Web 服务器,为存储在 ESP32 的SPIFFS文件系统中的 …

sklearn处理离散变量的问题——以决策树为例

最近做项目遇到的数据集中,有许多高维类别特征。catboost是可以直接指定categorical_columns的【直接进行ordered TS编码】,但是XGboost和随机森林甚至决策树都没有这个接口。但是在学习决策树的时候(无论是ID3、C4.5还是CART)&am…

使用 GitHub Action 自动更新 Sealos 集群的应用镜像

在 IT 领域,自动化无疑已成为提高工作效率和减少人为错误的关键。Sealos 作为一个强大的云操作系统,已经为许多企业和开发者提供了稳定可靠的服务。与此同时,随着技术不断发展,集成更多的功能和服务变得尤为重要。考虑到这一点&am…

【学习笔记】项目进行过程中遇到有关composer的问题

composer.json内容详解 以项目中的composer.json为例,参考文档。 name:composer包名type:包的类型,project和library两种keywords:关键词,方便别人在安装时通过关键词检索(没试过,好…

成为一个黑客要多久?

一个暑假能成为黑客吗?资深白帽黑客告诉你答案,如果你想的是能到阿里五角大楼内网四处溜达,但是不可能的,但是成为一个初级黑客还是绰绰有余,你只需要掌握好渗透测试、外攻防、数据库等基本内容,搞懂外部安…

探索云原生技术之容器编排引擎-Kubernetes/K8S详解(9)

❤️作者简介:2022新星计划第三季云原生与云计算赛道Top5🏅、华为云享专家🏅、云原生领域潜力新星🏅 💛博客首页:C站个人主页🌞 💗作者目的:如有错误请指正,将…

volatile为什么无法保证原子性

假设定义 volatile int i 0; 现在2个线程同时 i,为什么数据还可能会出错?一起来看下图,虽然volatile的机制是:如果volatile修饰的变量有修改,那么会将变更内容写回主内存,同时让其他线程工作内存的该变量缓…

5、使用 pgAdmin4 图形化创建和连接 PostgreSQL 数据库

通过上几篇文章我们讲解了如何安装 PostgreSQL 数据库软件和 pgAdmin4 图形化管理工具。 接下来几篇文章我们将继续学习如何通过 pgAdmin4 管理工具图形化创建和连接 PostgreSQL 数据库。 今天这篇文章首先让我们来了解下什么数据库和数据库管理系统,对数据库和数…

nnunetv2训练报错 ValueError: mmap length is greater than file size

目录 报错解决办法 报错 笔者在使用 nnunetv2 进行 KiTS19肾脏肿瘤分割实验的训练步骤中 使用 2d 和3d_lowres 训练都没有问题 nnUNetv2_train 40 2d 0nnUNetv2_train 40 3d_lowres 0但是使用 3d_cascade_fullres 和 3d_fullres 训练 nnUNetv2_train 40 3d_cascade_fullres …

【C语言】atoi函数的模拟

atoi对于初学者来说大概率是一个陌生的函数 但不要害怕,我们可以通过各种网站去查询 例如: cplusplus就是一个很好的查询网站 目录 函数介绍模拟实现需要注意的点 函数介绍 我们发现这是一个将字符串转换为整形数字的函数 例如: int main()…

由论文写作到知识教育传承,智者善用,扶AIGC踏新程!

在学术领域中,诚信是不可动摇的基石。但是,令人震惊的事件发生了,竟有学术论文作者将ChatGPT上操作按钮的短语「Regenerate Response」毫无保留地援引到自己的论文中,更令人惊讶的是,审稿编辑竟然未能察觉这一事实&…

ESP32网络开发实例-从LittleFS加载Web页面文件

从LittleFS加载Web页面文件 文章目录 从LittleFS加载Web页面文件1、应用介绍2、软件准备3、硬件准备4、Web页面代码与LittleFS文件系统上传4.1 Web页面代码实现4.2 Web页面代码上传5、Web服务器代码实现在文中,将展示如何构建一个 Web 服务器,为存储在 ESP32 的LittleFS文件系…

大数据NoSQL数据库HBase集群部署

目录 1. 简介 2. 安装 1. HBase依赖Zookeeper、JDK、Hadoop(HDFS),请确保已经完成前面 2. 【node1执行】下载HBase安装包 3. 【node1执行】,修改配置文件,修改conf/hbase-env.sh文件 4. 【node1执行】&#xf…

怎么修改linux的root@后面的名称

文章目录 场景.登录服务器,root后面的名称是随机的,想自定义名称建议,直接使用命令执行需要重启机子 场景.登录服务器,root后面的名称是随机的,想自定义名称 建议,直接使用命令执行 hostnamectl set-hostname rdd-test重新连接即可生效,实际也是修改了/etc/hostname名称 需要…

高校教务系统密码加密逻辑及JS逆向——山东女子学院,蚌埠医学院,郑州工商学院,新疆大学,河南机电职业学院

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习,勿用于非法用途。 一、密码加…

2023年中国水电行业研究报告

第一章 行业概况 1.1 定义 水电行业是能源领域中的重要组成部分,它通过利用水资源来产生电能。这个行业的核心是通过构建水电站,利用水的势能和动能来驱动涡轮机,进而产生电力。水电技术是一种清洁、可再生的能源产生方式,对于降…