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

【操作系统】进程、线程、作业

进程、线程、作业

  • 2.1 多道程序设计
    • 2.1.1 单道程序设计的缺点
    • 2.1.2 多道程序设计的提出
    • 2.1.3 多道程序设计的问题
  • 2.2 进程
    • 2.2.1 进程的概念
    • 2.2.2 进程状态及状态转换
    • 2.2.3 进程控制块(PCB)
    • 2.2.4 进程的组成与上下文
    • 2.2.5 进程的队列
    • 2.2.6 进程的类型与特征
    • 2.2.7 进程间相互联系与相互作用
    • 2.2.8 进程的创建与撤销
    • 2.2.9 进程与程序间的联系与差别
  • 2.3 线程与轻进程
    • 2.3.1 线程的概念
    • 2.3.2 线程的结构
    • 2.3.3 线程控制块
    • 2.3.4 线程的实现
    • 2.3.5 线程的应用
  • 2.4 作业 ( Job )

2.1 多道程序设计

多道程序设计是OS所采用的最基本、最重要的技术,其根本目标是提高系统的效率。

衡量系统效率的一个尺度是吞吐量。

吞吐量: 单位时间内系统所处理的作业的道数。
在这里插入图片描述

2.1.1 单道程序设计的缺点

  1. 设备资源利用率低
    单道程序系统中,内存中仅存在一个程序,该程序仅能用到设备集中的一个子集,未被用到的外设资源便被浪费。

  2. 内存资源利用率低
    随着硬件技术的提高,内存容量不断增加,目前已达上百兆或几个G,而一般程序的长度远小于内存容量。若采用单道程序设计,则内存空间的浪费很大。

  3. 处理机资源利用率低
    中断,通道,DMA控制器的引入,使处理器与I/O设备的可以并行。

2.1.2 多道程序设计的提出

如果允许多个程序同时进入系统,即增加资源使用者的数量,则资源利用率应能得到提高,这就引入了多道程序系统。
多道程序设计对资源利用率的影响:

  1. 设备资源利用率提高
    若允许若干个搭配合理的程序同时进入内存,这些程序分别使用不同的设备资源,则系统中各种设备资源都会被用到并经常处于忙碌状态,设备利用率将得到明显提高。
  2. 内存资源利用率提高
    允许多道程序同时进入系统可避免单道程序过短而内存空间很大所造成的存储空间浪费。
  3. 处理机资源利用率提高
    在单道程序系统中,处理机资源利用率低的主要原因是当运行程序等待I/O操作完成时,处理机被闲置。若将两道程序同时放入内存,在一个程序等待I/O操作期间,处理机执行另一个程序,便可提高处理机的利用率。

如果增加内存中程序的道数,处理机资源的利用率可进一步提高。理论上,当内存中程序的道数充分多时,处理机的利用率可达到100%

综上分析,多道程序设计可有效地提高系统资源的利用率,从而提高系统吞吐量。那么内存的程序数量是否越多越好呢?也就是道数是不是越多越好呢?
答案是否定的。
首先,内存容量限制了系统可同时处理的程序数量;
其次,物理设备的数量也是一个制约条件。如果内存中同时运行的程序过多,这些程序可能会相互等待被其它程序占用的设备资源,反而会影响系统效率;
另外,内存中过多的程序会形成对处理机资源的激烈竞争,既可能影响系统的响应速度,也会增加因处理机分配而带来的系统开销。一般地,确定内存中同时容纳程序的数量,应考虑机器的配置情况。

结论:增加同时运行程序的道数可提高系统资源利用率,从而提高系统效率,但道数应与系统资源数量相当。道数过少,系统资源利用率低;道数过多,系统开销增大,程序响应速度下降。

2.1.3 多道程序设计的问题

