计算机操作系统

并行和并发的区别与联系?

并发多个任务交替·执行

计算机在运行过程中,有很多指令会涉及 I/O 操作,而 I/O 操作又是相当耗时的,速度远远低于 CPU,这导致 CPU 经常处于空闲状态,只能等待 I/O 操作完成后才能继续执行后面的指令。为了提高 CPU 利用率,减少等待时间,人们提出了一种 CPU 并发工作的理论。

所谓并发,就是通过一种算法将 CPU 资源合理地分配给多个任务,当一个任务执行 I/O 操作时,CPU 可以转而执行其它的任务,等到 I/O 操作完成以后,或者新的任务遇到 I/O 操作时,CPU 再回到原来的任务继续执行。

 虽然 CPU 在同一时刻只能执行一个任务,但是通过将 CPU 的使用权在恰当的时机分配给不同的任务,使得多个任务在视觉上看起来是一起执行的。CPU 的执行速度极快,多任务切换的时间也极短,用户根本感受不到,所以并发执行看起来才跟真的一样。

 【并行多个任务同时执行

并发是针对单核 CPU 提出的,而并行则是针对多核 CPU 提出的。和单核 CPU 不同,多核 CPU 真正实现了“同时执行多个任务”。

多核 CPU 内部集成了多个计算核心(Core),每个核心相当于一个简单的 CPU,如果不计较细节,你可以认为给计算机安装了多个独立的 CPU。

多核 CPU 的每个核心都可以独立地执行一个任务,而且多个核心之间不会相互干扰。在不同核心上执行的多个任务,是真正地同时运行,这种状态就叫做并行。

【并发+并行】

在图2中,执行任务的数量恰好等于 CPU 核心的数量,是一种理想状态。但是在实际场景中,处于运行状态的任务是非常多的,尤其是电脑和手机,开机就几十个任务,而 CPU 往往只有 4 核、8 核或者 16 核,远低于任务的数量,这个时候就会同时存在并发和并行两种情况:所有核心都要并行工作,并且每个核心还要并发工作。

例如一个双核 CPU 要执行四个任务,它的工作状态如下图所示:

 每个核心并发执行两个任务,两个核心并行的话就能执行四个任务。当然也可以一个核心执行一个任务,另一个核心并发执行三个任务,这跟操作系统的分配方式,以及每个任务的工作状态有关系。

解释一下操作系统的主要目的是什么?

操作系统是一种软件,它的主要目的有三种

  • 管理计算机资源,这些资源包括 CPU、内存、磁盘驱动器、打印机等。
  • 提供一种图形界面,就像我们前面描述的那样,它提供了用户和计算机之间的桥梁。
  • 为其他软件提供服务,操作系统与软件进行交互,以便为其分配运行所需的任何必要资源。

用户态和内核态的区别?

内核主要是和硬件打交道,管理最核心的内容,如硬盘、内存、CPU等

内核态一种特殊的软件程序,用于控制计算机的硬件资源,例如协调CPU资源,分配内存资源

用户态提供应用程序运行的空间,为了使应用程序访问到内核管理的资源,例如CPU,内存,I/O等。用户态只能受限的访问内存,且不允许访问外设

特权指令:只能由操作系统使用、用户程序不能使用的指令。 举例:启动I/O 内存清零 修改程序状态字 设置时钟 允许/禁止终端 停机

非特权指令:用户程序可以使用的指令。 举例:控制转移 算数运算 取数指令 访管指令(使用户程序从用户态陷入内核态)

1.用户态切换到内核态的3种方式

a. 系统调用

这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。


b. 异常             

当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。


c. 外围设备的中断

当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。
这3种方式是系统在运行时由用户态转到内核态的最主要方式,其中系统调用可以认为是用户进程主动发起的,异常和外围设备中断则是被动的。


什么是中断

中断是指CPU在执行当前程序时系统出现了某种状况,使得CPU必须停止当前程序,而去执行另一段程序来处理的出现的紧急事务,处理结束后CPU再返回到原先暂停的程序继续执行,这个过程就称为中断。

中断的作用

使得计算机系统具备应对对处理突发事件的能力,使其能及时响应紧急事件

