基础知识普及操作系统中的进程与线程C

操作系统是管理计算机硬件和软件资源的计算机程序,它管理计算机的内存分配,决定资源供需关系、控制输入输出设备以及提供用户和系统交互的操作界面

简单的概括一下,操作系统就是一个管理硬件、提供用户交互的软件系统

二.操作系统的历程

1.无操作系统时代:人工操作、cup等待人工操作、资源利用率低

2.批处理系统时代:cpu无需等待人工操作、批量输入任务、资源利用率提升、多道程序设计

3.分时系统时代:多用户共享、可调试程序、资源利用率大幅提升

三.操作系统的基本功能

1.对计算机资源的管理,如处理器资源的管理、IO设备的管理、存储器资源的管理

2.实现了对计算机资源的抽象

3.提供了用户与计算机之间的接口:如图形界面、shell终端等

四.操作系统的相关概念

多道程序设计

概述:多道程序设计是指在计算机内存中同时存放多个程序,而这些个程序在操作系统的管理之下,相互交替运行,对多道程序的管理是操作系统的重要功能

意义:早期的批处理系统虽然可以批量输入任务,但一次只能处理一个任务,多道程序设计的出现使得批处理系统可以一次处理多个任务,大大的提高了资源的利用率

1.并发性

概述:并发性分为并行和并发两种情况

并行:是指两个或多个事件可以在同一时刻发生

并发:是指两个或多个事件可以在同一时间间隔发生

2.共享性

概述:共享性表现为操作系统中的资源可供多个并发的程序共同使用,这种共同使用的形式称之为资源共享

3.虚拟性

概述:把一个物理实体转换为若干个逻辑实体,物理实体是真实存在的,而逻辑实体是虚拟的,这种虚拟化的技术又分为时分复用技术和空分复用技术

时分复用技术:资源在时间上进行复用,不同程序并发使用,例如:

虚拟处理器技术:就是借助多道程序技术为每个程序建立进程,多个进程之间分时的使用处理器

虚拟设备技术:物理设备虚拟为多个逻辑设备,每个程序占用一个逻辑设备,多个设备通过逻辑设备并发访问

空分复用技术:用来实现虚拟磁盘、虚拟内存等

虚拟磁盘:一块物理磁盘虚拟为逻辑磁盘,如C、D、E等逻辑磁盘,这样每个磁盘使用起来相对独立、互不影响更加安全和方便

虚拟内存:在逻辑上扩大程序的存储容量,这样我们就可以使用比实际内存更大的容量,内存在计算机的作用是无可替代的,所的程序都需要加载到内存中才能执行,如果执行的程序过大或者过多,就会导致内存不足。为了防止这样的情况,就有了虚拟内存的诞生,在Windows系统中,使用一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存

4.异步性

概述:在多道程序的设计之下,允许多个程序并发执行,但因进程在使用资源时需要等待或者放弃,所以进程的执行并不是连续的,而是以断断续续的方式进行的

例如:有三个程序A、B、C它们在交替的运行,并使用同一资源,目前是A正在使用资源,假设A使用完毕后释放了该资源,B、C开始同时竞争这一资源,而我们不知道谁最后竞争到了这一资源,这时进程就是在以不可预知的形式在向前推进,我们不知道程序何时执行、何时暂停、何时完成,最后就导致了程序的异步性

进程和程序的区别:1.程序是静止的而进程是动态的

2.程序是永久存在的。进程是程序在数据集上的一次执行,是暂时的

3.程序和进程并非是一一对应的。一个进程肯定有与之对应的程序而且只有一个,一个程序可能没有与之对应的进程(这是因为程序还有被运行),也有可能有多个进程与之对应,这是因为一个程序运行在不同的数据集上就构成了不同的进程

五.进程与线程

1.进程

概述:进程是系统进行资源分配和调度的基本单位,并作为程序独立运行的载体保证程序正运行,使得操作系统的资源利用率大大提升

2.进程的实体

概述:我们用主存(内存分为主存(DRAM)和Cache(SRAM))中的进程形态来描述进程的实体,在主存中进程是一段连续存储的空间,这个空间我们称为进程控制块(PCB)

进程控制块:1.PCB是用来描述和控制进程运行的通用数据结构

2.记录进程当前状态和控制进程运行的全部信息

