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

操作系统:进程、线程与作业

背景介绍:

        因为单道程序处理器效率低 、设备利用率低 、内存利用率低的问题人们提出了多道程序设计来解决这个问题。

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

         但多道程序设计也面临着一些问题,如何给各个程序分配处理器(处理器资源管理问题),如何给多个程序分配内存空间(内存资源管理问题),如何给多个程序分配设备,竞争怎么办(设备资源管理问题)。

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或事件总线

方法一&#xff1a;使用 $emit 方法 原理 子组件通过 $emit 方法向父组件发送事件&#xff0c;同时可以传递多个参数&#xff0c;父组件通过事件监听来接收这些参数。 示例 子组件代码 <template><div><button click"sendData">发送数据</…...

2024.12.10——攻防世界Web_php_include

知识点&#xff1a;代码审计 文件包含 伪协议 伪协议知识点补充&#xff1a; 在PHP中&#xff0c;伪协议&#xff08;Pseudo Protocols&#xff09;也被称为流包装器&#xff0c;这些伪协议以 php://开头&#xff0c;后面跟着一些参数&#xff0c;用于指定要执行的操作或需要…...

【机器学习算法】——数据可视化

1. 饼图&#xff1a;显示基本比例关系 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False# ——————————————————————————————————————————————————————…...

如何在 Android 项目中实现跨库传值

背景介绍 在一个复杂的 Android 项目中&#xff0c;我们通常会有多个库&#xff08;lib&#xff09;&#xff0c;而主应用程序&#xff08;app&#xff09;依赖所有这些库。目前遇到的问题是&#xff0c;在这些库中&#xff0c;libAd 需要获取 libVip 的 VIP 等级状态&#xf…...

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 读取消息 &#xff08;单消费模式&#xff09;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】图像转换

理论 傅立叶变换用于分析各种滤波器的频率特性。对于图像&#xff0c;使用 2D离散傅里叶变换&#xff08;DFT&#xff09; 查找频域。快速算法称为 快速傅立叶变换&#xff08;FFT&#xff09; 用于计算DFT。 Numpy中的傅立叶变换 首先&#xff0c;我们将看到如何使用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集群部署基本管理实战 这么好的机会&#xff0c;还在等什么&#xff01; 01、Kubernetes 概述 K8S是什么 K8S 的全称为 Kubernetes (K12345678S)&#xff0c;PS&#xff1a;“嘛&#xff0c;写全称也太累了吧&#xff0c;写”。不如整个缩写 K8s 作为缩写的结果…...

Kubernetes 常用操作大全:全面掌握 K8s 基础与进阶命令

Kubernetes&#xff08;简称 K8s&#xff09;作为一种开源的容器编排工具&#xff0c;已经成为现代分布式系统中的标准。它的强大之处在于能够自动化应用程序的部署、扩展和管理。在使用 Kubernetes 的过程中&#xff0c;熟悉常用操作对于高效地管理集群资源至关重要。本文将详…...

爬虫基础之Web网页基础

网页的组成 网页可以分为三大部分–HTML、CSS 和 JavaScript。如果把网页比作一个人&#xff0c;那么 HTML 相当于骨架、JavaScript 相当于肌肉、CSS 相当于皮肤&#xff0c;这三者结合起来才能形成一个完善的网页。下面我们分别介绍一下这三部分的功能。 HTML HTML(Hypertext…...

k8s, deployment

控制循环&#xff08;control loop&#xff09; for {实际状态 : 获取集群中对象X的实际状态&#xff08;Actual State&#xff09;期望状态 : 获取集群中对象X的期望状态&#xff08;Desired State&#xff09;if 实际状态 期望状态{什么都不做} else {执行编排动作&#xf…...

使用ensp搭建OSPF+BGP和静态路由,底层PC使用dhcp,实现PC互通

1.4种方式&#xff0c;实现PC2可以互通底层的所有设备 OSPF&#xff1a;OSPF是一种用于互联网协议网络的链路状态路由协议 BGP&#xff1a;是一种用于互联网上进行路由和可达性信息传递的外部网关协议&#xff08;EGP&#xff09; 静态路由&#xff1a; 静态路由是一种路由方…...

TÜLU 3: Pushing Frontiers in Open Language Model Post-Training

基本信息 &#x1f4dd; 原文链接: https://arxiv.org/abs/2411.15124&#x1f465; 作者: 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…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...