当前位置: 首页 > news >正文

操作系统之进程与线程的理解(一)

对进程的理解

        进程是可以并发执行的程序在某个数据集合上的运行过程,是系统进行资源分配调度的基本单位。进程由三部分组成,程序,数据和进程控制块(简称PCB)。简单的说,进程就是程序的一次执行

为确保进程安全可靠的并发执行引入了进程控制机制

原语是由若干条机器指令构成的并用以完成特定功能的一段程序,而且这段程序在执行期间不允许中断。原语作为一个状态不可分隔。确保并发执行状态下,系统核心数据的正确性。

什么时候需要创建进程呢

   1. 用户登录时, 由OS为合法终端创建一个进程                                                                                 2.调度到某个批处理作业时,由作业调度程序创建                                                                             3.运行程序请求提供服务(如:打印文件),由OS创建                                                                         4.运行中进程因自己的需要,由它自己创建子进程

        允许进程创建子进程,子进程可以继承父进程的所拥有的资源,从而形成树型进程家族。优点如下:

第一,资源分配严格。祖先拥有进程家族的所有资源,子进程可在祖先进程所拥有的资源中进行分配、使用与归还。
第二,进程控制灵活。可根据需要给予进程不同的控制权力,而且可根据需要创建第多个子进程并行工作,协同完成任务。
第三,进程层次清晰,关系明确,方便管理。

进程的创建方式

        进程的具体创建方式分为两种。一种是操作系统初始化,建立起一些常驻内存的系统进程;另一种是使用创建原语,用于创建非常驻内存系统进程和用户进程,具体过程如下:
第一步,创建一个空白PCB,分配一个唯一的进程标识符;
第二步,为新进程的程序和数据分配内存空间;
第三步,初始化进程控制块,填入处理机的状态信息和控制信息,如指令指针、栈指针、优先级等;
最后,设置相应的链接,将新进程PCB加到就绪队列的链表中。

进程状态转换相关原语
进程阻塞

        处于运行状态的进程,在其运行过程中期待某一事件发生,如请求系统服务、等待键盘输入等,主动调用阻塞原语(block)将自己阻塞,把CPU让给其他进程执行。
        阻塞原语执行时,使处于运行态的进程停止运行,将运行现场保存在其PCB的CPU现场保护区,然后将改进程的状态由运行态变为阻塞态,并将其PCB插入到相应等待事件的阻塞队列中。最后,转进程调度程序重新调度,将处理机分配给一个就绪进程,按新进程PCB中的处理机状态设置CPU环境,使它投入运行。

进程唤醒

        当被阻塞进程期待的事件到来时,由中断处理进程或其它产生该事件的进程调用唤醒原语(wakeup),将期待该事件的阻塞进程唤醒。如果该事件是等待I/O设备操作完成,则由硬件提出中断请求,在中断处理程序中寻找并唤醒阻塞进程。如果事件是等待某进程发一个信息,则由发送进程把该等待进程唤醒。
        在唤醒原语执行时,将被阻塞进程从相应等队列中移出,并将其PCB中的现行状态由阻塞改为就绪态,然后将该进程插入就绪队列中。

进程挂起

        当进程请求将自己挂起或父进程请求将子进程挂起时,调用挂起原语(suspend),将指定进程挂起。 
        挂起原语在执行过程,检查要挂起进程的状态,若处于活动就绪态就将其改为静止就绪态,对于活动阻塞态的进程则将其改为静止阻塞态。如果被挂起的进程正在执行则还要转到调度程序重新调度。

进程激活

        要激活指定进程,调用激活原语(active)将它激活。在执行过程,将要激活的进程调入内存,并检查它的状态,若是静止就绪态则将其改为活动就绪态,若为静止阻塞态就将其改为活动阻塞态。如果采用的是抢占调度策略,被激活的进程优先级高则引起重新调度。

通常在以下情况需要终止一个进程
第一 正常结束。在批处理系统中,进程已运行完成遇到Halt指令,或分时系统中,用户退出登录,需要结束当前进程。
第二 异常结束。当前进程发生出错和故障事件,如内存越界、写只读文件、算术运算错、运行超时等,由于无法继续执行,需要结束当前进程。
第三 外界干预。在操作系统干预、父进程请求、父进程终止等情况下,也需要结束当前进程。

