首页 > 技术文章 > 操作系统基本概念

rush-peng 2021-07-16 15:15 原文

操作系统的五大基本功能

  • 处理器管理:处理器的分配和运行都是以进程为基本单位

  • 存储器管理:对内存进行分配、保护和扩充

  • 设备管理

  • 文件管理

  • 用户接口:cmd

核心态和用户态

为了避免操作系统以及其他的关键数据收到用户程序 有意或无意的破坏,通常将 处理器的执行状态 分为 用户态核心态

  • 核心态: 操作系统管理程序执行时机器所处的状态,它具有较高的特权,能执行包括特权指令的一切指令,能访问寄存器和存储器

  • 用户态: 用户程序执行时机器说处于的状态,只能执行规定的指令,只能访问指定的存储区和寄存器

特权指令,只能是操作系统内核调用的命令,不允许用户直接使用,如 IO 指令,清除内存指令。

划分用户态和和心态以后,两类程序和各自的存储空间被严格的划分了,用户态程序不能调用核心态程序,而是通过访问核心态的命令,引起中断,由中断系统转入操作系统中的相应程序。

中断机制负责保护和恢复中断现场的信息,转移控制权到相应的程序。

windows中每个运行的程序都是一个进程,每一个进程都会创建一个或多个线程,这些线程称之为软件线程。一个进程至少有一个线程,称为主线程。
硬件线程,也称之为逻辑内核或逻辑处理器,windows将每一个硬件线程识别为一个可调度的逻辑处理器,每一个逻辑处理器可以运行软件线程的代码,windows调度器可以决定将一个软件线程赋给一个硬件线程,通过这种方式均衡每一个硬件线程的工作负载,以达到并行优化的作用。
打个比方,如果把硬件线程看作是泳道,那么软件线程就是在泳道中游泳的人。

进程的概念

  • 在计算机操作系统中,进程是资源分配的基本单位,也是独立运行的基本单位。所以人们还可以使用进程的观点来研究操作系统。

  • 进程的概念:在多道程序环境下,程序的并发执行破坏了程序的封闭性和可再现性,因此程序活动不再是处于一个封闭的系统中,程序的运行出现了很多的新特征,在这种情况下,程序这种静态的概念,已经不能如实反映程序活动的这些特征了。为此引入了一个新概念 --- 进程。

  • 进程是一个程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。进程是一个动态的概念,程序是一个静态的概念。进程包含了程序段和数据段以及进程控制块(PCB),而程序是一个有序代码的集合,无执行意义。

  • 进程由进程控制块程序段数据段 三部分构成

  • 进程是程序一次执行过程

系统吞吐量

系统的吞吐量是指的单位时间内 CPU 完成作业的数量。对于长作业来说,由于它占用较长的 CPU处理时间 ,因此会导致系统的吞吐量下降,而对于短作业来说,则正好相反。

PCB (进程控制块)

PCB是进程存在的唯一标识符,不同的操作系统,内部保存的东西是不同的,

  • 进程当前的状态
  • 进程队列指针,用于记录PCB中下一个PCB的地址,还可以组成多个队列,如就绪队列,阻塞队列等。
  • 程序和数据地址
  • 程序优先级
  • CPU 现场保护:当进程某些原因被释放掉了,cpu现场信息 就会被保存在PCB的该区域,以便进程获得处理器能继续执行。
  • 通信信息:该进程在执行过程中,需要与别的进程发生的信息交换情况
  • 家族l联系:进程创建的子进程之间的关系,形成一个进程家族树

PCB 是为了保证程序的并发进程,创建进程实际上就是创建了进程的 PCB,而撤销进程实际上就是撤销了进程的 PCB

一.并行和并发的区别

  • 并行是指的两个或多个事件在同一个时刻发生

  • 并发是指的两个或多个事件在同一时间间隔发生,并发是宏观上 在一段时间内,有两个或多个时间同时发生。

二.进程的状态有哪些

  • 就绪状态: 已经获得了除处理器以外的所有资源,一旦获得处理器,就可以立即执行
  • 执行状态: 指已经获得了必要的资源,并且正在CPU上运行
  • 阻塞状态: 指正在执行的程序,因为某些事件而暂时无法执行(如等待IO),当进程为阻塞状态的时候,即使把处理器分配给该线程他也无法运行
  • 创建状态: 进程正在被创建,但是尚未转到就绪状态,申请空白的 PCB 并向 PCB 中填写一些控制和管理进程的信息,创建完成以后转为就绪状态
  • 结束状态: 进程正在从系统中消失,可能是正常执行完毕,也有可能是其他原因退出运行

在这里插入图片描述

这些状态转换的原因

  • 就绪---执行状态:一个程序被进程调度程序选中

  • 执行---阻塞状态:请求并等待某个事件的发生

  • 执行---就绪状态:时间片用完,或者是抢占调度程序中,有更高优先级的进程转变为就绪状态。

  • 阻塞---就绪状态:进程因为等待的某个条件发生而被唤醒

并非所有的转化都是可逆的,进程即不能从阻塞状态变成执行状态,也不能由就绪状态转成阻塞状态

只有从执行状态变成阻塞状态是主动触发的,其他的情况都是被动的。

三.进程之间的切换

进程之间的切换是指处理器从一个进程的运行转到另一个进程的运行。

  1. 保存处理及上下文信息

  2. 更新PCB 信息

  3. 把进程的 PCB 移入相应的队列,如就绪、某事件的阻塞队列等等

  4. 选择另一个进程执行,更新其 PCB

  5. 更新内存管理的数据结构

  6. 恢复处理器的上下文信息