多道程序设计改善了系统资源的利用率,增加了吞吐量,提高了系统效率,但同时也带来了新的问题:即资源竞争。
需解决如下问题:

  1. 处理机资源管理问题
    如果可运行程序的个数多于处理机的个数,则需解决可运行程序与处理机资源的竞争问题,即需要对处理机资源加以管理,实现处理机资源在各个程序之间的分配和调度。
  2. 内存资源管理问题
    (1)内存划分问题
    (2)逻辑地址映射到内存物理地址,即重定位
    (3) 存储空间的保护
  3. 设备资源管理问题
    尽管操作系统在选择程序进入系统时可以使进入系统的程序搭配相对合理,但由于程序使用资源的不确定性以及程序推进速度的不确定性,内存中的多道程序在使用设备时经常发生冲突,即多个程序同时要求使用同一资源,这就要求操作系统确定适当的分配策略,并据此对资源加以管理。

2.2 进程

多道程序系统中一个程序的活动规律是:
推进 → 暂停 → 推进 → 暂停 → …

程序暂停时需将现场信息作为断点保存起来;
程序推进时需恢复上次暂停时的现场信息,并从断点处继续执行。

可见,在多道系统中运行的程序需要一个保存断点现场信息的区域,这个区域保存的正在运行程序的现场信息。因此,需要一个能更准确地描述多道系统中正在执行中的程序的术语,这就是进程 (process)。

2.2.1 进程的概念

进程是操作系统乃至并发程序设计中一个非常重要的概念。什么是进程?目前尚无统一定义。 确切地说,关于进程有许多解释,这些解释并不完全等价,比如:
(1) 进程是程序的一次执行;
(2) 进程是可参与并发执行的程序;
(3) 进程是一个程序与数据一道通过处理机的执行所发生的活动;
(4) 所谓进程,就是一个程序在给定的空间和初始环境下,在一个处理机上的执行过程。

1978年,庐山OS研讨会上将进程定义为:
进程是具有一定独立功能的程序关于一个数据集合的一次运行活动.可并发执行的程序在一个数据集合上的运行过程。

上述这些定义都强调了程序的执行, 这是进程的动态特性, 是进程与程序之间的本质差异。

进程具有并发性,可与其它进程同时运行。

2.2.2 进程状态及状态转换

  1. 进程状态
    进程在其生存期内可能处于三种基本状态之一:
    运行态(RUN):进程占有CPU,正在向前推进。显然,单处理机系统中任一时刻只能有一个进程处于运行态。
    就绪态(READY):进程本身具备运行条件, 但未得到CPU。进程被创建时处于就绪态,进程创建成功,此时把该进程插入到就绪队列中。
    等待态(WAIT)阻塞:进程正等待某一个事件的发生,即使给它分配处理机也不能运行。
    (进程等待态,也称挂起态(Suspended)、阻塞态、封锁态(Blocked)、睡眠态(Sleep)。进程处于等待态时,本身不具备运行条件,即使给它分配处理机也不能运行。此时,进程正等待某一个事件的发生,比如,等待某一资源被释放,等待与该进程相关的I/O传输完成等。)
    运行、就绪、等待是进程的三种最基本的状态。 对于一个具体系统来说, 为了实现某种设计目标,进程状态的数量可能多于三个。

  2. 进程状态转换
    就绪 → 运行:获得处理机
    运行 → 就绪:剥夺处理机
    运行 → 等待:申请资源未得到,启动I/O传输未完成
    等待 → 就绪:得到所申请资源,I/O传输完成

在这里插入图片描述
在这里插入图片描述

进程状态转换由操作系统完成,对用户透明。

注意:对于不同的处理机调度算法,上述进程转换图可能略有不同。例如对于非剥夺调度,不存在由运行到就绪的状态转换。

2.2.3 进程控制块(PCB)

