admin管理员组

文章数量:1561030

文章目录

  • 处理器管理
    • 2.1 程序执行
        • 前趋图
          • 前趋图——顺序执行
          • 前趋图——并发执行
    • 2.2 进程概念与状态
      • 2.2.1 进程概念
      • 2.2.2 进程的状态
    • 2.3 进程控制
      • 2.3.1 进程控制块PCB
      • 2.3.2 操作系统内核
      • 2.3.3 进程控制原语
    • 2.4 线程
      • 2.4.1 线程的基本概念
      • 2.4.2 线程的实现
      • 2.4.3 其他相关技术
    • 2.5 处理器调度
      • 2.5.1 调度的概念
      • 2.5.2 作业调度
      • 2.5.3 进程调度
      • 2.5.4 操作系统调度实例
    • 2.6 进程同步和互斥
      • 2.6.1 进程同步与互斥概念
      • 2.6.2 一些基本概念
      • 2.6.3 信号量机制
      • 2.6.4 信号量的应用(结构型信号量)
      • 2.6.5 经典的进程同步问题
      • 2.6.6 管程
      • 2.6.7 进程通信
    • 2.7 死锁
      • 2.7.1 死锁的基本概念
      • 2.7.2 处理死锁的方法

操作系统全家桶:传送门
一、操作系统引述:https://blog.csdn/diviner_s/article/details/108829327
二、处理器管理:https://blog.csdn/diviner_s/article/details/108940809
三、存储器管理:https://blog.csdn/diviner_s/article/details/112245241
四、设备管理:https://blog.csdn/diviner_s/article/details/112250905
五、文件管理:https://blog.csdn/diviner_s/article/details/112253441
六、用户接口:https://blog.csdn/diviner_s/article/details/112255959

处理器管理

  • 处理器管理的主要任务是对处理器进行分配,并对其运行进行有效的控制和管理。在现代操作系统中,处理器的分配和运行都是以进程为基本单位的,因而对处理器的管理也可以视为对进程的管理。

  • 处理器管理包括以下功能:

  1. 进程控制。在并发运行环境中,要使程序运行,必须先为它创建一个或几个进程,并给它分配必要的资源。程序运行结束时,要撤消这些进程,并回收这些进程所占用的各类资源。进程控制的主要任务就是为程序创建进程,撤消已结束的进程,以及控制进程在运行过程中的状态转换。
  2. 进程同步。在并发环境中,进程是以异步方式工作的,并且以不可预知的速度向前推进。为了使多个进程能有条不紊地运行,系统中必须设置进程同步机制。
    进程同步的主要任务是对众多的进程运行进行协调。协调方式有两种:
    (1)进程互斥方式。
    (2)进程同步方式。
  3. 进程通信。在系统中,经常会有多个进程需要相互配合去完成一个共同的任务,而在这些进程之间,往往需要相互交换信息。进程通信的任务就是用来实现相互合作进程之间的信息交换。进程的通信方式有:
    1)当相互合作的进程处于同一台计算机系统时,通常采用直接通信方式。由源进程利用发送命令直接将消息发送到目标进程的消息队列上,然后由目标进程利用接收命令从其消息队列中取出消息。
    2)当相互合作的进程处于不同计算机系统时,通常采用间接通信方式。由源进程利用发送命令将信息发送到一个专门存放消息的中间实体中,然后由目标进程利用接收命令从中间实体中取出消息。这个中间实体通常称为“邮箱”,相应的通信系统称为电子邮件系统。
  4. 调度。等待在后备队列上的作业,通常要经过处理器调度才能执行。处理器调度包括作业调度(也称为高级调度)、进程调度(也称为低级调度)和中级调度。
    1)作业调度的基本任务是从后备队列中按照一定的算法,选择出若干个作业,将它们调入主存,建立进程,分配必要的资源,使之成为就绪进程,并按照一定的算法将其插入到就绪队列。
    2)进程调度的基本任务是从进程的就绪队列中,按照一定的调度算法选出一个进程,把处理器分配给它,使进程投入运行。
    3)中级调度的基本任务是把那些暂时不能运行的进程从主存移到外存上,释放其所占有的宝贵资源。当移到外存上的进程具备运行条件时,再由中级调度把它们重新调入主存,等待运行。