进程的切换, 一定会产生中断,即从用户状态进入内核态,然后再从内核态回到用户态。

进程的调度

进程调度的功能

  • 记录进程的状态和相关情况: 为了实现进程的调度,进程管理模块必须将系统中各个进程的执行情况和状态记录到各个进程的PCB中,同时要根据进程的状态特征和资源需求等信息,将进程的 PCB 组织成相应的队列,并根据运行情况将进程的 PCB 在不同的队列之间转换,进程调度模块通过PCB 的变化来掌握系统中所有进程的执行情况和状态。

  • 选择获得处理器的进程: 根据一定策略,选择一个处于就绪状态的进程,使其获得处理器执行。

  • 处理器的分配: 当正在运行的进程由于某种原因要放弃处理器时,进程调度程序应该保护当前进程的cpu现场,将其运行状态由运行变成就绪或者阻塞,并插入到相应的队列中去;同时恢复程序还应根据一定的原则,从就绪队列中选出一个进程,把该进程从就绪队列中移除,回复其 cpu线程,并将其状态改为运行。

四.进程线程的区别

  • 进程是资源分配的基本单位,也是独立运行的基本单位,这是进程与线程最主要的区别

线程的意义:

为了让进程并发的执行,操作系统还必须进行一系列的操作,比如创建进程、撤销进程、进程切换,执行这些操作的时候,操作系统还要为这些进程分配资源,回收资源,为运行进程保护现场信息等。这些都需要付出较多的时空开销。

进程的两个基本属性

  • 资源分配的基本单位

  • 被处理器独立调度和分配的单元
    为了减少操作系统的开销,不少操作系统的研究者就让线程去完成第二个属性,让进程只完成第一个属性

线程的定义

如果说操作系统中引入进程的目的是使多个程序并发执行,以改善资源利用率和提高系统的吞吐量,那么线程的引入就是为了减少程序并发时产生的时空开销,使操作系统具有更好的并发性。

线程是进程内一个相对独立,可调度的执行单元,他自己基本上不拥有资源,只拥有一点在运行时必不可少的资源(如程序计数器,一组寄存器和栈),但是他可以和同一个进程内的其他线程共享进程内的所有资源

  • 线程是进程内的一个执行单元,比进程更小

  • 线程是一个可调度实体

  • 线程本身不能运行,只能包含在进程中

线程的实现

  • 内核级线程: 由操作系统内核完成创建和撤销工作的线程,在支持内核级线程的操作系统中,内核维护进程和线程的上下文信息,并完成线程的切换,一个内核级线程的IO操作阻塞,并不会影响其他线程的操作,这个时候时间片分配的对象是线程,所以有多个线程的进程将会获得更多的处理器时间。

  • 用户级线程: 用户级线程指不依赖于操作系统核心,而是应用进程通过线程库来控制和管理线程。用户级线程在应用程序的内部进行,通常采用非抢占式和更简单的规则,也无须用户态和内存态的切换,因此特别快。但是当一个线程阻塞的时候,整个程序都必须等待。

进程和线程的比较

  • 调度: 在传统的系统中,拥有资源和独立调度的基本单位都是进程,而在引入了线程的操作系统中,进程是用于资源的独立单位,线程是独立调度的基本单位。同一进程内线程的切换不会引起进程的切换。

  • 拥有资源: 无论是传统的操作系统还是支持线程的操作系统,资源分配的基本单位都是进程,线程不用于系统资源(也不是一点没有),但是线程可以访问所属进程的系统资源。

  • 系统开销: 由于创建和撤销进程的时候,都要为止分配资源和回收资源,比如内存和IO,所以操作系统所付出的开销远大于创建和撤销线程的开销,类似的进程切换的时候,涉及到当前CPU环境的保存和新调度到的CPU环境的设置。而线程的切换,只需要保存和设置少量的寄存器内容,因此开销很小,而且同一个进程内的多线程共享进程的地址空间,因此多线程之间的通信非常的容易实现,甚至无需操作系统的干预。

五.为什么切换进程比切换线程代价大

六.进程之间的通信方式

进程通信是指进程之间的信息交流,进程的互斥和同步就是一种进程间的通信方式。由于进程互斥和同步交换的信息量较少且效率较低,因此这两种通信方式称为低级通信方式。

  1. 共享存储器系统: 为了输出大量的数据,在存储器中划出一块共享存储区,多个进程可以对共享存储区进行读写来实现通信。

  2. 消息通信系统: 在消息传递系统中,进程间以消息为单位交换数据,用户直接通过系统提供的一组通信命令实现通信。

    • 直接通信:发送进程直接把消息发送给接受进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息
    • 间接通信:发送进程将消息发送给某个中间实体中(通常称为信箱),接收进程从中取得消息,这种方式又称为信箱通信方式。
  3. 管道通信系统: 管道是用于连接读进程和写进程以实现他们之间通信的共享文件。向管道 写进程以字符流形式,将大量的数据送入管道,而接受管道输出的进程 (即读进程)可以从管道中接收数据。(管道是一个共享文件,不能单纯的从字面上理解为一个传输通道)

  4. 信号量: 信号量是一个二元组(s,q)其中 s 是一个具有非负初值的整型变量,q 是一个初试状态为空的队列。

    • s: 大于0 时,表示系统中可用资源的数目,当小于0时,其绝对值表示因请求该类资源而被阻塞的进程数目,除信号量的初始值以外,信号量的值仅能由 P操作V操作 改变,操作系统通过利用它的状态对进程和资源进行管理。

在这里插入图片描述

推荐阅读