提高处理器效率,如果没有中断系统,CPU就只能按照原来的程序编写的先后顺序,对各个外设进行查询和处理,即轮询工作方式,轮询方法貌似公平,但实际工作效率却很低。

程序中断的作用:
(1)实现CPU与I/O设备的并行工作。
(2)处理硬件故障和软件错误。
(3)实现人机交互,用户干预机器需要用到干预系统。
(4)实现多道程序、分时操作,多道程序的切换需借助中断系统。
(5)实时处理需要借助中断系统来实现快速响应。
(6)实现应用程序和操作系统(管态程序)的切换,称为“软中断”。
(7)多处理器系统中各处理器之间的信息交流和任务切换。

什么是进程和进程表

进程就是正在执行程序的实例,比如说 Web 程序就是一个进程

进程由 程序段,数据段,PCB三部分组成

在这里插入图片描述

在这里插入图片描述

        

操作系统负责管理所有正在运行的进程,操作系统会为每个进程分配特定的时间来占用 CPU,操作系统还会为每个进程分配特定的资源。

操作系统为了跟踪每个进程的活动状态,维护了一个进程表。在进程表的内部,列出了每个进程的状态以及每个进程使用的资源等

进程和线程的区别与联系

一.进程和线程基本概念

  1. 进程是操作系统分配资源的基本单位,线程是CPU调度的最基本单位
  2. 一个进程可以包含多个线程,线程在进程的内部
  3. 进程之间的资源是独立的,线程之间的资源则是共享的。
  4. 每个进程都有独立的虚拟地址空间,也有之间独立的文件描述符表,同一进程的多个线程之间则共用这一份虚拟地址空间和文件描述符表
  5. 进程由 程序段,数据段,PCB三部分组成
  6. 进程的上下文切换速度比较慢,而线程的上下文切换速度比较快
  7. 进程的创建/销毁/调度开销大,线程的创建/销毁/调度开销相对少很多
  8. 线程由:线程ID,当前指令指针(PC),寄存器集合和堆栈组成。
  9. 从属关系不同:进程中包含了线程,线程属于进程
  10. 拥有资源不同:每个进程有自己的内存和资源,一个进程中的线程会共享这些内存和资源
  11. 控制和影响能力不同:子进程无法影响父进程,而子线程可以影响父线程,如果主线程发生异常会影响其所在进程和子线程
  12. CPU利用率不同:进程的CPU利用率较低,因为上下文切换开销较大,而线程的CPU的利用率较高,上下文的切换速度快
  13. 操纵者不同:进程的操纵者一般是操作系统,线程的操纵者一般是编程人员

线程的优势

·  创建线程比创建进程更快 

·  销毁线程比销毁进程更快

·  调度线程比调度进程更快

进程的状态