进程中止

        一旦发生上述终止进程的事件,OS便调用撤消原语终止当前进程,具体过程如下:
        首先若进程处于执行态, 应立即终止该进程的执行,并置调度标志为真;若有子孙进程则将其全部终止,以防它们失控,然后将该进程所占有的全部资源还给父进程或系统;将该进程的PCB从所在队列中移出,回收PCB

创建进程属于一种机制                                                                                                                    top指令可以查看进程的动态情况                                                                                                    一个进程一旦创建就可以为其分配cpu,并运行

        由于进程是资源拥有者,创建、撤消与切换存在较大的时空开销,因此需要引入轻型进程;二是由于对称多处理机(SMP)出现,可以满足多个运行单位,而多个进程并行开销过大。
因此在80年代,出现了能独立运行的基本单位——线程(Threads)。

对线程的理解

为什么要引入线程

        由于进程是资源的拥有者,所以在创建、撤销、切换操作中需要较大的时空开销,限制了并发程度的进一步提高。为减少进程切换的开销,把进程作为资源分配单位调度单位这两个属性分开处理,即进程还是作为资源分配的基本单位,但是不作为调度的基本单位(很少调度或切换),把调度执行与切换的责任交给“线程”。这样做的好处不但可以提高系统的并发度,还能适应新的对称多处理机(SMP)环境的运行,充分发挥其性能。

        即:占用较少的资源系统/同一进程内的线程共享内存和文件/提高应用程序的性能/使用多处理机效率更高/改善程序的结构

什么是线程

        线程是OS调度和分派基本单位,被包含在进程中,一条线程指的是进程内一个执行单元。它的特点:进程轻,进程的实体是程序,线程的实体是函数,共享进程的资源,进程中的多个线程可并发执行,还可以独立调度,拥有很少的资源

        进程和线程几乎共享所有的资源,包括代码,数据,进程空间,打开的文件等,线程只拥有自己的寄存器和栈,因此,线程非常轻量级,线程之间切换时,系统的开销小,并发度高。

进程线程
组成程序+数据+PCB函数+数据+TCB(线程控制块)
基本单位资源分配和独立调度的单位仅仅是独立调度的单位
并发性多个进程可并发执行,并发度低多个线程可并发执行,并发度高
共享资源每个进程拥有自己的资源线程共享其所在进程的资源

(1)线程是进程的一个组成部分。每个进程创建时通常只有一个线程,需要时可创建其他线程。
(2) 进程的多线程都在进程的地址空间活动。
(3) 资源是分给进程的,不是分给线程的。线程在执行中需要资源时,可共享基础的资源,每个线程只拥有少量寄存器和独立的栈,这是其独立执行环境的必要条件。
(4) 处理机调度的基本单位是线程,线程之间竞争处理机。真正在CPU上运行的是线程。
(5) 线程在执行时,如果有共享资源,就需要同步。

线程的实现方式为用户级线程/内核级线程/两者结合

线程的分类
用户级线程

        仅存在于用户空间中,由应用程序通过线程库完成所有线程的管理;内核不知道线程的存在,线程切换不需要内核特权;内核管理含线程的进程的活动,但不管理线程;当用户级线程调用系统调用时,整个进程阻塞。

内核级线程

        所有线程管理由内核完成;内核维护进程和线程的上下文;线程之间的切换需要内核支持;以线程为基础进行调度。

线程模型
多对一关系

        将多个用户级线程映射到一个内核级线程。

一对一关系

        一个用户级线程映射到一个内核级线程。

多对多关系

        任意数量N的用户线程到相等或者小于N的内核线程的多路复用。

内存地址空间是进程级别的资源,由进程统一管理和拥有

问题:进程和线程到底共亨哪些资源,哪些不能共享?
答:共享的资源有:地址空间,打开的文件描述符,信号处理函数,全局变量。不共享的资源有:线程ID,寄存器状态,栈空间等。

cpu通过PSW(程序状态字)进行标识,X86的PSW有2位二进制:00系统态,11用户态

用户态—内核态

系统调用/设备中断/异常