2.1 程序执行

  • 程序的执行有两种方式:顺序执行和并发执行。
  • 顺序执行是单道批处理系统的执行方式,也用于简单的单片机系统;
  • 现在的操作系统多为并发执行,具有许多新的特征。引入并发执行的目的是为了提高资源利用率。
前趋图
  • 前趋图:是一个有向无循环图。图中的每个结点可用于表示一条语句、一个程序段等;结点间的有向边表示在两个结点之间存在的前趋关系。
  • 如Pi → Pj,称Pi是Pj的前趋,而Pj是Pi的后继。
  • 在前趋图中,没有前趋的结点称为初始结点,没有后继的结点称为终止结点。应当注意的是,前趋图中不能存在循环。

例:在下图所示的前趋图中存在下述前趋关系:
P1 → P2,P1 → P3,P2 → P5
P3 → P4,P4 → P5,P5 → P6

前趋图——顺序执行
  • 程序的顺序执行:I-输入 C-计算 P-输出

  • 顺序执行的程序特点
    • 顺序性
    • 封闭性
    • 可在线性
前趋图——并发执行
  • 程序的并发执行:

  • 并发执行的程序特点:
    • 间断(异步)性:程序可能走到中途停下来,失去原有的时序关系。
    • 相互作用和制约性:系统中并发执行的程序互相独立,但有时也会直接或间接的发生相互依赖和相互制约。
    • 失去可再现性:程序经过多次运行,虽然其各次的环境和初始条件相同,但得到的结果却各不相同。
    • 失去封闭性:一个程序到存储器中的数据可能被另一个程序修改,失去原有的不变特征。

【例】程序A和程序B为并发执行,它们共享变量M,假设M初值为3;程序A执行M=M+1;程序B执行print M;M=1。程序A和程序B执行的顺序若不相同,M的结果将产生不同的变化。
顺序1:M = M +1;print M;M = 1。M值依次为4、4、1。
顺序2:print M;M = M +1;M = 1。M值依次为3、4、1。
顺序3:print M;M = 1;M = M +1。M值依次为3、1、2。
按照顺序1执行,M的输出结果为4;按照顺序2执行,M的输出结果为3;按照顺序3执行,M的输出结果为3。所以,当执行的条件不同时,并发程序有可能产生不同的执行顺序,也就会得到不同的执行结果。这样并发程序就形成了结果的不可再现性。

【例】已知一个求值公式(a²+3b)/(b+5a),a、b已赋值,画出该公式求值过程的前趋图,并判断哪些过程可以并发执行。
解析:把公式(a²+3b)/(b+5a)按照运算顺序分解,可以产生如下运算步骤:s1~s6,如图(a)所示;根据分解的运算顺序画出它的前趋图,如图(b)所示。根据前趋图,可以看出能够并发执行的运算是:s1与s2、s1与s3、s2与s3、s1与s5、s2与s5、s3与s4、s4与s5,其余运算不能并发执行。


思考题:

  • 并发执行环境下,我们如何得知一个程序何时执行?
  • 何时停顿?
  • 我们如何知道他与其他程序之间的关系?
  • 多道程序并发执行引发了一系列新情况??

2.2 进程概念与状态

  • 并发意味着互相要竞争资源
  • 停停走走意味着要保留和纪录中间形态
  • 竞争资源意味着要分辨所有对象

2.2.1 进程概念

一、进程的概念
        进程最根本的属性是动态性和并发性

  • 进程定义:
    程序在并发环境中的执行过程。
    进程可以定义为一个数据结构及能在其上进行操作的一个程序。
    一个程序段在一个数据集合上的一次运行过程。
  • 进程是程序在一个数据集合上的运行过程,是系统资源分配和调度的一个独立单位。

举一个例子来说明程序和进程:
例如从北京南站发往上海虹桥的G101次列车,它有自己的运行步骤:始发时间、站台,中间停靠的车站及停靠时间,到达终点站的时间等,这相当于一个程序。
2020年10月1日从北京南站发往死上海虹桥的G101次列车就相当于一个进程,它是一个过程,它从2020年10月1日早上6:36北京南站出发开始,到中午12:40到达上海虹桥结束。

