操作系统概念

什么是操作系统?

操作系统是系统软件,是一组控制和管理计算机硬件和软件资源,合理地对各类作业进行调度,以及方便用户使用的程序集合。

什么是死锁?

死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种状态时,若无外力作用,它们都将无法再向前推进。即:如果一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。

操作系统的基本特征?

并发、共享、虚拟和异步

并行性:两个或多个事件在同一时刻发生

并发性:两个或多个事件在同一时间间隔内发生

操作系统的功能?

处理机管理功能

存储器管理功能

设备管理功能

文件管理功能

用户接口

(1)处理机管理功能

进程控制:为作业创建进程、撤销已结束的进程,以及控制进程在运行过程中的状态转换

进程同步:为多个进程(含线程)的运行进行协调

  • 协调方式:互斥和同步

进程通信:用来实现在相互合作的进程之间的信息交换;

进程调度:作业和进程的状态切换,包括作业调度和进程调度

(2)存储器管理功能

内存分配:为每道程序分配内存空间,提高存储器的利用率,允许正在运行的程序申请附加的内存空间;

存储保护:确保每道用户程序都只在自己的内存空间中运行,彼此互不干扰;

地址映射(变换):进程的逻辑地址到内存物理地址的映射。

内存扩充:用虚拟存储技术解决内存容量不足的问题;

(3)设备管理功能

缓冲管理:在 I/O 和 CPU 之间引入缓冲,匹配CPU和外设的速度,提高两者的利用率和并行操作程度;

  • 缓冲区机制包括:单缓冲机制、双缓冲机制、公用缓冲池机制

设备分配:根据用户请求的设备类型和采用的分配算法,对设备进行分配

设备处理:实现 CPU 与设备控制器之间的通信。

(4)文件管理功能

文件存储空间的管理:为文件分配外存空间,提高外存的利用率,并能有助于提高文件系统的运行速度;

目录管理:为文件建立一个目录项,并对众多的目录项加以有效组织,实现方便的按名存取,能实现文件共享,提供快速的目录查询手段。

文件读写管理和保护:对外存中的文件进行读写,提供防护

(5)用户接口

命令接口(用户直接使用):联机用户接口、脱机用户接口

  • 联机用户接口:由一组磁盘操作命令和命令解释程序组成
  • 脱机用户接口:由一组作业控制语言JCL组成

程序接口(用户通过程序间接使用):让用户程序在执行中访问系统资源,是用户程序取得 OS 服务的唯一途径,有时候也叫做系统调用

图形用户接口

死锁产生的原因?

==1、竞争不可抢占性资源引起死锁==

==2、竞争消耗性资源资源引起死锁==

==3、进程间推进顺序非法==

产生死锁的必要条件?

  • ==互斥条件 :==
  • ==请求和保持条件:==
  • ==不可剥夺条件:==
  • ==环路等待条件==

死锁的解决方法?

1、预防死锁

2、避免死锁

3、检测死锁

4、 解除死锁

同步应该遵循的规则?

  • ==空闲让进==
  • ==忙则等待==
  • ==有限等待==
  • ==让权等待==

程序并发执行时的特征

  • ==间断性==
  • ==失去封闭性==
  • ==不可再现性==

程序顺序执行时的特征

(1) 顺序性

(2) 封闭性

(3) 可再现性

进程

进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位

进程同步的主要任务:使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。

  • 结构性(结构特征):进程实体=程序段+进程控制块(PCB)+相关的数据段

  • 动态性

    • 进程:进程实体的一次执行过程,有生命周期。
    • 程序:程序是一组有序指令的集合,是静态的概念。
    • 动态性是进程最基本的特性
  • 并发性

  • 多个进程实体同存于内存中,在一段时间内同时运行,可以并发。

  • 程序不能并发执行。

  • 独立性:进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位,而程序则不是。

  • 异步性:进程按各自独立的、不可预知的速度向前推进。

引起创建进程的事件如下

① 用户登录。② 作业调度。③ 提供服务。④ 应用请求。

虚拟存储技术

定义:所谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统,其逻辑容量由内存容量和外存容量之和决定,其运行速度接近内存,成本接近外存。

(1)==多次性==

(2)==对换性==

(3) ==虚拟性==