内核态—用户态

直接设置程序状态字PSW

相关文章:

操作系统之进程与线程的理解(一)

对进程的理解 进程是可以并发执行的程序在某个数据集合上的运行过程,是系统进行资源分配和调度的基本单位。进程由三部分组成,程序,数据和进程控制块(简称PCB)。简单的说,进程就是程序的一次执行 为确保进…...

JS 箭头函数

只能用于声明函数表达式更简洁。替代匿名函数 设置取消点击事件的默认行为 在这里插入图片描述...

Mb,Kb,byte,bits

1MB1024KB; 1KB1024byte(字节); 1byte8bits(位); 小蓝准备用 256MB 的内存空间开一个数组,数组的每个元素都是 32 位 二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间&#xf…...

x265 中 aqMode 和 hevcAq 的深度解析与应用技巧

aqMode 和 hevcAq 介绍 在 x265 中基本继承了 x264 中 aqmode 的思想,此外还引入了 hevcAq 算法工具,在 x265_param 结构体中有这两个参数变量开关相关解释。从声明注释可以理解,aqMode 和 x264 中 aqmode 的思想完全相似,也扩展了些功能,属于通用型自适应量化方法,基于 …...

(一)基于云平台微调大模型,以deepseek-coder-6.7b为例

一、租借rtx4090卡并创建示例 如下图,我们进入jupyter界面,然后创建笔记本 二、提前下载好模型到本地 为了节省时间,我们需要提前下好模型deepseek-ai/deepseek-coder-6.7b-instruct,然后再上传到autodl上直接本地加载。 下载方…...

【Docker基础】全面解析 Docker 镜像:构建、使用与管理

文章目录 一、Docker 镜像(Docker Image)详解1.1 Docker 镜像的结构1.2 Docker 镜像的每一层(Layer)1.3 镜像的构建过程1.4 镜像的使用1.5 镜像的优势 二、为什么需要镜像三、镜像命令3.1 命令清单3.2 详细解释 四、docker 操作案…...

3. git config

文章目录 基本概述配置级别基本用法设置配置项查看配置项删除配置项 常用配置项 基本概述 git config 的作用是:设置用户信息、编辑器、别名、仓库行为等。 配置级别 级别作用范围配置文件路径命令选项仓库级别(Local)当前仓库.git/config…...

docker 运行自定义化的服务-前端

运行自定义化的前端服务 具体如下: ①打包前端项目,形成dist包 ②编写dockerfile文件,文件内容如下: # 基础镜像(镜像名:版本号TAG) FROM nginx:1.0 # 镜像作者和相关元数据 LABEL maintainer"Atb" \version"1.0…...

error: RPC failed; HTTP 408 curl 22 The requested URL returned error: 408

在git push时报错:error: RPC failed; HTTP 408 curl 22 The requested URL returned error: 408 原因:可能是推送的文件太大,要么是缓存不够,要么是网络不行。 解决方法: 将本地 http.postBuffer 数值调整到500MB&…...

JMH 基准测试实战:Java 性能对比的正确打开方式!

📖 摘要 在Java开发中,我们经常需要比较不同实现方式的性能差异。但如何科学、准确地进行性能测试呢?本文将带你深入理解JMH(Java Microbenchmark Harness)工具,通过实战演示如何正确编写和运行基准测试&a…...

etf可以T+0交易吗?

在我国的A股市场中,部分ETF基金支持T0交易,这为投资者提供了更灵活的交易策略。 支持T0交易的ETF基金类型包括: 货币型ETF:主要投资于货币市场工具,如短期债券和银行存款,具有较高的流动性。 债券型ETF&…...

解决问题:Vscode 自动更新不匹配远程服务器版本

避免自动更新: 1. 打开:文件 - 首选项 - 设置 - 应用程序 - 更新; 2. 设置下列选项: 如果已自动更新,如何回退至原有的历史版本 : 去官网下载所需的历史版本,然后直接按流程安装,…...

【Leetcode-Hot100】盛最多水的容器

题目 解答 目的是求面积最大,面积是由两个下标和对应的最小值得到,因此唯一的问题就是如何遍历这两个下标。我采用begin和end两个变量,确保begin是小于end的,使用它们二者求面积,代码如下: 很不幸 出错了…...