二、进程的特征

  1. 动态性:进程因创建而产生,因调度而执行,因得不到资源而暂停,因撤销而消亡。
  2. 并发性:引入进程的目的正是为了使其程序和其它程序并发执行;而程序(没有建立进程)是不能并发执行的。
  3. 独立性:进程是独立获得资源、独立调度运行的基本单位。凡未建立进程的程序,都不能作为一个独立的单位参加运行。
  4. 异步性:进程按照各自独立的、不可预知的速度向前推进,导致执行的不可再现性。
  5. 结构性:程序段、数据段和进程控制块(PCB)。

三、进程与程序的对比

  1. 程序是指令的集合,是静态的概念;而进程是动态的,是一个执行的过程。
  2. 进程具有并发执行的特征,而程序没有执行特性,也就没有并发性。
  3. 程序是纪录在介质上的静态集合,作为资料可以长期保存(人为删除),而进程由数据段、程序段、PCB三部分组成,是有生命周期的一个有限的过程。
  4. 进程是现代计算机工作的基本单位。既是独立调度和执行的基本单位,又是资源分配和拥有资源的基本单位。
  5. 不同进程可以执行多个独立程序,也可以包含同一个程序。一个程序可以多次被不同的进程包含执行。
  • 进程与作业:作业的概念主要用于批处理系统。进程的概念用于所有多道系统。
    一个作业可以有多个进程组成,但至少有一道进程。而一个进程只能属于一个作业。

  • 进程类型:系统进程和用户进程

2.2.2 进程的状态

一、进程的三种基本状态

  1. 就绪状态:进程已经获得了除去CPU外其它运行所需的资源时的状态。所谓万事俱备,只欠东风。
  2. 运行状态(执行状态):处于就绪状态的某个进程获得了CPU的调度,获得了CPU,此时进程进入执行状态。
  3. 阻塞状态(等待状态):正在运行的进程因为需要输入输出数据等自身原因,不能继续运行,此时退出CPU,进入阻塞状态。

  • 1)就绪 转 运行
  • 2)运行 转 就绪
  • 3)运行 转 阻塞
  • 4)阻塞 转 就绪

二、进程的五种基本状态
    增加了其他两种状态:
4. 新状态:一个进程刚刚建立,还未放入就绪队列时的状态。
5. 终止状态:当一个进程已经正常结束或异常结束,操作系统已将其从系统队列中移除,但尚未撤销,这时为终止状态。
状态转换(增加两个转换):

  • 5)运行 转 终止
  • 6)新状态 转 就绪


三、进程的挂起状态
为什么会有挂起:

  • 1)用户的需求。当用户在进程运行期间,发现有可疑问题时,希望进程暂时停止下来,但是,并不终止进程。若进程处于执行状态,则暂停执行;若进程处于就绪状态,则暂时不接受调度,以便研究进程执行情况或对程序进行修改。这种静止状态称为挂起状态。
  • 2)父进程的需求。父进程往往希望考查和修改子进程,或者协调各个子进程之间的活动,此时需要挂起自己的子进程。
  • 3)操作系统的需求。操作系统有时需要挂起某些进程,然后检查系统中资源的使用情况,进行记账控制,以便改善系统运行的性能。
  • 4)对换的需求。为了缓和主存与系统其他资源的紧张情况,并且提高系统性能,有些系统希望将处于阻塞状态的进程从主存换到外存。而换到外存的进程,当等待的事件完成,它仍然不具备执行的条件,不能进入就绪队列,所以需要一个有别于阻塞状态的新状态来表示,即挂起状态。

具有挂起操作的进程状态转换图:

在操作系统中,进程是一个具有一定独立功能程序在某个数据集合上的一次 A ,进程是一个 B 概念,而程序是一个 C 的概念。在一单处理机中,若有5个用户进程,在非管态的某一时刻,处于就绪状态的用户进程最多有 D 个,最少有 E 个。
A: (1)并发活动 (2)并行活动(3)单独操作 (4)关联操作
B,C:(1)组合态 (2)关联态 (3)运行态(4)等待态 (5)静态 (6)动态
D,E:(1)1;(2)2;(3)3;(4)4;(5)5;(6)0
答案:1,6,5,4,6