SPOOLing技术

事实上,当系统中引入了多道程序技术后,可以利用其中的一道程序,来模拟脱机输入时的外围控制机的功能,把低速I/O设备上的数据传送到高速磁盘上,再利用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘上传送到低速输出设备上,这样,便可在主机的直接控制下,实现脱机输入、输出的功能。此时的外围操作与CPU对数据的处理同时进行,我们把这种在联机情况下实现的同时外围操作称为SPOOLing(Simultaneaus Periphernal Operations On-Line),或称为假脱机操作。

SPOOLing系统的组成:

输入井和输出井,这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I/O设备输入的数据,输出井是模拟脱机输出时的磁盘,用于暂存用户程序和输出数据。

输入缓冲区和输出缓冲区,缓和CPU与磁盘之间速度不匹配,在内存中开辟的两个缓冲区,输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井,输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。

输入进程SPi和输出进程SPo,利用两个进程来模拟脱机I/O时的外围控制机,其中,进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井,当CPU需要输入数据时,直接从输入井读入内存;进程SPo模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上。

SPOOLing系统主要有如下的特点

提高了I/O速度,对数据所进行的I/O操作,已从对低速的I/O设备进行I/O操作,演变为对输入井或输出井中数据的存取,如同脱机输入输出一样,提高了I/O速度,缓和了CPU与低速I/O设备之间速度不匹配。

将独占设备改造为共享设备,因为在SPOOLing系统中,实际上并没有任何进程分配设备,而只是在输入井或输出井中为进程分配一个存储区和建立一张I/O请求表,这样,便把独占设备改造为共享设备。

实现了虚拟设备功能,宏观上,虽然是多个进程在同时使用一台独占设备,而对于每个进程而言,他们都会认为自己是独占了一个设备,当然,只是逻辑上的设备,SPOOLing系统实现了将独占设备变换为若干个对应的逻辑设备的功能。

利用SPOOLing技术,可以将独占设备打印机改造为一台供多个用户共享的设备,从而提高设备的利用率,也方便了用户。当用户进程请求打印输出时 ,SPOOLing系统统一为它打印输出,但是并不真正立即把打印机分配给该用户进程,而只为它做两件事。

① 由输出进程在输出井中为之申请一个空闲磁盘块区,并将要打印的数据送入其中。

② 输出进程再为用户进程申请一张空白的用户请求打印表,并将该用户的打印要求填入其中,再将该表挂到请求打印队列上。

如果还有进程要求打印输出,系统仍可以接受该请求,也同样为该进程做上述两件事情。

如果打印机空闲,输出进程将从请求打印队列的队首取出一张请求打印表,根据表中的要求打印数据,从输出井传送到内存缓冲区,再由打印机进行打印。打印完后,输出进程再查看请求打印队列中是否还有等待打印的请求表,若有,又取出队列中的第一张表,继续打印,直至请求打印队列为空,输出进程才将自己阻塞起来,仅当下次再有打印请求时,输出进程才被唤醒。

进程调度

进程调度是控制、协调进程对CPU的竞争,即按一定的调度算法从就绪队列中选中一个进程,把CPU的使用权交给被选中的进程

一个作业,从进入系统并驻留在外存的后备队列上开始,直至作业运行完毕,可能要经历下面三级调度

  • 高级调度(High Scheduling,作业调度)

    • 作业调度也即高级调度,这个阶段可以看作是准备阶段。主要任务是按照一定的规则从外存上处于后备队列的作业中挑选一个或多个作业,为其分配内存,建立 PCB(进程) 等,使它们具备竞争处理机的能力。

      这个阶段进程的状态变化是:无 –> 创建态 –> 就绪态

  • 中级调度(Intermediate-Level Scheduling,提高内存使用率)

    • 内存调度也即中级调度,这个阶段可以看作是优化阶段。主要任务是将暂时不能运行的进程对换到外存中,使它们挂起;而当挂起的进程具备运行条件时,它们会被重新对换回内存,得到激活。这个阶段的主要目的是提高内存利用率和系统吞吐量。

      这个阶段进程的状态变化是: 静止就绪态 –> 活动就绪态,静止阻塞态 –> 活动阻塞态

  • 低级调度(Low Level Scheduling,进程调度)

    • 进程调度即低级调度,这个阶段让进程真正运行起来。主要任务是按照某种算法,从就绪队列中选取一个进程,分配处理机给它。进程调度是最基本、次数最频繁的阶段。

      这个阶段进程的状态变化是: 就绪态 –> 活动态