多道系统中运行的程序需有一个断点现场保存区域,该区域设在进程控制块中。进程控制块是进程存在的标志,它由一组信息构成,这些信息是系统对进程进行管理所需要的。

  1. 进程控制块的定义
    (1) 定义:进程控制块是标志进程存在的数据结构,其中包含系统对进程进行管理所需要的全部信息。
    (2) 是进程实体的一部分,是描述和控制、管理进程的记录型数据结构,是进程存在的唯一标志。
    (3) 对不同的操作系统, PCB中信息的数量和内容不尽相同。一般地,系统规模越大,功能越强,其PCB中信息的数量也越多。

  2. 一般操作系统中PCB所包含的项目如图所示。
    进程标识通常为一整数,称为进程号,用于区分不同的进程。
    用户标识通常也为一整数,称作用户号, 用于区别不同的用户。
    一个进程号与唯一一个用户号对应,而一个用户号可与多个进程号对应,即一个用户可同时有多个进程。
    进程状态在就绪、运行、等待之间动态变化。
    调度参数用于确定下一个运行的进程。
    现场信息用于保存进程暂停的断点信息,包括通用寄存器、地址映射寄存器、PSW、PC
    家族联系记载本进程的父进程。
    地址信息记载进程所对应程序的存储位置和所占存储空间大小,具体内容与存储管理方式有关。
    当前打开文件用于记载进程当前使用的文件,通过它与内存文件管理表目建立联系,通过该表可找到保存在外存中的文件。
    消息队列指针指向本进程由其它进程接收到的消息所构成的消息队列的链头。资源使用情况记载该进程生存期内所使用的系统资源和使用时间,用于记帐,对同一用户,他的全部进程所使用的资源都记载在该用户的帐目下。
    进程队列指针用于构建PCB队列,它是系统管理进程所需要的。

在这里插入图片描述

2.2.4 进程的组成与上下文

进程由两部分组成:进程控制块(PCB)和 程序
其中程序包括代码和数据等

进程由三部分构成,PCB,操作集,数据集。

  1. 进程控制块PCB
    (1) PCB是进程的“灵魂”。由于PCB中包含程序的地址信息,通过它可找到程序在内存或外存的存放地址。
    (2) PCB存于系统空间,只有操作系统能够对其存取,用户程序不能访问。实际上用户甚至感觉不到PCB的存在。
    (3) Linux的进程控制块为一个由结构task_struct所定义的数据结构,task_struct存放在/include/linux/sched.h

  2. 程序
    (1) 程序是进程的“躯体”,其中包括代码和数据两部分。
    (2) 代码在运行期间不修改自身,以支持程序共享。另外,在多道系统中,内存中同时存在多个程序,这些程序在内存中的存放位置随机确定,且在运行过程中可能会发生变化,因而代码必须能够浮动,即不采用绝对地址
    (3) 数据一般包括静态变量、动态堆和动态栈。 堆用来保存动态变量,栈用来保存用户子程序相互调用时的参数、局部变量、返回值、断点等。
    (4) 数据一般归进程私用,当然也有系统提供进程间数据共享功能,以实现进程间的信息交换。


进程有两种表记方法,图(a)将代码和数据看作一个整体,图(b)强调代码部分的可共享性。

在这里插入图片描述
注意:PCB属于操作系统空间,而程序属于用户空间。进程代码与数据也称为进程映像。

进程运行时OS需为其设置相应的运行环境,如系统堆栈、地址映射寄存器、打开文件表、PSW与PC、通用寄存器等。

进程上下文:在UNIX System Ⅴ中,将进程的物理实体(PCB+程序)与支持进程运行的物理环境称为进程上下文。

进程切换过程就是进程上下文切换的过程。 进程切换所需时间是系统为实现并发而付出的额外代价,属于系统开销的一部分。

系统开销:系统开销一般指运行操作系统程序,对系统进行管理而花费的时间和空间。

2.2.5 进程的队列

为实现对进程的管理,系统需按照某种策略将进程排成若干队列,由于PCB是进程的代表,因而,进程队列实际上是由进程PCB构成的队列。该队列也称PCB链,可单向,也可双向。单向链如图所示:
在这里插入图片描述
注意,虽然用“队列”这一术语,PCB入队列和出队列不一定完全按FIFO的次序(不同于数据结构中“队列”的概念),这与系统对进程的管理策略有关。

通常,进程队列分为如下三类:

  1. 就绪队列
    整个系统一个。所有处于就绪状态的进程按某种组织方式排在这一队列中,进程入队列和出队列的次序与处理机调度算法有关。
    注意:某些系统中就绪队列可能有多个,用以对就绪进程分类,以方便某种调度策略的实施。

  2. 等待队列
    每个等待事件一个。当进程等待某一事件时,进入与该事件相关的等待队列中;当某事件发生时,与该事件相关的一个或多个进程离开相应的等待队列,进入就绪队列。

  3. 运行队列
    在单CPU系统中只有一个,在多CPU系统中每个CPU各有一个。每个队列中只有一个进程,指向运行队列头部的指针被称作运行指示字。