在一个单处理机的系统中,OS的进程有运行、就绪、阻塞三个基本状态。假如某时刻该系统中有10个进程并发执行,在略去调度程序所占用时间情况下试问:
这时刻系统中处于运行态的进程数最多有几个?最少有几个?(1,0)
这时刻系统中处于就绪态的进程数最多有几个?最少有几个?(9,0)
这时刻系统中处于阻塞态的进程数最多有几个?最少有几个?(10,0)

2.3 进程控制

2.3.1 进程控制块PCB

一、进程控制块PCB

  • 也称进程描述块,其中含有进程的描述信息和控制信息,是进程动态特性的集中反映,是系统对进程识别和控制的依据。

二、进程控制块的作用

  • 每个进程有唯一的进程控制块,PCB与进程一一对应,是进程存在的唯一标志。
  • 操作系统根据PCB对进程实施控制和管理。
  • 进程的动态、并发等特征是利用PCB表现出来的。

三、进程控制块应包含的主要内容:

  • 1)进程标识信息:进程名、进程号
    2)进程说明信息(进程调度信息):特征信息、进程状态、调度优先权
    3)进程现场信息(处理器状态信息):现场保护区
    4)进程管理信息(进程控制信息):资源需求、进程通信、相关关系、其他信息

    四、进程控制块的组织
  • PCB作为系统非常重要的数据,常驻内存,放在内存系统区特定空间
  • PCB队列示意图:

    PCB的组织方式分为两种:
    1)链接方式

    2)索引方式

2.3.2 操作系统内核

  • 操作系统的控制结构:对系统资源进行管理和控制,每种资源都有对应的结构。
    · 存储器资源:内存表
    · 输入输出设备:I/O表
    · 软件资源:文件表
    · 处理器:进程表
  • 这些表结构实际上可能都不止一个。
  • 进程控制是对系统中全部进程实施有效管理,包括:
    • 创建新进程
      终止已结束进程
      终止由于某事件而无法运行下去的进程
      负责进程的状态转换
  • 这些功能一般由操作系统的内核实现,操作系统的内核是基于硬件的第一次扩充。把与硬件紧密相关的模块、运行频率较高的模块及一些公用的基本操作安排在靠近硬件的软件层次。

    一、操作系统内核
  • 操作系统一般划分为若干层次,再将OS的不同功能设置在不同的层次中。通常将一些与硬件紧密相关的模块(如中断处理程序等)、各种常用及运行频率较高的模块(如时钟管理、进程调度和许多模块所公用的基本操作),都安排在紧靠硬件的软件层次中,将它们常驻内存,这通常被称为OS内核。
  • 这种安排方式的目的在于两方面:一是便于对这些软件进行保护,防止遭受其他应用的破坏;二是提高OS的运行效率。
  • 操作系统内核都包含了以下两大方面的功能:
    1)支撑功能:该功能是提供给OS其它众多模块所需要的一些基本功能,以便支撑这些模块工作。其中三种最基本的支撑功能是中断处理、时钟管理和原语操作。
    2)资源管理功能:主要包括进程管理、存储器管理、设备管理。

二、处理器执行状态
为了防止OS本身及关键数据遭到用户应用进程有意或无意的破坏,通常将处理机的执行状态分成系统态和用户态两种。

  • 1)内核态:又称为管态、系统态、核心态、特权态等。具有较高的特权,能执行一切指令,访问所有寄存器和存储区,0S都在系统态运行。
  • 2)用户态:又称为目态、非特权态。具有较低特权的执行状态,只能执行规定的指令,访问指定的寄存器和存储区。

· 如果一个进程运行在内核态,则该进程就可以访问计算机的任何资源,即它的资源访问权限不受限制。如果一个进程运行在用户态,则其资源需求将受到一定的限制。区分内核态和用户态两种操作方式的目的是为了保护操作系统,提高操作系统的可靠性和安全性。
· 处理器的程序状态字寄存器(PSW)中有一个状态位用于记录进程的运行状态,即当前代码是内核态还是用户态,这种状态是处理器的一种状态,而不是进程的状态。
· 用户进程运行在用户态,它不能执行OS指令,不能访问OS区域,防止对OS的破坏。OS内核运行在系统态。进程控制包含在OS的内核中,它常驻内存,执行效率高。