线程

(1)线程的引入

首先回忆一下为什么会有进程 —— 在以前,程序是串行执行的,为了让多道程序并发执行,引入了进程。进程虽然显著提高了资源利用率和系统吞吐量,满足了并发的需求,但是这种并发能不能做得更好呢?事实上,进程既是一个携带资源的独立单位,也是独立调度的基本单位,因此,在进程的创建、撤销和切换时,系统必须为之付出较大的时间空间开销(没办法“轻装上阵”)。鉴于此,系统不宜设置过多的进程,也不宜频繁地切换进程,这对于并发来说是一种限制。

如何解决这个问题呢?可以把进程看作是管理初创公司的老板,一开始人手不足,老板既要管理公司,也要四处奔跑沟通业务;但是一旦人手充足,那么老板仍然可以管理公司,只是沟通业务的工作就可以交给手下人去执行了。同理,我们可以考虑依然让进程作为拥有资源的独立单位,但是独立调度的基本单位则不再是进程,而是新引入的线程了。

它将进程的两个基本属性分开,==作为调度和分派的基本单位==,==不同时作为拥有资源的单位==,以“轻装上阵”;对于拥有资源的基本单位,又不对之进行频繁切换。

在多线程OS中,通常一个进程包括多个线程,每个线程是利用CPU的基本单位,是花费最小开销的实体。

(2)进程和线程的比较

  • 进程是指在系统中正在运行的一个应用程序

  • 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内

    • 比如同时打开QQ、Xcode,系统就会分别启动2个进程

  • 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程)

  • ==线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行==

    • 比如使用酷狗播放音乐、使用迅雷下载电影,都需要在线程中执行

    • 1个进程中可以开启多个线程,每个线程可以并行(同时)执行不同的任务:进程 ->车间,线程->车间工人 多线程技术可以提高程序的执行效率 比如同时开启3条线程分别下载3个文件(分别是文件A、文件B、文件C)

  • 同一时间,CPU只能处理1个线程,只有1个线程在工作(执行)多线程并发(同时)执行,其实是CPU快速地在多个线程之间调度(切换)如果CPU调度线程的时间足够快,就造成了多线程并行执行的假象。

    • 如果线程非常非常多,CPU会在N多线程之间调度,CPU会累死,消耗大量的CPU资源每条线程被调度执行的频次会降低
  • 总结

    • 调度的基本单位

      引入线程后,调度的基本单位不再是进程,而是线程。线程能够独立运行,且切换的时候,代价远远小于进程切换的代价。同一进程不同线程的切换,不会引起进程的切换。

      执行的基本单位

      通常认为进程不再作为可执行的实体。也即,可以说进程处于“执行”状态,但其实指的是该进程的某个线程正在执行;**可以说进程处于“挂起”状态,但其实指的是该进程的所有线程都被挂起。其他同理。**

      并发性

      进程间仍然能够并发,不仅如此,一个进程中的多个线程间也能并发,不同进程中的线程也能够并发,大大提高了 OS 的并发性。

      资源

      资源依然掌握在进程手中。为了性能考虑,线程仅占有一点必不可少的资源(比如 TCB,程序计数器等)。那么如何访问其它资源呢?事实上,同一进程的线程共享该进程所拥有的资源。另外,这些线程还共享同一片内存地址空间,所以也可以方便地进行通信。

      独立性

      同一进程中的线程间独立性要比不同进程间独立性低很多。前者独立性高,因为要防止进程之间彼此干扰和破坏;后者独立性低,因为同一进程的多个线程通常需要协作完成任务,互相之间可访问程度相对来说会比较高。

      系统开销

      在创建和撤销进程时,系统需要分配或者回收 PCB,分配或者回收资源,所以需要付出一定的时空开销;但是线程的创建和撤销的时空开销则明显小很多,尤其是在同一进程内的线程创建和撤销,这种开销会更加地小。

      支持多处理机系统

      传统的单线程进程,即使处理机再多,一个进程也只能运行在一个处理机上;但是引入了线程后,一个进程的多个线程可以分配到多个处理机上、并行执行。

