当前位置: 首页 > 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、作业

作业概念:

定义:用户要求计算机系统为其完成的计算任务集合。

 作业步:

        作业处理过程中一个相对独立的步骤 ,一般一个作业步可由一个进程完成,某些作业步之间可以并行。作业与进程具有一对多的关系

作业分类:

        有两种作业类别,一种是批处理作业,另一种是交互式作业。

http://www.lryc.cn/news/501144.html

相关文章:

  • 先验地图--slam学习笔记
  • 空指针异常:软件开发中的隐形陷阱
  • 【Java从入门到放弃 之 GC】
  • 【C++】等差数列末项计算题解析及优化
  • vue中父组件接收子组件的多个参数的方法:$emit或事件总线
  • 2024.12.10——攻防世界Web_php_include
  • 【机器学习算法】——数据可视化
  • 如何在 Android 项目中实现跨库传值
  • JavaCV之FFmpegFrameFilter视频转灰度
  • Redis:基于PubSub(发布/订阅)、Stream流实现消息队列
  • C#飞行棋(新手简洁版)
  • 【OpenCV】图像转换
  • 力扣 重排链表-143
  • 【Kubernetes理论篇】容器集群管理系统Kubernetes(K8S)
  • Kubernetes 常用操作大全:全面掌握 K8s 基础与进阶命令
  • 爬虫基础之Web网页基础
  • k8s, deployment
  • 使用ensp搭建OSPF+BGP和静态路由,底层PC使用dhcp,实现PC互通
  • TÜLU 3: Pushing Frontiers in Open Language Model Post-Training
  • 深入解读 MySQL EXPLAIN 与索引优化实践
  • Flume——进阶(agent特性+三种结构:串联,多路复用,聚合)
  • ragflow连ollama时出现的Bug
  • 基于centos7.7编译Redis6.0
  • uni-app项目无法在Android Studio模拟器上运行
  • 第一部分:Linux系统(基础及命令)
  • No module named ‘_ssl‘ No module named ‘_ctypes‘
  • 【QT】编写第一个 QT 程序 对象树 Qt 编程事项 内存泄露问题
  • VTK编程指南<六>:VTK可视化管线与渲染详解
  • 基于STM32的智能计步器
  • VB.NET 从入门到精通:开启编程进阶之路