三、用户态切换到内核态主要有如下3种方式:

  • 1、系统调用。这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的的服务程序完成工作。系统调用机制的核心还是使用了操作系统为用户特别开放的一个中断来实现。
  • 2、异常。当CPU在执行用户态进程时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关进程中,也就转到了内核态。
  • 3、I/O设备的中断。当I/O设备完成用户请求操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令,转而去执行与中断信号对应的的处理程序,如果先前执行的指令是用户态下的进程,那么这个转换的过程自然也就发生了由用户态到内核态的切换。例如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续的操作。
  • 系统调用可以认为是用户进程主动发起的,异常和外部设备中断则是被动的。

四、系统调用

  • 系统调用也称程序接口,是程序级的接口,即用户程序中可以利用系统调用提供的一组系统调用命令去调用操作系统内核中的一个(或一组)过程来完成自己所需要的功能。系统调用可以看作是操作系统内核和应用程序之间进行交互的接口,操作系统向用户程序提供系统调用的原因是为了对系统进行“保护”。当用户程序需要系统服务,也就是要调用系统内核中的某些程序时,只能从规定的位置进入内核,这样才能保证系统的安全。
  • 用户程序如何使用系统调用:访管指令是一条可在用户态下执行的指令,用户程序在编译时将调用操作系统的逻辑要求转换成一条访管指令,并设置一些参数;当执行到访管指令,产生访管中断,转入内核态执行系统调用程序,实现指定功能;系统调用完成后回到用户态执行用户程序。

2.3.3 进程控制原语

一、原语(Primitive)

  • 由若干条机器指令构成的并用以完成特定功能的一段代码,而且这段代码在执行期间不允许中断。
  • 原语又称为“原子操作(Atomic Operation)”过程,作为一个整体而不可分割——要么全都完成,要么全都不做。
  • 原语分为两类:
    1、机器指令级:执行期间不能中断
    2、功能级:作为原语的程序段不允许并发执行

二、内核中包含的进程控制的原语:

  • 1、进程创建原语
    2、进程撤消原语
    3、阻塞原语、唤醒原语
    4、挂起原语、激活(解挂)原语

  • 进程的层次关系:

三、进程创建

1、引发创建进程的事件:

  • 调度新作业(批处理系统)
  • 用户登录(分时系统)
  • 操作系统提供特定服务
  • 正在执行的进程创建新进程

2、例如:

  • 系统初始化后,Windows将自动产生如对话管理SMSS、登陆管理WINLOGON、安全管理LSASS等系统进程。
  • 启动程序,如双击一个.exe文件。
  • 用户请求创建新进程,进行系统调用,生成新进程,如fork()或者createprocess()。

3、进程的创建过程:一旦发现了要求创建新进程的事件,OS便调用创建原语(如UNIX/Linux系统中的fork), 按以下过程创建新进程。

  • 其主要操作过程有如下四步:
    1)申请一个空闲的PCB
    2)为新进程分配资源
    3)将新进程的PCB初始化
    4)将新进程加到就绪队列中

4、进程创建过程的详细描述:

  • 分配一个唯一的进程标识符,索取一个空白PCB
  • 为新进程的程序和数据分配内存空间
  • 初始化进程控制块
  • 初始化标识符信息(填入)、处理机的状态信息(指令指针, 栈指针)和控制信息(状态,优先级…)
  • 设置相应的链接。如: 把新进程加到就绪队列的链表中

四、进程终止

1、引发终止进程的事件:

  • 1)正常结束(寿终):批处理系统中,进程已运行完成遇到Halt指令;分时系统中, 用户退出登录。
  • 2)异常结束(自杀):
    • 进程发生出错和故障事件
    • 存储区越界、保护性错(如:写只读文件)、特权指令错、非法指令(如:程序错转到数据区)、算术运算错、运行超时、等待超过时、I/O 失败等
  • 3)外界干预(他杀、处决):操作系统干预、父进程请求、父进程终止

2、进程的终止过程:

  • 1)找到指定进程的PCB
    2)终止该进程的运行
    3)回收该进程所占用的全部资源
    4)终止其所有子孙进程,回收它们所占用的全部资源
    5)将被终止进程的PCB从原来队列中摘走
    6)将回收的PCB加到空闲队列中

