现代操作系统----2.进程与线程

3/3/2017来源:C/C++教程人气:1834

多道程序设计:严格意义上,CPU在某一个瞬间只能执行一个进程,但是在一秒钟可以执行多个进程,产生了并行的效果。 (CPU由一个进程快速切换到另一个进程,使得每个进程各运行几十到几百毫秒)

进程定义:

狭义定义:进程是正在运行的程序的实例(an instance of a computer PRogram that is being executed)。 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。 进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。

这里写图片描述

关于进程与线程的对比: 这里写图片描述

关于进程:

这里写图片描述

一个进程应该有的一些内容: 这里写图片描述

进程的创建: 操作系统中维护者一种数据结构,每个进程就是存放在该数据结构内: 这里写图片描述

一些简单的系统,在计算机开机的时候,所有进程便一同创建,但是,如果是相对复杂的系统,进程的创建主要有以下四个原因: 1. 系统初始化 2. 执行正在运行的进程所调用的系统调用,以至于创建了另一个进程 3. 用户请求一批任务的初始化

进程的终止: 1. 任务完成,正常退出 2. 任务出错,正常退出 3. 严重错误,被迫中止 4. 被其他进程杀死

进程在运行时候有三种状态,根据不同的情况调度,三种状态可以来回切换,如图 这里写图片描述

线程定义:

线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

线程的使用:

1. 在许多应用中同时发生多种任务,有的任务会因为时间的推移被阻塞,通过将这些应用程序分解成多个可以并行的线程,使得模型变得简单 2. 线程比进程更加轻量级,更容易创建与撤销

尽管线程必须在某个进程中执行,但是线程和他的进程是不同的概念,并且可以分别处理。进程用于将资源进行集中,线程则是在CPU上被调用和执行的实体

经典的线程模型: 当多线程的进程在单CPU系统中运行时,线程轮流运行。 通过这样的来回切换,看起来就像不同顺序的进程并行一样。 与此同时,付出的代价就是,每个线程只得到了CPU真实速度的1/n

这里写图片描述

在用户空间中实现线程: 1. 当线程开始在运行时,每一个进程需要有一个线程表来跟踪线程的运行 2. 用户级的线程调度快捷,并且有着自己的调度算法,可扩展性也非常强 但是,一个进程内的线程只有当运行完之下一个线程才会继续运行 在内核中实现线程: 所有的调用转换都由内核实现,高效,但是内核开销变得打了起来 这里写图片描述

混合实现: 内核只识别内核级线程,并且对其进行调度,其中的一些内核级线程会被多个用户级线程多路复用。同样每个内核级线程有一个可以轮流使用的用户级线程,并且可以创建,撤销,调度这些用户级线程 这里写图片描述