访存

页/段式

==访问内存两次==,第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址,第二次访问时,才是从第一次所得的地址中获得所需数据

  • 分段存储方式的第一次访存是访问内存中的段表,第二次是访问内存中的目标单元。它也可以引入快表,若引入快表,则第一次访存有可能因为命中而得到避免

在段页式系统中,为了获得一条指令或数据,需要==访问内存三次==

  • 第一次访问时访问内存中的段表,从中取得页表始址,

  • 第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址,

  • 第三次访问才是真正的从第二次访问所得的地址中,取出指令或数据。

设备独立性

设备独立性(Device Independence)的概念——应用程序独立于具体使用的物理设备。

算法英文

调度算法

FCFS 算法

  • 长作业有利、对短作业不利
  • CPU 繁忙型作业有利,对 I/O 繁忙型作业不利

短作业(进程)优先调度算法SJ(P)F

  • SJF 算法的优点在于,它拥有“最短的”平均等待时间和平均周转时间
  • 对长作业是不利的。
  • 产生“饥饿”甚至“饿死”现象。

高优先权优先(HPF,Highest Priority First)调度算法

  • 问题:用户将优先权设的较高,对其他进程不利!!短进程优先对长进程不利!!

高响应比优先调度算法(HRF)

  • 等待时间相同的作业,则要求服务的时间愈短,其优先权愈高,——对短作业有利
  • 要求服务的时间相同的作业,则等待时间愈长,其优先权愈高, ——是先来先服务
  • 长作业,优先权随等待时间的增加而提高,其等待时间足够长时,其优先权便可升到很高, 从而也可获得处理机,——对长作业有利

是一种折衷,既照顾了短作业,又考虑了作业到达的先后次序,又不会使长作业长期得不到服务。

简单的时间片轮转法(RR—Round Robin)

  • 优点:公平。保证就绪队列中所有进程在一给定的时间内,均能获得一时间片的处理机执行时间
  • 缺点:紧迫任务响应慢。UNIX中采用:时间片+优先权
  • ==注意:先放入新到的进程,在放入时间片完的进程==

多级反馈队列调度算法

I.基于顺序搜索的动态分区分配算法

首次适应算法(First Fit)

循环首次适应算法(Next Fit)

最佳适应算法(Best Fit)

II.基于索引搜索的动态分区分配算法

1.快速适应算法(分类搜索法) (Quick Fit)

2.伙伴系统(buddy system)

3.哈希算法

页面调入算法

==最佳置换算法OPT==

先进先出FIFO置换算法

==最近最久未使用(LRU)置换算法==

==最少使用置换算法LFU==

==CLOCK置换算法【NRU(Not Recently Used)算法】==

磁盘调度

先来先服务(FCFS, First Come First Service)

最短寻道时间优先(SSTF,Shortest Seek Time First)

扫描(SCAN)算法

循环扫描(CSCAN)算法

NStepSCAN算法

FSCAN算法

文件目录管理的基本要求是什么?

文件目录管理的基本要求是:

(1) 实现“按名存取”。这是目录管理的最基本的功能,也是文件系统向用户提供的最基本的服务。

(2) 提高对目录的检索速度。通过合理组织目录结构的方法,可加快对目录的检索速度,从而提高对文件的存取速度。

(3) 文件共享。在多用户系统中,允许多个用户共享一个文件,在外存中保留一份该文件的副本,供不同用户使用,以节省大量的存储空间。

(4) 允许文件重名。系统应允许不同用户对不同文件采用相同的名字,以方便用换照自己的习惯给文件命名和使用文件。

进程队列个数

如果系统中有n个进程,

  • 运行队列中进程的个数最多为1个
  • 就绪队列中进程的个数最多为n-1个
  • 阻塞队列中进程的个数最多为n个
    • 全部在等待外部条件,无法执行

进程通信

进程通信指的是进程之间的信息的传播和交换。

低级通信:进程之间的互斥和同步。

  • 信号量机制作为通信工具的缺点:
    • (1)效率低 ;
    • (2)通信对用户不透明。