2.2.6 进程的类型与特征

从OS角度,进程可分为系统进程用户进程

  1. 系统进程
    ① 系统进程属于OS的一部分,它们运行OS程序,完成OS的某些功能。一个系统进程所完成的任务一般是相对独立和具体的,且在进程的生存期内不变,因而它们通常对应一个无限循环程序,在系统启动后便一直存在,直到系统关闭。
    ② 现代操作系统内设置很多系统进程,完成不同的系统管理功能。系统进程运行于管态,可执行包括特权指令在内的所有机器指令。由于系统进程负担系统管理和维护任务,其优先级通常高于一般用户进程的优先级

  2. 用户进程
    ① 用户进程运行用户程序,直接为用户服务。
    ② 所谓“用户程序”,不一定是用户自己编写的程序,例如,用户在编译一个C程序时,需要运行C语言的编译程序,该程序在目态运行,但并不是用户自己编写的。在操作系统之上运行的所有应用程序都被称为用户进程。


进程的特性
(1) 并发性:可与其它进程一道在宏观上同时向前推进。
(2 )动态性:进程是执行中的程序。进程的动态性还体现在如下两个方面:首先,进程是动态产生、动态消亡的;其次,在进程的生存期内,其状态处于动态变化之中。
(3) 独立性:进程是调度的基本单位,它可以获得处理机并参与并发执行。
(4) 交往性:进程在运行过程中可能会与其它进程发生直接或间接的相互作用。
(5) 异步性:每个进程都以其相对独立、不可预知的速度向前推进。
(6) 结构性:每个进程有一个控制块PCB。

2.2.7 进程间相互联系与相互作用

(1) 相关进程:在逻辑上具有某种联系的进程 称作相关进程。
例如,进程P0在运行过程中创建了子进程P1和P2,进程P1产生的输出作为P2的输入,则P1和P2是相关进程。进程P1和P2与进程P0之间存在父子关系,也是相关进程。一般地,属于同一进程家族内的所有进程都是相关的。

(2) 无关进程:在逻辑上没有任何联系的进程 称作无关进程。例如,对于两个相互之间没有交往的用户来说,其进程是不相关的。
无关进程间虽没有逻辑关系,但有资源竞争关系,如互斥、死锁、饿死等。


进程间的相互作用:并发进程之间存在的相互制约关系 称作进程间的相互作用。

进程间相互作用的方式有两种:
(1) 直接相互作用直接制约:进程之间不需通过中间媒介而发生的相互作用,这种相互作用通常是有意识的。例如,进程P1将一个消息发送给进程P2,进程P1的某一步骤S1需要在进程P2的某一步骤S2执行完毕之后才能继续,等等。
直接相互作用只发生在相关进程之间。

(2)间接相互作用间接制约:进程之间需通过某种中间媒介而发生的相互作用,这种相互作用通常是无意识的。例如,进程P1欲使用打印机,该设备当前被另一进程P2所占用,此时P1只好等待,待P2用完并释放该设备时,将P1唤醒。
间接相互作用可能发生在任意进程之间。

2.2.8 进程的创建与撤销

用户进程常通过系统调用创建,一般至少包括两个相关的系统调用:创建进程、撤销进程。

在UNIX系统中的命令格式如下:

  1. 进程创建: pid = fork()
    创建子进程所完成的工作如下:
    (1) 建立一个PCB,并对其内容进行初始化。
    (2) 为该进程分配必要的存储空间,并加载所要执行程序。(在UNIX系统中需通过另外一个系统调用execl实现)
    (3) 将PCB送入就绪队列。

  2. 进程结束: exit(status)
    ① 完成使命的进程需终止自己并告知OS。这在UNIX系统中通过exit系统调用实现。
    ② exit命令的执行将进入OS,系统将对进程进行善后处理(收集进程状态信息、通知其父进程等),再收回进程所占有的所有资源,最后撤销其PCB。
    ③ 除正常终止外,地址越界、非法指令、来自用户或父进程的kill信号等可能导致进程的非正常终止,非正常终止也将进入OS进行善后处理。