五、进程的阻塞和唤醒

  1. 进程的阻塞:处于运行状态的进程,在其运行过程中期待某一事件发生(如:请求系统服务、等待键盘输入、等待数据传输完成、等待其它进程发送消息),当被等待的事件未发生时, 由进程调用阻塞原语(block), 将自己阻塞。
  • 进程阻塞过程:
    • 阻塞原语使运行态的进程停止,将现场保存在其PCB的CPU现场保护区。
    • 将PCB中的现行状态由运行态变为阻塞态,并将该进程插入到相应事件的阻塞队列中。
    • 最后,转进程调度程序重新调度,将处理机分配给一个就绪进程,按新进程PCB中的处理机状态设置CPU环境,使它投入运行。
  1. 进程的唤醒:当被阻塞进程期待的事件到来时, 由中断处理进程或其它产生该事件的进程调用唤醒原语(Wakeup),将期待该事件的进程唤醒。
  • 进程唤醒过程:
    • 唤醒原语执行时, 将被阻塞进程从相应等队列中移出, 并将其 PCB中的现行状态由阻塞改为就绪态, 然后将该进程插入就绪队列中。
    • 若事件是等待 I/O 完成, 则由硬件提出中断请求, CPU响应中断, 暂停当前进程的执行, 转去中断处理。检查有无等待该 I/O完成的进程。若有, 则将它唤醒。然后结束中断处理。返回被中断进程或重新调度。
    • 若事件是等待某进程发一个信息, 则由发送进程把该等待进程唤醒。

六、进程的挂起和激活

  1. 进程的挂起:当进程请求将自己挂起或父进程请求将子进程挂起时, 调用挂起原语(suspend),将指定进程挂起。
  • 执行过程:检查要挂起进程的状态,若处于活动就绪态就将其改为静止就绪态,对于活动阻塞态的进程则将其改为静止阻塞态。如果被挂起的进程正在执行则还要转到调度程序重新调度。
  1. 进程的激活:激活指定进程,调用激活原语(active)将它激活。
  • 执行过程:将要激活的进程调入内存,并检查它的状态,若是静止就绪态则将其改为活动就绪态,若为静止阻塞态就将其改为活动阻塞态。如果采用的是抢占调度策略,被激活的进程优先级高则引起重新调度。

从静态角度看,进程由 A 、 B 和 C 三部分组成,用户可通过 D 建立和撤消进程,通常用户进程被建立后, E 。
A:(1)JCB (2)DCB (3)PCB (4)PMT
B: (1)程序段 (2)文件体 (3)I/O (4)子程序
C:(1)文件描述块(2)数据部分 (3)EOF (4)I/O缓冲区
D:(1)函数调用 (2)宏指令 (3)系统调用 (4)过程调用
E:(1)便一直存在于系统中,直到被操作人员撤消
(2)随着作业运行正常或不正常结束而撤消
(3)随着时间片轮转而撤消与建立
(4)随着进程的阻塞或唤醒而撤消与建立
答案:3,1,2,3,2

正在执行的进程由于时间片完而被暂停执行,此时进程从运行态变为 A 状态;处于静止阻塞状态的进程,在进程等待的事件出现后,应转变为 B 状态;若进程正处于运行态时,应终端的请求而暂停下来以便研究其运行情况(执行挂起进程原语),这时进程应转变为 C 状态,若进程已处于阻塞状态,则此时应转变为 D 状态,若进程已处于就绪状态,则此时应转变为 E 状态;执行解除挂起进程原语后,如挂起进程处于就绪状态,则应转变为 F 态,如处于阻塞状态,则应转变为 G 态;一个进程刚被创建时,它的初始状态为 H 。
A–H:(1)静止阻塞 (2)活动阻塞 (3)静止就绪
(4)活动就绪 (5)执行 (6)就绪
答案:4,3,3,1,3,4,2,6

2.4 线程

  • 提出线程的动机
    · WEB服务器需要同时处理多个客户请求
    · 创建多个进程会降低响应时间
    · 进程开销较大(上下文切换)
  • 什么是线程?
    · 线程,也形象的称为轻型进程
    · 是CPU调度执行的基本单位

