操作系统:进程、线程与作业
背景介绍:
因为单道程序处理器效率低 、设备利用率低 、内存利用率低的问题人们提出了多道程序设计来解决这个问题。

多道程序致力于提高处理机、设备、内存等各种资源的利用率,从而提高系统效率,也就是吞吐量,吞吐量定义为单位时间系统所处理的作业数量。

但多道程序设计也面临着一些问题,如何给各个程序分配处理器(处理器资源管理问题),如何给多个程序分配内存空间(内存资源管理问题),如何给多个程序分配设备,竞争怎么办(设备资源管理问题)。
1、进程
进程概念:
进程是可参与并发执行的程序,它是具有一定独立功能的程序关于一个数据集合的一次运行活动。
进程状态:
运行态(RUN):占有CPU正在向前推进。
就绪态(READY):具备运行条件,但未得到CPU。
等待态/挂起态(WAIT):不具备运行条件,等待某一事件发生。


进程组成:
进程由进程控制块和程序组成,程序包括代码和数据。
进程控制块:
标志进程存在的数据结构,其中保存系统管理进程所需的全部信息 。
| 名称 | 解释 |
|---|---|
| 进程标识 | 用于唯一地标识一个进程,整数 |
| 用户标识 | 用于标识运行进程的用户,整数 |
| 进程状态 | 就绪等待运行之间转换 |
| 调度参数 | 用于确定要调度的下一个进程 |
| 现场信息 | 保存进程暂停的断点信息 |
| 家族联系 | 记载父进程 |
| 程序地址 | 记载进程所对应的程序的存储位置和大小 |
| 当前打开文件 | 记载进程正在使用的文件 |
| 消息队列指针 | 接收到消息所构成的的消息队列的链头 |
| 资源使用情况 | 记载进程生存期所使用的系统资源和使用时间 |
| 进程队列指针 | 用于构建进程控制块队列,指向下一个进程控制块,它是系统管理进程所需要的。 |
程序(进程映像):
程序包括代码和数据。
进程的表示:
整体性,将代码和数据看成一个整体,代码可共享性则相反。

进程上下文:
进程的物理实体与支持进程运行的系统物理环境统称为进程上下文。
物理实体:进程控制块PCB+程序
系统环境:地址空间,系统栈,打开文件表,…
由一个进程的上下文转到另外一个进程的上下文,被称为上下文切换。
运行操作系统程序完成系统管理工作所花费的时间和空间叫作系统开销。
进程队列:

就绪队列:系统一个或若干个(根据调度算法或系统确定) 。
等待队列:每个等待事件一个等待队列,例如:需要IO读写数据,会进入IO等待队列。
运行队列:每个处理机CPU一个运行队列,每个运行队列中只有一个进程,指向队列头部的指针称为运行指示字。

进程类型:
系统进程(守护进程daemon): 运行操作系统程序,完成系统管理(服务)功能。完成的任务相对独立和具体,在生存周期不变,通常对应一个无限循环程序,系统启动后一直存在,直到系统关闭。运行于管态。
用户进程:运行用户(应用)程序,为用户服务。 在操作系统之上运行的所有应用程序称为用户进程,运行于目态。
进程特征:

进程间相互联系:
相关进程: 同一家族的进程 可以共享文件,需要相互通讯,协调推进速度。父进程可以监视子进程,子进程完成父进程交给的任务。
无关进程:没有逻辑关系、同时执行的进程。有资源竞争关系,互斥、死锁。
进程间相互作用:
直接相互作用:发生在相关进程之间,不需要通过媒介而发生的相互作用。

间接相互作用:发生在任何进程之间,需要通过媒介而发生的相互作用 。

进程与程序的联系:
1、进程包括一个程序
2、进程存在的目的就是执行这个程序
进程与程序的差别:
1、程序静态,进程动态。
2、程序可长期保存,进程有生存期。
3、一个程序可对应多个进程,一个进程只能执行一个程序 。
2、线程
线程概念:
线程又称轻进程,是进程中一个相对独立的执行流。 一个进程可包含多个线程,这些线程执行流。一般认为进程是资源的分配单位,线程是CPU的调度单位。
线程优点:
上下文切换速度快(包括程序和数据在内的地址空间不变)
系统开销小:创建线程
通讯容易(共享数据空间)
线程结构:
以下是多进程的结构:

对比进程里的多线程结构,线程拥有自己的寄存器和用户栈,并且共享动态堆,静态数据和程序代码。