体现生灭过程的进程状态转换图如图所示:
在这里插入图片描述
注意:进程的创建与结束属于OS中的系统调用,而其它状态转换条件对应OS核心中的内部函数。

2.2.9 进程与程序间的联系与差别

进程和程序既有联系,又有差别。

  1. 进程与程序的联系
    程序是构成进程的组成部分之一,一个进程存在的目的是执行其对应的程序,如果没有程序,进程就失去了其存在的意义。

  2. 进程与程序的差别
    (1) 程序是静态的,进程是动态的;
    (2) 程序可写在纸上或在某一存储介质上长期保存,而进程具有生存期,创建后存在,撤销后消亡;
    (3) 一个程序可对应多个进程,但一个进程只能对应一个程序;另外,一个程序的多次执行也分别对应不同的进程。

2.3 线程与轻进程

进程的情况:早期的OS基于进程,一个进程只包含一个执行流,进程是处理机调度的基本单位。

进程切换时,整个上下文都需要变化系统开销较大相关进程间的耦合关系差

执行流间的关系:许多应用中,一些执行流之间具有内在的逻辑关系,涉及相同的代码或数据。如果将这些执行流放在同一进程的框架下,则执行流之间的切换不涉及地址空间的变化,这就引入了线程。一个例子,地毯图像

线程的情况:同一进程中的多个线程可以执行相同的代码段,也可以执行不同的代码段(逻辑上有合作关系),这些合作的线程可利用共享的数据成分相互交往。

2.3.1 线程的概念

  1. 定义
    (1) 线程(thread)也可称轻进程(LWP),是进程内的一个相对独立的执行流。
    (2) 线程是进程中的实体,
    (3) 一个进程可以拥有多个线程,一个线程必须有一个父进程
    (4) 这些线程执行同一程序中的相同代码段或不同代码段,共享数据区和堆。
    (5) 一般认为,进程是资源的分配单位,线程是CPU的调度单位。线程是比进程更小的能独立运行的基本单位

进程和线程关系如下图:大方块就是进程,线条是线程
在这里插入图片描述

  1. 线程的属性:
    (1) 轻型实体。线程只拥有必须的资源,只要能保证其运行。
    (2) 独立调度和分派的基本单位。因线程是能独立运行的基本单位,因为线程拥有能保证其独立运行的最小的其他资源,因此只有一旦获得CPU就可独立运行,故其是cpu调度、分派的基本单位。
    (3) 可并发执行。在一个进程的多个线程之间,可以并发执行。不同进程中的线程也能并发执行。
    (4) 共享进程资源。从前面的讲述我们就能理解,在同一进程中的各个线程,共享该进程所拥有的资源。共享进程的用户地址空间和其他资源,只拥有必不可少的资源,如,线程状态、寄存器上下文和栈。

  2. 线程的状态
    (1) 状态参数
    每个线程用线程标识符和一组状态参数描述
    (2) 线程运行状态
    三种基本状态:执行状态,就绪状态,阻塞状态。

  3. 线程的创建和终止
    (1) 线程的创建:进程在启动运行时,首先给它创建一个被称为“初始化线程”,运行的线程可根据需要再去创建若干个线程由初始化线程创建。创建过程:在创建新线程时,需要利用一个线程创建函数(或系统调用),并提供相应的参数(如主程序的入口指针、堆栈的大小、优先级等),在线程创建函数执行完后,将返回一个线程标识符供以后使用。
    (2) 终止线程的方式有两种:
    ① 在线程完成了自己的工作后自愿退出;
    ② 线程在运行中出现错误或由于某种原因而被其它线程强行终止。

  4. 线程的优点
    与进程相比,线程具有如下优点:
    (1)上下文切换速度快。由同一进程中的一个线程切换到另一个线程只需改变寄存器和栈,程序和数据的地址空间不变。
    (2) 系统开销小。创建线程比创建进程所需完成的工作少,因而对于客户请求,服务器动态创建线程比动态创建进程具有更高的响应速度。
    (3) 通讯容易。由于同一进程中的多个线程地址空间共享,一个线程写到数据空间的信息可直接被该进程中的另一线程读取。 (共享数据空间)

2.3.2 线程的结构