3.PCB是进程能够独立运行的基本单位

4.PCB是常在内存中的,它会被存放在内存中专门的PCB区域内,这是因为操作系统进行调度作业时经常会访问到PCB

在控制块中存放着进程的一些重要信息,如:标识符、状态、优先级、程序计数器、内存指针、上下文数据、IO状态信息、记账信息等

下面我们对这些重要的信息做一个详细的描述:

标识符:一个进程唯一的标记,用来区别于其他进程

状态:说明进程当前的运行状态

优先级:进程执行的优先次序

程序计数器:记录进程即将被执行的下一条指令的地址

内存指针:记录的是程序代码和进程数据相关的地址

上下文数据:记录的是进程执行时处理器存储的数据

IO状态信息:被进程IO操作所占用的文件列表

记账信息:进程所使用的处理器时间等

3.进程的类型

1)前台进程:是指用户可以在终端和进程相互交互的进程

2)后台进程:是指没有占用终端的进程,后台进程不需要和用户交互,在Linux系统中用“”结尾的命令运行的进程可以在后台运行

3)守护进程:是指在系统启动时启动,并且在系统关闭时结束的进程

4.进程的标记

进程ID:进程ID是进程的唯一标记,每个进程拥有不同的ID。

ID为0的进程称为idle进程,是系统创建的第一个进程,idle进程的运行时间其实就是指系统的空闲时间ID为1的进程称为init进程,它是0号进程的子进程,负责完成系统的初始化工作,并且init进程是所有用户的起始进程

进程状态:以下的状态符号具体是体现在Linux系统中的

5.进程状态模型

概述:进程的状态模型分为五种,分别是创建、就绪、阻塞、执行和终止

下面我们就来详细的说明一下这五大状态:

创建状态:进程分配到了PCB但其他资源尚未准备就绪时称为创建状态

就绪状态:当进程被分配到除CPU以外的所有必要资源后,此时的进程状态就称为就绪状态

阻塞状态:进程因为某种原因如:IO操作,不能立刻执行而放弃CPU使用权的状态称为阻塞状态

执行状态:当进程处在就绪状态并获得CPU的使用权后,就可以执行了,此时的状态就称为执行状态(在单核CPU中只能有一个进程是处在执行状态的)

终止状态:进程执行完成由系统回收资源后的状态称为终止状态

6.进程间的同步

1)进程同步

概述:在多道程序设计下,多进程之间需要共同完成一项任务时,需要相互制约、互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。

2)临界资源

概述:临界资源指的某些资源虽作为共享资源却无法同时被多个进程同时使用的资源,如:打印机

3)我们为什么需要进程间的同步?

在讨论这个问题之前,我们先来看一个经典的问题:哲学家进餐问题

有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,该哲学家进餐完毕后,放下左右两只筷子又继续思考。

限制的条件

(1)只有拿到两只筷子时,哲学家才能吃饭。

(2)如果筷子已被别人拿走,则必须等别人吃完之后才能拿到筷子。

(3)任一哲学家在自己未拿到两只筷子吃完饭前,不会放下手中已经拿到的筷子

我们描述一下哲学家们进餐的流程:

其中一个哲学家拿起左边的筷子,然后准备去拿右边的筷子,但发现右边的筷子已经被拿走了,他只能等待右边的筷子放回原位才能就餐,这时他不会放下左边的筷子,直到他拿到右边的筷子并就餐之后才会把筷子放回原位,这样看起来好像没什么问题。

现在我们来讨论一种极端的情况:

这五个科学家同时拿起左手边的筷子,并在拿到右手边的筷子之前,不会放下已经拿到的左手边的筷子,而他们必须要有左右两只筷子才可以就餐,那么最终的结果是怎样的?我想大家都已经猜到了!

产生这种极端情况的根本原因是:哲学家之间没有进行相互的沟通

我们把这个问题引入到进程当中,就可以解释了我们为什么需要进程之间的同步,它帮助我们解决了在多个并发执行的进程之间如何对临界资源进行有效协调的问题

4)进程间同步的原则

空闲让进:当临界资源没有被占用时,这时可以允许一个进程使用该临界资源忙则等待:当临界资源正在被某进程占用时,其他的进程必须等待该临界资源被释放才可以使用等待:对等待访问的进程,应保证在有限的时间内能访问到临界资源让权等待:当进程暂时不能访问到所需要的临界资源时,应主动的释放CPU资源5)进程间同步的方法