高级进程:通信是指用户可直接利用操作系所提供的一组通信命令,高效地传送大量数据的一种通信方式。

  • 特点:
  • (1)使用方便操作系统隐藏了进程通信的细节,对用户透明,减少了通信程序编制上的复杂性。
  • (2)高效的传送大量数据,利用通信原语实现。

1. 共享存储

进程 A 无法直接访问进程 B 的地址空间,反之亦然,所以提供一块可以供 AB 访问的共享空间。这块共享空间属于互斥的临界资源。

1.1 基于数据结构

各个进程共用某些数据结构,借以实现进程间的信息交换。比如共用一个长度为 10 的数组。这种共享速度慢、限制多,属于低级通信方式。

1.2 基于存储区

在内存中划出一块共享存储区,各个进程通过对这个共享区的读写交换信息、实现通信。数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,属于高级通信方式。

2. 消息传递

进程通过操作系统提供的“发送消息/接受消息”两个原语进行数据交换,而数据交换的基本单位是一个格式化的消息,该消息包括消息头和消息体。消息头包括:发送进程 ID,接受进程 ID,消息类型,消息长度等格式化的信息。

2.1 直接通信方式

发送进程发送消息之前,首先申请一个缓冲区,之后把消息复制到缓冲区,再通过发送原语把缓冲区发送给接受进程,缓冲区首先到达接受进程的消息缓冲队列队尾。接受进程通过接受原语读取队列消息,并复制到本地变量。

2.2 间接通信方式

也叫做信箱通信。发送进程发送的消息首先到达一个消息容器,接受进程再从消息容器中接受消息。

3. 管道通信

管道又名 pipe 文件,其实就是在内存中开辟一个大小固定的缓冲区。它采用的是半双工通信,一个时间段内只能实现单向的传输。另外,管道也是互斥的临界资源。管道写满的时候,写进程会被阻塞,直到读进程把数据读走;而管道空的时候,读进程会被阻塞,直到写进程把数据读入。这里要注意,管道与我们之前说过的生产者、消费者使用的缓冲区不同。写会一次性写完,读会一次性读完,不存在写一下、读一下的情况

进程通信,是指进程之间的信息交换,进程的互斥和同步,由于只能交换很少量的信息而被归结为低级通信,目前的高级通信机制可归结为三大类

==① 共享存储器系统==

相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信,基于此,又可以分为如下两种类型:基于共享数据结构的通信方式,在这种通信中,要求诸进程共用某些数据结构,借此实现进程间的信息交换。基于共享存储区的通信方式,为了传输大量数据,在存储器中划出一块共享存储区,诸进程可通过对共享存储区中的数据的读或写来实现通信。

==② 消息传递系统==

进程间的数据交换是以格式化的消息为单位,程序员直接利用操作系统提供的一组通信命令(原语),不仅能实现大量数据的传递,而且还隐藏了通信的实现细节,使通信过程对用户是透明的,从而大幅减少通信程序编制的复杂性。

==③ 管道通信系统==

连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件,向管道(共享文件)提供输入的发送进程,以字符流形式将大量的数据送入管道;而接受管道输出的接受进程,则从管道中接受数据,由于发送和接受进程是利用管道进行通信的,因此叫做管道通信。管道通信需要具有三方面的协调能力:互斥(当一个进程正在对pipe执行读/写时,其他进程必须等待),同步(当写进程把一定数量的数据写入pipe,便去睡眠等待,到读进程取走数据后,再把它唤醒,当读进程读一个空pipe时,也应该睡眠等待,直到有数据写入管道,才将其唤醒),确定对方是否存在,只有确定了对方已存在时,才能进行通信。

装入

绝对装入方式

如果在编译时知道程序驻留在内存的什么位置,那么,==编译程序将产生绝对地址的目标代码==,绝对装入方式按照装入模块中的地址,将程序和数据装入内存,装入模块被装入内存后,由于程序中的逻辑地址与实际内存地址完全相同,故不需要对程序和数据的地址进行修改。

可重定位装入方式