多进程结构(用户视图)
在这里插入图片描述
如果两个进程具有一定逻辑联系,比如二者是执行相同代码的服务程序,则可用多线程结构实现,如图所示:
在这里插入图片描述

2.3.3 线程控制块

为实现线程的并发和管理,需要一个与进程控制块PCB相似的数据结构,称为线程控制块。

定义:线程控制块是标志线程存在的数据结构,其中包含系统对线程进行管理所需要的全部信息。

TCB中的内容一般较少,因为有关资源分配等多数信息已记录于所属进程的PCB中。TCB中的主要信息包括:线程标识、线程状态、调度参数、现场、链接指针。其中,现场信息主要包括通用寄存器、指令计数器PC以及用户栈指针。OS支持的线程的TCB中还包含系统栈指针。

2.3.4 线程的实现

线程的实现方式有两种,决定了TCB属于操作系统空间还是属于用户进程空间:
(1) 用户级线程:在目态实现,TCB处于用户空间,比如,运行系统
(2) 核心级线程:在管态实现, TCB处于系统空间。

注意:TCB可以在系统空间也可在用户空间

线程有两种实现方式:在目态实现的用户级别线程、在管态实现的核心级别线程。

  1. 用户级别线程 (user level thread)
    (1) 用户级线程由系统库library支持;线程的创建、线程的撤销、线程状态的变化都由库函数控制并在目态完成;TCB保存在用户空间并由运行系统维护。
    (2) 用户级线程对操作系统不可见,系统调度仍以进程为单位,核心栈个数与进程个数相对应,即每个进程对应一个核心栈
    (3) 用户级线程需借助与中间系统才能取得内核的服务。中间系统实现的两种方式:一,运行时系统;二,内核控制线程
    (4) 所谓“运行时系统”,是用于管理和控制线程的函数(过程)的集合,其中包括用于创建和撤消线程的函数、线程同步和通信的函数以及实现线程调度的函数等。
    正因为有这些函数,才能使用户级线程与内核无关。运行时系统中的所有函数都驻留在用户空间,并作为用户级线程与内核之间的接口。
    下图是运行时系统用户级线程

在这里插入图片描述
用户级线程 示意图如下:
在这里插入图片描述

(5) 用户级别线程的优点
① 线程不依赖于操作系统。可采用与问题相关的调度策略,灵活性好;
② 线程之间的切换速度快。同一进程中的线程之间进行切换不需进入OS(内核),因而效率较高。

(6) 用户级线程的缺点
① 同一进程中的多个线程不能真正并行,即使在多处理机环境中;
② 由于线程对操作系统不可见,调度在进程级别进行,若某进程中的一个线程通过系统调用进入OS受阻,则该进程的其它线程也不能运行。
用户级别线程的优势是核心级别线程所不具备的,因而多数现代操作系统都在提供了核心级别线程之后,仍支持用户级别线程。

  1. 核心级别线程 (Kernel-level thread)
    (1) 核心级别线程的实现方法:
    通过系统调用实现;TCB保存于操作系统空间线程的创建、撤销、状态转换由操作系统完成线程是CPU调度的基本单位。由于系统调度以线程为单位,操作系统需为每个线程保持一个核心栈
    (2) 核心级线程的优点:并发性好,在多CPU环境中同一进程中的多个线程可以真正并行执行。
    (3) 核心级别线程的缺点:线程控制和状态转换需要进入OS(内核)完成,系统开销较大。
    核心级别线程示意图如下:
    在这里插入图片描述
    用户级线程与系统级线程在以下几方面的差别:创建速度、切换速度、并行性、TCB的存储位置。
    ① 创建速度:用户级线程由系统库library在目态创建,创建速度快;系统级线程由OS通过系统调用创建,创建速度较慢。
    ② 切换速度:用户级线程之间的切换不需进入OS,切换速度快;系统级线程之间的切换需进入OS,系统开销较大,切换速度比用户级线程慢。
    ③ 并行性:对用户级线程,同一进程中的多个线程不能真正并行运行;而系统级线程在多CPU环境中可真正并行运行。
    ④ TCB的存储位置:用户级线程的TCB保存在用户空间;系统级线程的TCB保存于系统空间。

  2. 混合线程(hybrid thread)
    (1) Solaris系统采用了混合线程结构。用户级线程系统不可见,系统级线程用户不可见。用户级线程与系统级线程(内核)之间通过轻进程(LWP)建立联系。轻进程是用户和系统都可见的实体。
    (2) Solaris中的进程被称为任务(task)。一个任务中至少包含一个轻进程,可以通过多路复用使多个用户级线程与同一个轻进程建立联系,但只有当前与LWP相联系的线程才能与核心通讯,其余线程或阻塞或等待LWP。
    (3) 每个LWP都与一个核心级线程相对应,所有核心级线程由系统统一调度。在多CPU环境中,核心级线程可并行执行。