消息队列共享存储信号量

7.进程调度

1)概述:是指计算机通过某种决策决定哪个就绪程序可以获得CPU的使用权,它会保留原来进程的运行信息,然后选择新的进程并分配给它CPU的使用权

2)调度机制:(1)就绪队列的排队机制:就绪进程按照一定的方式进行排队,以便调度程序可以快速的找到就绪进程

(2)选择运行进程的委派机制:调度程序按照相应的策略选择就绪进程,并分配给它CPU使用权

(3)进程的上下文切换机制:保存当前进程的上下文环境到内存中,并把要执行的进程的上下文环境加载到CPU中

问题:若当前的进程没有执行完,操作系统就执行进程的调度,那当前的进程会如何呢?

答:我们先要了解一下在操作系统中进程的调度可以分为两类:抢占式调度和非抢占式调度

抢占式调度:操作系统允许调度程序以某种策略暂停当前正在运行的进程,把CPU资源分给其他的就绪进程

非抢占式调度:调度程序不会以任何形式抢占已经被某进程占用的CPU资源而分给其他的就绪进程,直到该进程执行完毕或者遇到IO阻塞

对比:抢占式调度比非抢占式调度的系统开销大、但相对公平可以每个就绪进程都能得到运行、适用于大部分的场景

3)调度算法:(1)先来先服务调度算法:是指按照就绪队列中就绪进程的先后顺序进行调度

(2)短进程优先调度算法:是指调度程序优先选择运行时间可能最短的就绪进程,但如果就绪列中有需要运行时间比较长的就绪进程,那么这种算法对它是不友好的

(3)高优先权优先调度算法:是指调度程序优先选择权重比较高的就绪进程进行处理,这种算法的好处是可以及时的处理一些比较紧急的任务,如:前台进程就要比后台进程的权重要高,这是因为前台进程是需要和用户交互的进程

(4)时间轮转调度算法:这是比较公平的算法,它是指按照先来先服务的原则给就绪队列中的每个进程分配相同的运行时间来运行,之后不管当前正在运行的进程有没有执行完,它都会把CPU资源分配给下一个就绪进程,但它并不能保证对用户能够及时的响应

8.死锁现象

1)概述:死锁是指两个或两个以上的进程因为竞争资源或因为彼此之间通信时调度的顺序不当而造成的阻塞现象

2)产生的必要条件:(1)互斥条件:是指一个进程对某资源的使用是排他性的,除非这个进程主动释放资源否则其他的进程想使用此资源只能等待

(2)请求保持条件:在互斥的条件之下,这个进程又请求了一个新的资源,恰好这个资源已经被占用,这时此进程请求不到想要的资源但也不会释放已经占有的资源,这就是请求保持条件

(3)不可剥夺条件:进程正在使用的资源在未完成之前不能被强制剥夺,只能由自身释放

(4)环路等待条件:发生死锁现象时,必会存在进程与资源形成的等待环形链

3)避免死锁的方法:(1)系统规定进程运行之前,一次性申请好所有所需的资源,这样我们就破坏了死锁产生必要条件的第(2)条:请求保持条件

(2)当一个进程请求新的资源而得不到时,那么它必须释放已经占有的资源,这样我们就破坏了必要条件中的第(3)条:不可剥夺条件

(3)把资源按照线性排序,规定进程申请资源时只能按照所需的资源顺序来申请,这样就破坏了第(4)条:环路等待条件

9.线程

概述:1)线程是操作系统进行运行调度的最小单位。

2)操作系统对进程的调度实际上就是对进程里面线程的调度,它包含在进程当中,是进程中实际运行工作的单位。

3)一个进程里面可以并发多个线程,每个线程执行不同的任务。

4)一个进程中的多个线程是共享进程资源的。

问题:线程之间需要同步吗?

答:同一个进程内的多个线程之间,因为也是存在竞争共享资源的问题,所以也是需要线程同步机制的

线程间同步的方法:

1)互斥量

2)读写锁

3)自旋锁

4)条件变量

10.进程与线程对比




转载请注明:http://www.92nongye.com/xxnr/xxnr/204627164.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了