操作系统:进程、线程与作业
背景介绍:
因为单道程序处理器效率低 、设备利用率低 、内存利用率低的问题人们提出了多道程序设计来解决这个问题。
多道程序致力于提高处理机、设备、内存等各种资源的利用率,从而提高系统效率,也就是吞吐量,吞吐量定义为单位时间系统所处理的作业数量。
但多道程序设计也面临着一些问题,如何给各个程序分配处理器(处理器资源管理问题),如何给多个程序分配内存空间(内存资源管理问题),如何给多个程序分配设备,竞争怎么办(设备资源管理问题)。
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…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...