Solaris中的线程与轻进程之间的关系:

在这里插入图片描述
总结:

  1. User level thread:由系统库Library支持
  2. Light weighted process(LWP):由系统库Library支持
    每个task至少包含一个LWP
    多个用戶级线程可通过多路复用与一个LWP建立联系,只有当前与LWP相联系的用户级线程向前推进
  3. Kernel level thread:由kernel 支持
    每个核心线程与一个LWP对应

2.3.5 线程的应用

许多任务在逻辑上涉及多个控制流,这些控制流具有内在的并发性,当其中一些控制流被阻塞时,另外一些控制流仍可继续。采用单进程不能表达多控制流;采用多进程开销大;采用多线程一方面可提高应用程序的并行性,另一方面也使程序设计简洁明晰

例如,考虑Word字处理程序。输入、词法检查、定时保存。易见,该应用程序涉及三个相对独立的控制流,这三个控制流共享内存缓冲区中的文本信息。单进程或多进程模式都难于恰当地描述和处理这一问题,而同一进程中的三个线程是最恰当的模型。

考虑Web服务器的服务模式。一个Web服务器可同时为多个Web用户服务,对应每个Web请求,Web服务器将为其建立一个相对独立的控制流。

以进程模式实现,则开销大、响应速度慢;
以线程模式实现更为方便快捷。对应每个Web请求,系统可动态弹出一个线程。为使响应速度更快,可事先将线程建立起来,当请求到来时选派一个服务线程。这些服务线程执行相同的程序,因而对应同一个进程。

引入多线程程序设计的原因:
(1) 某些应用具有内在的多控制流结构,这些控制流具有合作性质,需要共享内存。采用多线程易于对问题建模。
(2) 在需要多控制流的应用中,多线程比多进程在速度上具有绝对优势。统计表明,线程的建立速度约比进程的建立速度快100倍。
(3) 采用多线程可提高处理机与设备之间的并行性。
(4) 在多处理机的硬件环境中,多线程可并行执行,从而可提高资源利用率和进程推进速度。

2.4 作业 ( Job )

作业:用户要求计算机系统为其完成的计算任务的集合称为作业。(Job)

一个作业通常包含多个计算步骤。

作业步:作业中一个相对独立的处理步骤称为一个作业步(job step)。

作业步之间具有顺序或并发关系。

作业进入内存后变为进程一个作业步通常可由一个进程完成,即作业与进程之间可具有一对多的关系。

作业分类:批处理作业交互式作业
学习批处理作业前先说明几个概念:
(1) 作业控制语言(JCL):描述批处理作业控制意图的语言。
(2) 作业说明书:JCL的语句序列。
作业说明书一般以特殊符号起始,
$ JOB J1
$ FORTN …
$ LINK …
$ ENDJOB
(3) 作业控制程序:解释并处理作业说明书的程序。
(4) 作业控制进程:执行作业控制程序的进程。

  1. 批处理作业
    (1) 对作业进行管理需保存的信息:作业名、作业状态、调度参数、资源需求、相关进程、作业长度、在输入井与输出井中的存放位置、记帐信息等。
    (2) 上述信息被保存在作业控制块JCB中。
    (3) 作业控制块:是标志作业存在的数据结构,其中包含系统对作业进行管理所需要的全部信息。
    (4) 批处理作业转为进程的工作流程:
    作业由假脱机输入程序(SPOOLing)控制进入输入井;OS通过作业调度将其调入内存,并为其建立作业控制进程;作业控制进程解释作业说明书的语句,根据作业步要求为其建立进程。