FFMEPG常见命令查询

基本参数 表格1:主要参数 参数说明-i设定输入流-f设定输出格式(format) 高于后缀名-ss开始时间-t时间长度codec编解码 表格2:音频参数 参数说明-aframes设置要输出的音频帧数-f音频帧深度-b:a音频码率-ar设定采样率-ac设定声音的Channel数-acodec设定…...

欢迎来到 Codigger Store:Boby周边专区

亲爱的 Codigger 用户们,感谢你们一直以来的支持与热爱!你们的每一次代码跳跃、每一次项目成功,都离不开你们对编程的热情和对 Codigger 的信任。为了回馈大家的厚爱,我们在 Codigger Store 中特别开设了 Boby 周边专区&#xff0…...

决策树模型

决策树(TDS) 注意1:决策树有很多种算法,比如:ID3算法,C4.5算法,CART算法,这三个算法的区别是选择最优划分属性的方法不同,第一个是根据信息增益来选;第二个是找出信息增益高于平均水…...

解锁深度学习激活函数

在深度学习的广袤天地里,激活函数宛如隐匿于神经网络架构中的神奇密码,掌控着模型学习与表达的关键力量。今天,就让我们一同深入探究这些激活函数的奇妙世界,揭开它们神秘的面纱。 一、激活函数为何不可或缺? 想象一…...

Kubernetes 深入浅出系列 | 容器剖析之容器安全

目录 1、容器真的需要privileged权限吗?一、什么是 --privileged 权限?二、privileged 的风险到底有多大?三、常见需求场景及更安全的替代方式四、如何判断容器是否真正需要特权? 2、不以 Root 用户运行容器,真的更安全吗&#x…...

Spring Boot应用中可能出现的Full GC问题

Full GC的原理与触发条件 原理 标记-清除:首先遍历所有对象,标记可达的对象,然后清除不可达的对象。复制算法:将内存分为两部分,每次只使用其中一部分。当这部分内存用完时,将存活的对象复制到另一部分&a…...

Maven 的安装与配置(IDEA)

2025/4/9 向 一、什么是Maven Maven 是一个基于项目对象模型(Project Object Model,POM)概念的项目构建工具(所以就是一个工具),它主要用于自动化项目的构建过程,包括编译、测试、打包、部署等…...

软考中级-软件设计师 2022年下半年上午题真题解析:通关秘籍+避坑指南