运行状态

        占有cpu,在cpu上运行(单核cpu情况下,只有一个进程处于运行态,双核两个

就绪状态

        已具有运行条件,由于没有cpu空闲,暂时不能运行

阻塞状态

         等待操作系统分配资源,(打印机,等待读磁盘操作)

创建态 :进程正在创建,操作系统分配资源(内存空间),初始化pcb

终止态 :系统回收进程的资源,撤销pcb

创建态  ->  就绪态  ->  运行态  

进程调度的方式有哪两种?

进程调度指的是计算机通过决策决定那个就绪进程可以获得cpu的使用权

就绪队列排队机制:将就绪进程按照一定的方式排成队列,以便调用程序可以最快的找到就绪程序

选择运行进程的委派机制:调度程序选择就绪进程,将CPU分配给它

新老进程的上下文切换:保存当前进程的上下文,装入被委派执行进程的上下文(将新进程放入cpu 缓存中)

进程调度的方式有非剥夺方式和剥夺方式。
非剥夺方式:  
分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。
剥夺方式:  
当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程优先原则、时间片原则。
进程调度算法:
1、先进先出算法(FIFO):
算法总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便一直执行下去,直到该进程完成或阻塞时,才释放处理机。  
举例:有三个进程P1、P2和P3先后进入就绪队列,它们的执行期分别是21、6和3个单位时间,对于P1、P2、P3的周转时间为21、27、30,平均周转时间为26。可见,FIFO算法服务质量不佳,容易引起作业用户不满,常作为一种辅助调度算法。
2、最短CPU运行期优先调度算法(SCBF--Shortest CPU Burst First):
该算法从就绪队列中选出下一个“CPU执行期最短”的进程,为之分配处理机。
举例:在就绪队列中有四个进程P1、P2、P3和P4,它们的下一个执行进程调度期分别是16、12、4和3个单位时间,P1、P2、P3和P4的周转时间分别为35、19、7、3,平均周转时间为16。  该算法虽可获得较好的调度性能,但难以准确地知道下一个CPU执行期,而只能根据每一个进程的执行历史来预测。
3、时间片轮转法:
前几种算法主要用于批处理系统中,不能作为分时系统中的主调度算法,在分时系统中,都采用时间片轮转法。  简单轮转法:系统将所有就绪进程按FIFO规则排队,按一定的时间间隔把处理机分配给队列中的进程。这样,就绪队列中所有进程均可获得一个时间片的处理机而运行。
4、多级反馈队列:
多级队列方法:将系统中所有进程分成若干类,每类为一级。 多级反馈队列方式是在系统中设置多个就绪队列,并赋予各队列以不同的优先权。

进程创建与销毁

创建进程的主要步骤:

一:申请一个空白的PCB块

二:为新进程分配资源

三:初始化PCB(初始化标识信息初始化处理机状态信息初始化处理机控制信息)

四:加入就绪队列

销毁进程的主要步骤:

一,根据标识,先找到要销毁的进程PCB。

二,终止这个进程及其子进程

三,把这个进程的各种资源收回

四,把这个PCB移出队列

进程切换与线程切换的区别

一、什么是虚拟内存

        虚拟内存是操作系统为每个进程提供的一种抽象,每个进程都有属于自己的,私有的、地址连续的虚拟内存,当然我们知道最终进程的数据 及代码必然要放到物理内存上,那么必须有某种机制能记住虚拟地址空间中的某个数据 被放到了那个物理内存地址上,这就是所谓的地址空间映射 ,也就是虚拟内存地址与物理地址的映射关系,操作系统通过页表记住这种映射关系,页表中记录了虚拟内存地址到物理内存地址的映射关系。有了页表 就可以将虚拟地址转换为物理内存地址了,这种机制就是虚拟内存。

二、进程切换和线程切换的区别

进程切换与线程切换的一个最主要区别就在于进程切换涉及到虚拟地址空间的切换而线程切换则不会。因为每个进程都有自己的虚拟地址空间,而线程是共享所在进程的虚拟地址空间的,因此同一个进程中的线程进行线程切换时不涉及虚拟地址空间的转换。

举一个不太恰当的例子,线程切换就好比你从主卧走到次卧,反正主卧和次卧都在同一个房子中(虚拟地址空间),因此你无需换鞋子、换衣服等等。但是进程切换就不一样了,进程切换就好比从你家到别人家,这是两个不同的房子(不同的虚拟地址空间),出发时要换好衣服、鞋子等等,到别人家后还要再换鞋子等等。

因此我们可以形象的认为线程是处在同一个屋檐下的,这里的屋檐就是虚拟地址空间,因此线程间切换无需虚拟地址空间的切换;而进程则不同,两个不同进程位于不同的屋檐下,即进程位于不同的虚拟地址空间,因此进程切换涉及到虚拟地址空间的切换,这也是为什么进程切换要比线程切换慢的原因。

三、为什么虚拟地址切换很慢

现在我们已经知道了进程都有自己的虚拟地址空间,把不腻地址转化为物理地址需要查找页表,页表查找是一个很慢的过程,因此通常使用Cache来缓存常用
的地址映射,这样可以加速页表查找,这个Cache就是TLB,Translation Lookaside Buffer,我们不需要关心这个名字,只需要知道TLB本质上就是一
个cache,是用来加速页表查找的。由于每个进程都有自己的虚拟地址空间,那么显然每个进程都有自己的页表,那么当进程切换后页表也要进行切换,页表
切换后TLB就失效了,cache失效导致命中率降低,那么虚拟地址转换为物理地址就会变慢,表现出来的就是程序运行会变慢,而线程切换不会导致TLB失效,
因为线程无需切换地址空间,因此我们通常说线程切换比进程切换快,原因就在这里。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值