作业控制程序的工作原理
在这里插入图片描述

  1. 交互式作业
    (1) 分时系统中,分时用户的一次登录称为一个作业。一次登录可向系统提出多个请求,每个请求可对应一个进程。可见,分时作业与进程之间是一对多的关系。
    (2) 分时系统中,通过设置一个口令文件,来实现对分时用户的管理。UNIX系统将该文件保存在/etc/passwd中,Passwd文件中包含所有注册用户的信息。

passwd文件的内容如图所示:

在这里插入图片描述
用户名和口令:用于登录;
用户id:用户内部标识;
用户根目录:用于保存私用文件和目录。UNIX系统中,用户根目录为/usr。例如,用户zhang的文件通常保存在/usr/zhang目录中;
注册资金:预缴费用,每次登录使用系统后实际发生的费用将从注册资金中扣除。(余额)

passwd文件为系统文件,只有特权用户,如系统管理员才能访问它,一般用户不能访问它。这是系统保护与安全的基本要求。

注册用户可随时登录系统。登录成功后,系统为该用户创建一个服务进程。对于行式命令界面,该进程执行命令解释程序、读入终端命令并解释处理。

通常,终端命令解释进程运行于系统态,但UNIX等系统中,终端命令解释进程运行于用户态,这使得OS内核小、便于命令解释程序的变化(不同的终端用户可选用不同的命令解释程序)。

UNIX系统shell的工作原理:

在这里插入图片描述
UNIX系统中,以“&”为结束符的终端命令为后台命令。对于后台命令,shell在输出进程号后便可给出提示符并读取下一个终端命令,这样的进程在后台运行,以后用户可根据进程号检查后台进程的运行状况。

从上面容易看出:分时系统中,一个终端用户在内存中可同时有多个进程为其服务。由于处理机按进程或线程进行分配,因而不同终端用户实际获得CPU的时间一般不相同。

交互式作业的创建、登录、退出、清除

  1. 交互式作业的创建(注册):
    <1>用户提供用户名、口令等
    <2>系统操作员填写passwd文件,同时为用户
    建立一个用户独享的目录,如/usr/zhang。
  2. 交互式作业的登录:
    <1> logon: 用户名
    <2> password: ********
  3. 交互式作业的退出:
    <1>显示退出:logout
    <2>隐式退出: (如5分钟无输入命令)
  4. 交互式作业的清除:
    <1>删除用户目录及所有文件
    <2>在passwd文件中清除该用户的相关信息。

作业、进程、线程三者之间的关系:
<1> 作业与进程
作业进入内存后变为进程,一个作业可与多个进程相对应;进程实现作业所要完成的功能。
<2> 进程与线程
不支持多线程的系统中,进程可视为单线程进程;支持多线程的系统中,一个进程可包含多个线程,至少包含一个线程。

相关文章:

  • 《DataWorks 深度洞察:量子机器学习重塑深度学习架构,决胜复杂数据战场》
  • BUUCTF逆向刷题笔记(1-12)
  • Scala的模式匹配
  • upload-labs靶场 1-21通关
  • 记录一次miniconda+openwebui迁移
  • Redis系列之慢查询分析与调优
  • api测试工具(postman、apifox、apipost)
  • 题目 3220 ⭐因数计数⭐【数理基础】蓝桥杯2024年第十五届省赛
  • 一个前端vue3文字hover效果
  • IO多路复用
  • 模型 - QwQ-32B
  • VSCode输入npm xxx,跳转到选择应用
  • 双向选择排序算法
  • qt作业day5
  • 进程相关知识day1
  • 【经验分享】Ubuntu20.04编译RK3568 AI模型报错问题(已解决)
  • 时间序列预测实操
  • better-sqlite3之exec方法
  • hom_mat2d_to_affine_par 的c#实现
  • django中序列化器serializer 的高级使用和需要注意的点
  • 衡天主机怎么做网站/seo关键词挖掘
  • 银川做网站多少钱/全网营销整合营销
  • 如何给wordpress文章部分内容加密/seo免费优化工具
  • aws 虚机wordpress教程/佛山百度提升优化
  • 小程序登录怎么退出账号/山东网络优化公司排名
  • 网站加速打开/百度竞价推广