2.4.1 线程的基本概念

一、线程概念:现代操作系统中,进程只作为资源拥有者,而调度和运行的属性赋予新的实体 —— 线程。

  • 线程(Thread)是进程中的一个实体,是被系统独立调度和执行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是它可以与同属于一个进程的其他线程共享进程所拥有的全部资源。
  • 一个线程可以创建和撤消另一个线程,同一进程中的多个线程间可以并发执行。线程之间也会相互制约,使其在运行中呈现异步性。因此,线程同样具有就绪、执行、阻塞三种基本状态。就绪状态是指线程具备运行的所有条件,在等待处理机;运行状态是指线程占有处理机运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。

· 线程必须在某个进程内执行,一个线程只属于一个进程
· 一个进程可以包含一个线程或多个线程


三、线程的状态:
1、运行状态
2、就绪状态
3、阻塞状态
4、终止状态

四、线程和进程的关系
1、从属关系:进程可以创建进程,也可以创建线程;线程可以创建其它的线程。一个进程至少要有一个可执行线程,但可以有多个线程;而一个线程只能在一个进程的地址空间内活动。
2、系统管理:进程是系统资源分配和拥有的单位,资源分配给进程,同一进程的所有线程共享该进程的所有资源。线程是系统调度执行的单位,处理机分配给线程,即真正在处理机上运行的是线程。
3、工作效率:创建线程比创建进程快,进程内的线程切换也比进程快,且节省开销。solaris中创建线程比进程快30倍,线程切换比进程切换快5倍。从而获得快速的用户响应,如在C/S模式下,web server为每个用户连接运行一个线程。
4、并发效果:用线程实现并发/并行比用进程实现更方便更有效,特别是进程内的并发/并行:进程可创建多个线程来执行同一个程序的不同部分,从而实现进程内的并发。在多处理器体系结构,可以使一个进程中的线程在不同的处理器上运行,提高进程执行的并行性。

2.4.2 线程的实现

一、线程的实现方式主要有两种:

1、用户级线程:在用户空间实现,用户要自己再编写一个执行系统,由该执行系统进行线程的管理和执行。系统选择进程,用户执行系统管理线程。

  • 1、优点:
    • 1)不需要在用户态和系统态间进行切换,切换速度快;
      2)线程相应算法由应用程序确定,调度算法可专用;
      3)可运行在任何操作系统上,不依赖于系统内核。
  • 2、缺点:
    • 1)用户级线程的切换最终都可能导致系统的进程切换,
      则进程中的所有线程都会被阻塞;
      2)不能实现线程级的并发执行,不能充分利用多处理器
      系统。

2、内核级线程(系统级线程):在核心空间实现线程。

  • 优点:克服了用户级线程方式的两个主要缺陷;本身也可以是多线程。
  • 缺点:控制转移开销大。

3、混合线程(组合模式):将用户级线程与系统级线程结合。

  • 1)多对一模型:多对一模型把多个用户级线程映像到一个核心线程上。线程管理是在用户空间完成的,如果其中有一个线程因执行系统调用而阻塞,那么整个进程都被阻塞。另外每次只能有一个线程访问核心,所以多个线程不能在多处理器上并行。在Solaris2的线程库中就采用这种模型。
    2)一对一模型:一对一模型是每个用户线程映像到一个核心线程。当一个线程因执行系统调用而阻塞时,允许调度另一个线程运行,也允许多个线程在多处理器上并行,因而并行能力比多对一模型强。不足之处是创建一个用户线程就要相应地创建一个核心线程,因而开销大。在实现这种模型的系统上多数都限制线程的数量。Windows NT,Windows2000和OS/2系统上都实现了一对一模型。
    3)多对多模型:多对多模型把多个用户级线程映像到较少或相等个数的核心线程上。核心线程的个数可随应用程序或所用机器而变化,如一个应用程序在多处理器系统上分配的线程数就比单处理器系统的多。多对多模型克服了上述两种模型的缺点:开发者可以根据需要创建多个用户线程,而且相应的核心线程可以在多处理器上并行。也就是说,当一个线程因执行系统调用而阻塞时,核心可以调度另一个线程运行。Solaris2,IRIX ,

本文标签: 处理器操作系统详细