由于绝对装入方式只能将目标模块装入到内存中事先指定的位置,在多道程序环境下,编译程序不可能事先知道所编译的目标模块应放在内存的何处,因此,绝对装入方式只适用于单道程序环境,在多道程序环境下,所得到的目标模块的起始地址通常都是以0开始的,程序中的其他地址也都是相对于起始地址计算的,此时应采用可重定位装入方式,根据内存的当前情况,将装入模块装入到内存的适当位置。该方式会使装入模块中的所有逻辑地址与实际装入内存的物理地址不同,需要对数据地址和指令地址进行修改,通常把再装入时对目标程序中指令和数据的修改过程称为重定位,又因为地址变换通常是在装入时(第三步)一次完成的,以后不再变化,故称为静态重定位

第一步第二步,只是绝地地址,第三步进行转换映射。

动态运行时装入方式

可重定位装入方式允许将装入模块装入到内存中任何允许的位置,故可用多道程序环境,但这种方式并不允许程序运行时在内存中移动位置,因为,程序在内存中的移动,意味着它的物理位置发生了变化,这就必须对程序和数据的地址进行修改后方能运行。然而,在运行过程中它在内存中的位置可能经常要改变,此时就应该采用动态运行时装入方式。动态运行时的装入程序在把装入程序装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行因此,装入内存后的所有地址都仍是相对地址,为了使地址转换不影响指令的执行速度,需要重定位寄存器的支持。

**重定位寄存器用于记录和更新装入模块当前的物理起始地址,逻辑地址只需要和这个物理起始地址相加即可得到物理地

IO设备类型

IO设备分配的数据结构

设备控制表(DCT,Device Control Table)

控制器控制表(COCT,Controller control table)

通道控制表(CHCT, Channel Control Table)

系统设备表(SDT,System device table)

SDT查DCT,申请设备

DCT查COCT,分配控制器

COCT查CHCT,分配通道

文件结构

文件的逻辑结构,这是从用户观点出发所观察到的文件组织形式,是用户可以直接处理的数据及其结构,独立于文件的物理特性,又称为文件组织。

文件的物理结构,又称为文件的存储结构,是指文件在外存上的存储组织形式,不仅与存储介质有关,还与外存分配方式有关。

文件的物理结构和外存组织方法有关。在采用不同的分配方式时将形成不同的文件物理结构。

  • 连续分配方式对应顺序式文件结构;
  • 链接分配方式形成链接式文件结构;
  • 索引分配方式形成索引式文件结构。

页表

进程和程序比较

(1)动态性是进程最基本的特征。这一方面在于进程是进程实体的执行过程,另一方面还表现在“它由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡”,即进程具有一定的生命周期。而程序只是一组有序指令的集合,并存放在某种介质上,本身并无运动的含义,故为静态实体。

(2)并发性是进程的重要特征,同在内存中的多个进程实体能在同一时间内同时运行;而单单基于程序的概念和实体是不能实现并发执行的。

(3)进程实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。凡未建立进程的程序,都不能作为一个独立的单位参加运行。

进程和线程比较

(1)调度。传统的操作系统中,拥有资源和独立调度的基本单位都是进程;在引入线程的操作系统中,则把线程作为调度和分派的基本单位,并把进程作为资源拥有的基本单位,从而把传统进程的两个属性分开,使线程能够轻装上阵。

(2)并发性。传统的操作系统只能在进程之间实现并发执行;引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程的多个线程之间亦可并发执行,从而提高了系统并发程度,并可更有效地使用系统资源和提高系统吞吐量。

(3)拥有资源。不论是传统的操作系统,还是引入线程的操作系统,进程都是拥有资源的一个独立单位,它可以拥有自己的资源。一般来说,线程除拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈)外,其自身基本不拥有系统资源,而与同属同一进程的其它线程共享所属进程的代码段、数据段及系统资源。

(4)系统开销。由于在创建或撤消进程时,系统均需为其分配或回收资源(如内存空间、I/O设备),所以操作系统所付出的开销将显著大于在创建或撤消线程时的开销。类似地,进程切换牵涉到整个当前进程CPU环境的保存及新被调度运行的进程的CPU环境的设置,而线程切换只需保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作,所以进程切换的开销也远大于线程切换的开销。此外,由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。特别地,对于只支持用户级线程的系统,线程的切换、同步及通信都无须操作系统内核的干预。

-----------------------本文结束 感谢阅读-----------------------
坚持原创技术分享,您的支持将鼓励我继续创作!恰饭^.^~