🌈个人主页:小新_-
🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
🏆所属专栏:操作系统 欢迎订阅,持续更新中~~~
✨让小新带着你快乐的学习吧~✨
目录
一、进程的概念与特征
1、进程的概念
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
例如,一个人按照菜谱做菜的过程就是一个进程,而菜谱就是一个程序
2、进程的特征
进程是计算机系统中的一个基本概念,它是操作系统进行资源分配和调度的一个独立单位。进程具有以下特征:
- 动态性:进程的实质是程序的执行过程,是一个动态变化的过程。
- 并发性:多个进程可以在一个时间段内同时运行,它们在时间上是重叠的。
- 独立性:进程是系统中独立运行的基本单位,拥有自己的地址空间。
- 异步性:进程按照各自独立的、不可预知的速度向前推进。
- 结构性:每一个进程都会配置一个PCB。结构上看,进程有PCB、数据段、程序段组成。
二、进程的描述
1、进程的组成
(一)Process Control Block (PCB)进程控制块: 进程存在的唯一标志。
定义:系统中用于存放进程的描述和控制信息的数据结构。它是进程存在于系统的唯一标志。
进程控制块(Process Control Block,PCB)是操作系统中用于描述和控制进程运行状态的数据结构。它的四大作用包括:
- 进程标识:PCB中包含一个唯一的进程标识符(Process Identifier,PID),用于区分系统中的各个进程。
- 进程状态:PCB记录了进程的当前状态,如就绪(Ready)、运行(Running)、阻塞(Blocked)、挂起(Suspended)或终止(Terminated)等,以便于操作系统进行进程调度。
- 资源分配:PCB存储了进程所需的资源信息,包括内存分配情况、打开的文件描述符、分配的I/O设备等。
- 调度信息:PCB包含了进程调度所需的信息,如进程的优先级、调度策略、CPU时间片、进程的剩余执行时间等,这些信息帮助操作系统决定哪个进程应该获得CPU时间。
除了这四大作用,PCB还可能包含以下信息:
- 处理机状态:保存了进程的CPU状态信息,如寄存器的内容,这对于进程的挂起和恢复是必要的。
- 进程同步与通信信息:用于进程间同步和通信的数据,如信号量、互斥锁等。
- 会计信息:记录了进程的创建时间、运行时间、资源使用情况等,用于系统资源管理和计费。
- 代码和数据的地址:指向进程执行代码和数据的内存地址。
PCB是操作系统管理和调度进程的关键数据结构,它使得操作系统能够有效地控制进程的生命周期和资源分配。
(二)程序段:描述了进程要完成的功能,是进程执行时不可修改的部分。
(三)数据段:进程执行时用到的数据(用户输入的数据、常量、静态变量)。
【总结】
2、进程的状态与转换
进程在其生命周期内,由于系统中各进程之间的相互制约及系统的运行环境的变化,使得进程的状态也在不断地发生变化。通常进程有以下5种状态,前3种是进程的基本状态。
-
运行态。进程正在处理机上运行。在单处理机中,每个时刻只有一个进程处于运行态。
-
就绪态。进程获得了除处理机外的一切所需资源,一旦得到处理机,便可立即运行。系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列。
-
阻塞态,又称等待态。进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。系统通常将处干阻塞态的进程也排成一个队列,甚至根据阻塞原因的不同,设置多个阻塞队列。)
-
创建态。进程正在被创建,尚未转到就绪态。创建进程需要多个步骤:首先申请一个空白PCB,并向PCB中填写用于控制和管理进程的信息;然后为该进程分配运行时所必须的资源;最后把该进程转入就绪态并插入就绪队列。但是,如果进程所需的资源尚不能得到满足,如内存不足,则创建工作尚未完成,进程此时所处的状态称为创建态。
-
终止态。进程正从系统中消失,可能是进程正常结束或其他原因退出运行。进程需要结束运行时,系统首先将该进程置为终止态,然后进一步处理资源释放和回收等工作。
注意区别就绪态和等待态:就绪态是指进程仅缺少处理器,只要获得处理机资源就立即运行;而等待态是指进程需要其他资源(除了处理机)或等待某一事件。之所以把处理机和其他资源划分开,是因为在分时系统的时间片轮转机制中,每个进程分到的时间片是若干毫秒。也就是说,进程得到处理机的时间很短且非常频繁,进程在运行过程中实际上是频繁地转换到就绪态的;而其他资源(如外设)的使用和分配或某一事件的发生(如T/O 操作的完成)对应的时间相对来说很长,进程转换到等待态的次数也相对较少。这样来看,就绪态和等待态是进程生命周期中两个完全不同的状态,显然需要加以区分。
图2.1说明了5种进程状态的转换,而3种基本状态之间的转换如下:
- 就绪态→运行态:处于就绪态的进程被调度后,获得处理机资源(分派处理机时间片),于是进程由就绪态转换为运行态。
- 运行态一就绪态:处于运行态的进程在时间片用完后,不得不让出处理机,从而进程由运行态转换为就绪态。此外,在可剥夺的操作系统中,当有更高优先级的进程就绪时,调度程序将正在执行的进程转换为就绪态,让更高优先级的进程执行。
- 运行态一阻塞态:进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如IO操作的完成)时,它就从运行态转换为阻塞态。进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核过程的形式。
- 阻塞态一就绪态:进程等待的事件到来时,如VO操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞态转换为就绪态。
3、进程的组织——链接方式
(1)链式方式
操作系统会管理一系列的队列,每一个队列都会指向相应进程的PCB。列如,如图所示:
(2)索引方式
操作系统会给相应的进程建立对应的索引表,索引表的各种表项又会指向相应的PCB。列如,如图所示:
【总结】
三、进程控制
1、基本概念
1、什么是进程控制?
进程控制的主要功能是对系统中所有的进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转化等功能。(简单理解为:进程控制就是实现状态转化)
2、如何实现进程控制——用原语实现
首先复习一下第一章有关原语的知识点
那么,为何进程控制(状态转化)的国产需要“一气呵成”?
通过这个列子我们可以得到问题的答案:
“如果不能一气呵成”,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响到操作系统进行别对管理工作。
3、如何实现原语对“原子性”?
原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。
可以用“关中断指令”和“开中断指令”这俩个特权指令来实现原子性
2、相关原语
1、进程的创建(创建原语)
2、进程的终止(撤销原语)
3、进程的阻塞和唤醒(阻塞原语和唤醒原语)
4、进程的切换(切换原语)
【总结】
四、进程通信
1、什么是进程通信?
进程间通信(IPC)是指俩个进程之间数据交互
2、为什么进程间的通信需要操作系统支持?
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立
1、共享存储
在操作系统中,共享存储是指允许多个进程或多个计算机系统访问同一段物理存储空间的机制。这种存储空间可以是内存、硬盘或其他形式的存储设备。共享存储的主要目的是允许不同的进程或系统能够访问和操作相同的数据,从而实现数据的共享和协同工作。
【分类】
1、基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式
2、基于存储区的共享:操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。
2、消息传递
进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的“发送消息/接收小新”俩个原语进行数据交换。
【分类】
1、直接通信方式——消息发送进程要指明接收进程ID
2、间接通信方式——通过“信箱”间接地通信(又称为“信箱通信方式”)
3、管道通信
在操作系统中,进程间通信(IPC)是允许多个进程或线程交换信息的一种机制。管道(Pipe)是最早的IPC形式之一,它是一种单向通信机制,允许一个进程的输出成为另一个进程的输入。
1.管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
2.各进程要互斥地访问管道(由操作系统实现)
3.当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。
4. 当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。
5.管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:①一个管道允许多个写进程,一个读进程(2014年408真题高教社官方答案);②允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道读数据(Linux的方案)。
【总结】
五、线程概念
1、什么是线程,为什么要引入线程?
2、引入线程机制之后,有什么变化?
3、线程有哪些重要属性?
六、线程的实现方式
1、用户级线程
历史背景:早期的操作系统只支持进程,不支持线程。当时的“线程”是由线程库实现的。
1、线程的管理是由谁来实现的?
- 用户级线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换)
2、线程切换是否需要CPU变态?
- 用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。
3、操作系统是否能意识到用户线程的存在?
- 在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。"用户级线程"就是"从用户视角看能看到的线程"
1. 概念:用户级线程完全在用户空间实现,操作系统内核并不知道这些线程的存在。线程的创建、调度和管理完全由用户程序通过线程库来处理。
2. 优点:
- 高效的线程切换:因为不需要操作系统内核介入,线程切换非常快。
- 简单的实现:不需要操作系统内核支持,可以在不支持线程的操作系统上实现。
3. 缺点:
- 无法利用多核处理器:用户级线程无法实现真正的并行计算,因为它们在单核处理器上是串行执行的。
- 阻塞问题:如果一个用户级线程阻塞,整个进程都会被阻塞,因为操作系统内核无法将其他线程调度到CPU上。
2、内核级线程
1、线程的管理是由谁来实现的?
- 内核级线程的管理工作由操作系统内核完成
2、线程切换是否需要CPU变态?
- 线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
3、操作系统是否能意识到用户线程的存在?
- 操作系统会为每个内核级线程建立相应的TCB(Thread Control Block,线程控制块),通过TCB对线程进行管理。"内核级线程"就是"从操作系统内核视角看能看到的线程"
1. 概念:内核级线程是由操作系统内核直接支持的线程。内核知道这些线程的存在,并负责线程的调度和管理。
2. 优点:
真正的并行执行:在多核处理器上,内核级线程可以实现真正的并行执行。
良好的系统兼容性:内核级线程与操作系统内核紧密集成,可以利用操作系统提供的各种资源和调度策略。
3. 缺点:
线程切换开销大:因为涉及到操作系统内核,线程切换的开销相对较大。
资源消耗:每个内核级线程都需要操作系统分配独立的资源,如栈空间。
七、多线程模型
1、一对一模型
2、多对一模型
3、多对多模型
用户级线程和内核级线程的联系:
八、线程的状态与转化
1、状态与转化
与进程的状态与转化没有区别
2、组织与控制
如同每个进程有一个进程控制块一样,系统也为每个线程配置了一个线程控制块TCB,将所有用于控制和管理线程的信息记录在线程控制块中。
最后,感谢大家的观看!