因为线程也是并发执行的,所以线程也需要管理,从而诞生了类似PCB的数据结构TCB,也就是线程控制块。
线程控制块:
它是标志线程存在的数据结构, 其中包含对线程管理需要的全部信息。
| 名称 | 解释 |
|---|---|
| 线程标识 | 用于唯一的标识线程,整数 |
| 线程状态 | 用于标识运行进程的用户,整数 |
| 调度参数 | 用于确定要调度的下一个线程。 |
| 现场信息 | 通用寄存器,指令计数器PC,用户栈指针SP,系统栈指针(系统级别线程) |
| 链接指针 | 管理线程队列 |
线程的实现:
线程有二种实现方法:
1、位于目态的用户级别线程 (系统不可见)
2、位于管态的核心级别线程(用户不可见)。
除此之外还可以使用混合线程(轻进程(用户和系统都可见的实体)建立用户级线程与系统级线程之间的联系)
用户级别线程 :
实现方法:
-- 基于库函数,系统不可见。
-- 线程创建、撤销、状态转换由库函数在目态完成。
-- TCB在用户空间,因此系统调度以进程为单位,每个进程一个系统栈。
优点:
-- 不依赖于操作系统,调度灵活。
-- 同一进程中的线程切换不需进入OS,切换速度快 。
缺点:
-- 同一进程中多个线程不能真正并行。
-- 由于调度在进程级别,一个线程进入OS等待,进程中其它线程不能执行。
对于这种线程的状态:只要一个线程处于运行态,则该进程处于运行态,一个线程处于就绪态,且其他线程均不处于运行态,则进程处于就绪态,所有线程处于等待态,则该进程处于等待态。
核心级别线程:
实现方法:
— 基于系统调用由OS创建 创建、撤销、状态转换由操作系统完成
— TCB保存在OS空间,线程是CPU调度的基本单位,每个线程一个核心栈
优点:
— 多cpu环境中,同一进程内多线程可以并行执行
一 一个线程进入核心等待,其它线程仍可执行
缺点:
— 系统开销大,同一进程内多线程切换需进入OS,速度慢
混合线程:
用户级别线程ULT、核心级别线程KLT、轻线程LWP
混合线程是将ULT与轻线程绑定起来,通过轻线程将ULT和KLT联系起来,从而使得ULT可以和核心通信。ULT与LWP可以是一对一关系,也可以是多对多关系。但KLT与LWP是一对一关系。在混合线程模式下,一个进程至少包含一个LWP。

