操作系统——进程和线程

操作系统——进程和线程

从处理机只能执行单一程序,到处理机可以通过不停的切换所执行的程序,达到看似同时处理多个进程的过程,经历了很长一段时间。

从单道程序设计到多道程序设计,主要解决了在执行过程中需要频繁等待资源或者I/O操作的问题,因为这类操作通常都是很耗时间的(相对于CPU的快速执行来说),进而提高了整个CPU执行的效率和系统的吞吐量。

一、进程的定义与控制

为了能够更好的组织起用户交给处理机完成的任务,同时还要满足多道程序设计的需要,就必须对一段程序、任务进行组织和管理。支持多道程序设计的处理机通常将所需要完成的工作组织成为一个进程,比如给每个进程起一个名字——“小A,你可以进来完成你的工作了”。

一个进程,通常是在一个上下文环境中运行的。例如在运行时,需要读取某些内存、占用CPU中某些寄存器。而当下一个进程在处理机中运行时,就需要根据它上次运行过程中CPU和内存的状态来继续它之后的操作。所以处理机将进程抽象为由PCB(进程控制块)、程序区、数据区和工作区构成的一个集合体,里面包含了在进程控制和调度的过程中能够用的的所有信息。
图片来源——计算机操作系统,方敏,西安电子科技大学出版社

程序部分:描述或者记录了进程所要完成的工作,通常不可修改
数据部分:指在进程执行过程中所需要用到的数据
工作区:指单数传递和系统调用时的执行环境
——程序和数据是进程的实体,进程控制块则是进程的灵魂。

在处理机中创建一个进程的过程:

  • 创建PCB,在主进程表中为进程调价一个表项,并被分配PCB空间
  • 分配进程所需内存和其他空间,通常和程序代码中申请的空间有有关。
  • 初始化进程控制块,将相应信息填写入相应位置,例如与进程调度相关的信息,与进程调度状态有关的信息等等。
  • 最后将进程加载到就绪队列中

将进程抽象好之后,就需要用一系列操作对进程进行控制,以达到让CPU按照一定的顺序执行进程的目的。对于不同的处理机,它们都需要一套能够完成进程控制的一套操作,通常具有以下功能:创建一个新进程,撤销一个已经完成的进程,改变进程的状态(可以自行百度),实现进程间通讯等等,通常这些都是操作系统内核来完成的。在执行控制的过程中,一定不能被别的程序打断(我来管你们,你们还要中断我?)。所以有关进程控制的一些列操作都是通过原语来实现的(完成一个操作所不能分割的整体)。

由于实现了多道程序设计,那么在实际使用中肯定会涉及到资源共享的操作,例如对一块内存区域进行读写,这样就涉及到并发过程中的通过部与互斥问题。

二、线程

进程作为计算机调度的基本单位,在操作系统发展中也慢慢展现出了一些不足。例如,在现代计算机运行的过程中,通常都会涉及到大量的进程的分配和调度,进程的并行效率也开始达不到人们的预期。

因此人们又进行进一步探索,将进程视为资源分配的基本单位,而将线程视为一个单独的实体,参与进程调度过程。下面是多线程模型。
线程模型,图片来源——计算机操作系统,方敏,西安电子科技大学出版社
在多线程中,进程被定义为保护单位和资源分配单位,在一个进程中可以有多个线程,每个线程都具有如下特征:

  • 和进程一样具有就绪、运行、阻塞状态
  • 当线程不运行时,同样需要保存线程的上下文环境,把线程当作是进程内一个独立的程序计数器的运转。(。。。)
  • 拥有一个执行栈
  • 一个进程的所有线程共享进程所具有的资源

单进程多线程模型,图片来源——计算机操作系统,方敏,西安电子科技大学出版社
所由图中可以看到,线程像是被缩小了的进程,并且被安排在进程中,这么做有什么用?而且是如何做到的提高效率呢?

首先,创建线程所需要的开销非常小,只需要在进程空间中进行线程块的划分,搜索的空间会少很多;其次,同一个进程中的线程切换(在进程部分涉及到用户态和核心态的切换),开销会小很多;最后,由于使用的是相同的进程空间,不用借助内核提供的系统调用就能完成线程间的通讯。

至于为什么线程的切换会比进程的切换开销小,涉及到用户态和和核心态的转换。大意就是,由于操作系统和用户提交的任务都需要在同一台处理机上执行,为了保障操作系统的运行安全,必须隔离出来一份部分区域不能提供给用户使用,以免一些直接操作内存的代码直接影响到操作系统的运行。而且在操作系统运行过程中,有一些工作是对用户隐藏了的,例如进程管理、设备管理、文件管理等等、这些操作同样需要使用计算机的资源,所以才有了用户态和核心态之说。这两个状态的切换主要也是一些寄存器、堆栈指针等的切换,频繁的切换会需要很多时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值