📚 目录(快速跳转) 选择题(上午题)(每题1分,共75分)一、 计算机系统基础知识 🖥️💻 题目1:计算机硬件基础知识 - RISC(精简指令集计算…...

全栈开发套件Telerik DevCraft——赋能现代化应用构建

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库,加快开发速度。Telerik DevCraft提供完整的工具箱,用于构建现代和面向未来的业务应用程序,目前提供UI for ASP.NET MVC、Kendo…...

Windows + vmware + ubuntu+docker + docker-android实现Android模拟器构建和启动

文章目录 引言编译启动过程玩下adb最后 引言 Windows vmware ubuntudockerdocker-android实现Android模拟器启动 编译启动过程 #下载docker-android git clone https://github.com/budtmo/docker-android.gitmaqiubuntu:~/docker-android$ git remote -v origin https://…...

远程团队协作效率低,如何优化

在远程工作的环境中,团队协作效率低下成为许多企业面临的一大挑战。随着全球化和技术进步,远程团队的出现成为企业的常态,但由于沟通不畅、任务管理不明确、缺乏团队凝聚力等问题,往往会影响团队的整体效率。为了优化远程团队的协…...

Oracle 19C 通过 ODBC 连接 SQL Server 数据库指南 (Red Hat 7)

前言 本指南详细说明如何在 Red Hat Enterprise Linux 7 系统上配置 Oracle 19C 通过 ODBC 连接 SQL Server 数据库。这种异构数据库连接方式称为 Oracle Heterogeneous Services,允许 Oracle 数据库直接访问非 Oracle 数据源。 系统要求 操作系统:Red Hat Enterprise Linu…...

【MYSQL从入门到精通】数据类型及建表

一些基础操作语句 1.使用客户端工具连接数据库服务器:mysql -uroot -p 2.查看所有数据库:show databases; 3.创建属于自己的数据库: create database 数据库名;create database if not exists 数据库名; 强烈建议大家在建立数据库时指定编…...

鸿蒙开发中的并发与多线程

文章目录 前言异步并发 (Promise和async/await)多线程并发并发能力选择耗时任务并发执行场景常见业务场景 常驻任务并发执行场景常见业务场景 传统共享内存并发业务长时任务并发执行场景常见业务场景 并发任务管理线程间通信同语言线程间通信(ArkTS内)线…...

ruby self

在 Ruby 中,self 是一个指向当前对象的特殊变量,它的值根据代码的上下文动态变化。理解 self 的指向是掌握 Ruby 面向对象编程的关键。以下是详细解析: 一、self 的核心规则 self 始终指向当前方法的执行者(即调用方法的对象&…...

Kotlin 学习-集合

/*** kotlin 集合* List:是一个有序列表,可通过索引(下标)访问元素。元素可以在list中出现多次、元素可重复* Set:是元素唯一的集合。一般来说 set中的元素顺序并不重要、无序集合* Map:(字典)是一组键值对。键是唯一的…...

封装方法的辨析

equals //字符串 str1.equals(str2); //list的两个实现类 list1.equals(list2); //map的两个实现类 //比较所有的键值对是否相同 map1.equals(map2); //数组(包括string类型) //比较内容是否相同 Arrays.equals(array1, array2); contains 基本都有…...

解决 IntelliJ IDEA 中 Maven 项目左侧项目视图未显示顶层目录问题的详细步骤说明

以下是解决 IntelliJ IDEA 中 Maven 项目左侧项目视图未显示顶层目录问题的详细步骤说明: 1. 切换项目视图模式 默认情况下,IDEA 的项目视图可能处于 Packages 模式,仅显示代码包结构,而非物理目录。 操作步骤: 点击…...

CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析

当前的CMIP6计划相较于前代模型,在空间分辨率、物理过程表达和地球系统组件耦合等方面均有显著提升。 一:气候变化研究的AI新视角 1、气候模型基础与全球气候模型(GCM) 全球气候(环流)模型的基本原理、发…...

如何精准控制大模型的推理深度

论文标题 ThinkEdit: Interpretable Weight Editing to Mitigate Overly Short Thinking in Reasoning Models 论文地址 https://arxiv.org/pdf/2503.22048 代码地址 https://github.com/Trustworthy-ML-Lab/ThinkEdit 作者背景 加州大学圣迭戈分校 动机 链式推理能显…...

1. Git 下载和安装

文章目录 Git 下载Git 安装(以windows为例)Git 使用(以windows为例) Git 下载 1.进 Git 官网 https://git-scm.com/downloads 2.选择对应的操作系统 3.选择对应的操作系统位数 Git 安装(以windows为例)…...

git回滚指定版本并操作

你可以通过以下步骤切换到第三个版本。根据你的需求,有两种主要方法: 方法 1:临时查看第三个版本(不修改当前分支) 适用于仅查看或测试旧版本,不保留后续修改: 找到第三个版本的提交哈希&#…...

FastAdmin和thinkPHP学习文档

介绍 - FastAdmin框架文档 - FastAdmin开发文档https://doc.fastadmin.net/doc目录结构 ThinkPHP5.0完全开发手册 看云ThinkPHP V5.0是一个为API开发而设计的高性能框架——是一个颠覆和重构版本,采用全新的架构思想,引入了很多的PHP新特性&#xff0c…...

通过HTTP协议实现Git免密操作的解决方案

工作中会遇到这样的问题的。 通过HTTP协议实现Git免密操作的解决方案 方法一:启用全局凭据存储(推荐) 配置凭证存储‌ 执行以下命令,让Git永久保存账号密码(首次操作后生效): git config --g…...

git 查看某一文件夹下所有文件 修改记录

git: 如何查询某个文件或者某个目录的更新历史_git 查看指定文件夹的记录-CSDN博客 git log --follow path/to/your/file git log -p --follow path/to/your/file git log --stat --follow path/to/your/file这是最常用的方法,可以显示指定文件的所有提交历史…...

测试(一)

软件的生命周期: 需求分析——计划——设计——编码——测试——运行维护 常见的开发模型: 瀑布模型: 最基本的开发模型,绝大多数开发模型的基本框架。 特点:线性的开发流程 使用场景:需求固定&#xff…...

解决华硕主板Z890m下载ubuntu20.04后没有以太网问题

问题描述: 华硕主板Z890m下载双系统ubuntu20.04后,发现ubuntu不能打开以太网。 问题原因: 华硕主板的网卡驱动是r8125,而ubuntu20.04的驱动版本是r8169,所以是网卡驱动不匹配造成 解决方案 开机界面按下F2进入BOIS模式&#…...

从零推导飞机小扰动运动线性方程——0. 学习目录

第0期文章——学习目录 如图,本专栏将连载以下学习内容,带你从零开始学习飞机小扰动方程!...

Agentic AI 干货!DeepSeek + OpenAI SDK 构建 Agent 实战

引言: DeepSeek-R1、OpenAI-o1 等具备内化的假设、反思、验证等优秀推理能力的 LLM 大型推理模型将 AI 发展推进到智能体 AI 时代,将使 AI Agent 迸发出远超上一代由外化的手搓式简单推理 Agent 不可比拟的发展势能。 在 GTC2025 大会上,英伟…...

【语法】C++的list

目录 为什么会有list? 迭代器失效: list和vector的迭代器不同的地方: list的大部分用法和vector都很像,例如push_back,构造,析构,赋值重载这些就不再废话了,本篇主要讲的是和vecto…...

Java接口性能优化面试问题集锦:高频考点与深度解析

1. 如何定位接口性能瓶颈?常用哪些工具? 考察点:性能分析工具的使用与问题定位能力。 核心答案: 工具:Arthas(在线诊断)、JProfiler(内存与CPU分析)、VisualVM、Prometh…...

基于STM32与应变片的协作机械臂力反馈控制系统设计与实现---5.2 工业机械臂系统性能测试全方案(专业工程级)

5.2 工业机械臂系统性能测试全方案(专业工程级) 一、测试体系架构设计 1.1 三级测试体系 #mermaid-svg-A55VxjZ7ENKNWAli {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-A55VxjZ7ENKNWAli .error-icon{fill:#55…...

VM——相机拍照失败

1、问题:相机频闪触发,在MVS中正常出图,在VM中出现拍照失败 2、解决: 1、首先排查网络设置(巨帧是否设置) 2、电脑的所有防火墙是否关闭 3、在MVS中恢复相机的设置参数为默认参数,删除VM中的全…...

图解力扣回溯及剪枝问题的模板应用

文章目录 选哪个的问题17. 电话号码的字母组合题目描述解题代码图解复杂度 选不选的问题78. 子集题目描述解题代码图解复杂度 两相转化77. 组合题目描述解题代码法一:按选哪个的思路法二:按选不选的思路 图解选哪个:选不选 复杂度 选哪个的问…...

Trae + LangGPT 生成结构化 Prompt

Trae LangGPT 生成结构化 Prompt 0. 引言1. 安装 Trae2. 克隆 LangGPT3. Trae 和 LangGPT 联动4. 集成到 Dify 中 0. 引言 Github 上 LangGPT 这个项目,主要向我们介绍了写结构化Prompt的一些方法和示例,我们怎么直接使用这个项目,辅助我们…...

模糊测试究竟在干什么

目录 1.软件漏洞和缺陷 2.模糊测试与传统测试 3.汽车领域中的模糊测试 4.常见工具总结 1.软件漏洞和缺陷 提单、上票、拒收,这是开发和测试的日常博弈。大多数时候,我们是根据自己对需求的理解来进行开发和测试,这基本是属于功能层级。 …...

【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制

【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制 一,文档简介二,PWMTRGMUXPDBADC 2ch 软件配置与实现2.1 软硬件版本平台2.2 MCAL工程以及模块配置2.2.1 Dio 模块配置2.2.2 Adc模块配置2.2.3 Mcu模块配置2.2.4 Platform模块配置2.2.5 Port模块配置2.2.6…...