线程的应用:
采用多线程的条件:同一进程中的多个线程具 有相同的代码和数据,这些线程之间或者是合 作的(执行代码的不同部分),或者是同构的 (执行相同的代码)
例子:
Word字处理(不同代码) 交互编辑(T1) 词法检查(T2) 定时保存(T3)
HTTP server(相同代码) 对每个http请求,pop up一个线程
3、作业
作业概念:
定义:用户要求计算机系统为其完成的计算任务集合。
作业步:
作业处理过程中一个相对独立的步骤 ,一般一个作业步可由一个进程完成,某些作业步之间可以并行。作业与进程具有一对多的关系。
作业分类:
有两种作业类别,一种是批处理作业,另一种是交互式作业。
相关文章:
操作系统:进程、线程与作业
背景介绍: 因为单道程序处理器效率低 、设备利用率低 、内存利用率低的问题人们提出了多道程序设计来解决这个问题。 多道程序致力于提高处理机、设备、内存等各种资源的利用率,从而提高系统效率,也就是吞吐量,吞吐量定义为单位时…...
先验地图--slam学习笔记
先验信息 (Prior Information) 先验信息指的是在收集新数据之前已有的知识或假设。这种信息可以来自之前的实验、历史数据、理论模型或专家意见。 地图信息:在无人驾驶中,车辆通常会预先加载高精度地图数据,这些地图数据提供了道路布局、车…...
空指针异常:软件开发中的隐形陷阱
在软件开发的世界里,bug如同隐藏在代码森林中的小怪兽,不时跳出来给开发者们制造惊喜(或惊吓)。其中,空指针异常(Null Pointer Exception, NPE)无疑是最令人头疼的一类。它悄无声息,…...
【Java从入门到放弃 之 GC】
垃圾回收 垃圾回收什么是垃圾引用计数法可达性分析算法 垃圾回收算法标记清除法标记复制法标记整理法分代 常用的垃圾回收器 垃圾回收 如果你学过C,你肯定知道,我们没申请一块内存,都要自己写回收内存的方法。而Java不需要我们管理内存&…...
【C++】等差数列末项计算题解析及优化
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述与输入输出要求💯数学分析与公式推导公差的计算通项公式推导 💯示例解析解题步骤 💯程序实现与解析初版代码代码解析优点与不足…...
vue中父组件接收子组件的多个参数的方法:$emit或事件总线
方法一:使用 $emit 方法 原理 子组件通过 $emit 方法向父组件发送事件,同时可以传递多个参数,父组件通过事件监听来接收这些参数。 示例 子组件代码 <template><div><button click"sendData">发送数据</…...
2024.12.10——攻防世界Web_php_include
知识点:代码审计 文件包含 伪协议 伪协议知识点补充: 在PHP中,伪协议(Pseudo Protocols)也被称为流包装器,这些伪协议以 php://开头,后面跟着一些参数,用于指定要执行的操作或需要…...
【机器学习算法】——数据可视化
1. 饼图:显示基本比例关系 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False# ——————————————————————————————————————————————————————…...
如何在 Android 项目中实现跨库传值
背景介绍 在一个复杂的 Android 项目中,我们通常会有多个库(lib),而主应用程序(app)依赖所有这些库。目前遇到的问题是,在这些库中,libAd 需要获取 libVip 的 VIP 等级状态…...
JavaCV之FFmpegFrameFilter视频转灰度
1、代码 package com.example.demo.ffpemg;import lombok.SneakyThrows; import org.bytedeco.javacv.*;public class FFmpegFrameFilterVideoExample {SneakyThrowspublic static void main(String[] args) {// 输入视频文件路径String inputVideoPath "f:/2222.mp4&qu…...
Redis:基于PubSub(发布/订阅)、Stream流实现消息队列
Redis - PubSub、Stream流 文章目录 Redis - PubSub、Stream流1.基于List的消息队列2.基于PubSub的消息队列3.基于Stream的消息队列1.Redis Streams简介2.Redis Streams基本命令1.XADD 添加消息到末尾2.XLEN 获取消息长度3.XREAD 读取消息 (单消费模式)4…...
C#飞行棋(新手简洁版)
我们要在主函数的顶部写一些全局静态字段 确保能在后续的静态方法中能够获取到这些值和修改 static int[] Maps new int[100];static string[] PlayerName new string[2];static int[] PlayerScore new int[2];static bool[] Flags new bool[2] {true,true }; static int[]…...
【OpenCV】图像转换
理论 傅立叶变换用于分析各种滤波器的频率特性。对于图像,使用 2D离散傅里叶变换(DFT) 查找频域。快速算法称为 快速傅立叶变换(FFT) 用于计算DFT。 Numpy中的傅立叶变换 首先,我们将看到如何使用Numpy查…...
力扣 重排链表-143
重排链表-143 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next)…...
【Kubernetes理论篇】容器集群管理系统Kubernetes(K8S)
Kubernetes集群部署基本管理实战 这么好的机会,还在等什么! 01、Kubernetes 概述 K8S是什么 K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,写”。不如整个缩写 K8s 作为缩写的结果…...
Kubernetes 常用操作大全:全面掌握 K8s 基础与进阶命令
Kubernetes(简称 K8s)作为一种开源的容器编排工具,已经成为现代分布式系统中的标准。它的强大之处在于能够自动化应用程序的部署、扩展和管理。在使用 Kubernetes 的过程中,熟悉常用操作对于高效地管理集群资源至关重要。本文将详…...
爬虫基础之Web网页基础
网页的组成 网页可以分为三大部分–HTML、CSS 和 JavaScript。如果把网页比作一个人,那么 HTML 相当于骨架、JavaScript 相当于肌肉、CSS 相当于皮肤,这三者结合起来才能形成一个完善的网页。下面我们分别介绍一下这三部分的功能。 HTML HTML(Hypertext…...
k8s, deployment
控制循环(control loop) for {实际状态 : 获取集群中对象X的实际状态(Actual State)期望状态 : 获取集群中对象X的期望状态(Desired State)if 实际状态 期望状态{什么都不做} else {执行编排动作…...
使用ensp搭建OSPF+BGP和静态路由,底层PC使用dhcp,实现PC互通
1.4种方式,实现PC2可以互通底层的所有设备 OSPF:OSPF是一种用于互联网协议网络的链路状态路由协议 BGP:是一种用于互联网上进行路由和可达性信息传递的外部网关协议(EGP) 静态路由: 静态路由是一种路由方…...
TÜLU 3: Pushing Frontiers in Open Language Model Post-Training
基本信息 📝 原文链接: https://arxiv.org/abs/2411.15124👥 作者: Nathan Lambert, Jacob Morrison, Valentina Pyatkin, Shengyi Huang, Hamish Ivison, Faeze Brahman, Lester James V. Miranda, Alisa Liu, Nouha Dziri, Shane Lyu, Yuling Gu, Sau…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
