首页 > 系统相关 >第二章操作系统进程与线程

第二章操作系统进程与线程

时间:2024-03-14 14:02:47浏览次数:23  
标签:操作系统 阻塞 PCB 线程 内核 进程 第二章

一、进程的概念组成特征

        程序的概念:静态的,存放在磁盘内的可执行文件,一系列的指令集合
        进程的概念:动态的,程序的执行过程
        进程创建时,会被操作系统分配一个唯一的、不重复的编号
                进程实体(进程映像)的组成:PCB、程序段、数据段
                进程控制块(PCB):
                        进程存在的唯一标志,进程创建时分配,进程结束时被回收
                                1、进程标识符(PID)、用户标识符(UID)
                                2、进程控制管理信息
                                3、资源分配清单 
                                4、处理机相关信息
                进程的特征:动态性(最基本特征)、并发性、独立性、异步性、结构性

二、进程的状态转换

进程的三种基本状态:运行、就绪、阻塞

进程的状态:
        创建态:进程正在被创建—资源分配,初始化PCB
        就绪态:创建完成具备运行条件,由于没有空闲CPU暂时不能运行(只缺CPU的资源就可以运行)
        运行态:在CPU上正在运行的进程
        阻塞态:由于某种资源的等待,等待某个事件的发生,进程无法继续向下执行终止态:进程执行结束,或者不可修复的错误

        PS:运行态=>阻塞态是进程由于资源不足主动请求等待阻塞态=>就绪态是被动等待资源的获取,阻塞态不能直接进入运行态,就绪态也不能直接转换为阻塞态
        进程PCB中会有一个state变量表示进程当前的状态,如1是创建态 2 是就绪态。。。。

三、进程的控制

        进程控制:实现进程的状态转换—由原语(一气呵成,不可中断)实现(关中断和开中断实现)
        进程的创建:
                1、创建原语:申请PCB 、分配所需资源、初始化、将PCB插入就绪队列
                2、引起创建的事件:用户登录、作业调度、提供服务、应用请求
        进程的撤销:
                
1、撤销原语:找到进程PCB、若PCB正在运行,立即剥夺CPU,将CPU分配给其他进程、终止所有子进程、将资源归还父进程或者操作系统、删除PCB
                2、引起终止的事件:正常结束、异常结束、外界干预
        进程的阻塞
                1、阻塞原语:找到PCB、保护运行现场、更改信息为阻塞态、暂停运行、插入道等待队列
                2、引起原因:等待某种资源分配,需要等待其他进程合作完成工作
        进程的唤醒:
                
1、唤醒原语:找到PCB 、从等待队列移除、改成就绪态、插入就绪队列等待调度
                2、引起原因:等待事件发生(阻塞与唤醒要成对存在)
        进程的切换:(更改两个进程的状态)
                1、切换原语:将运行环境存入PCB、移入相应队列,选择另一个进程执行,更新其PCB,根据PCB恢复运行环境
                2、引起原因:进程时间片到、有更高优先级进程到达、进程主动阻塞,进程终止

四、进程通信

        什么是进程通信(IPC):进程之间产生的数据进程的交互需要操作系统的支持,各进程之间内存地址相互独立(出于安全考虑)
        共享存储:基于数据结构的共享,基于存储区的共享(为了避免出错,访问共享存储区是互斥访问的)以格式化的消息为单位,通过操作系统提供的原语进行数据交换直接通信方式、间接通信方式
        消息头(信箱通信方式):发送进程ID 接受进程ID 消息长度等信息
        管道通信:数据流动是单向的 一个进程向另一个进程发送管道大小固定,管道写满后写入将被堵塞,读空后读将被阻塞

五、线程的概念

        什么是线程:程序执行的最小单位,基本CPU执行单元。(增加进程的并发性)引入线程后,进程是资源分配的基本单位,线程是调度的基本单位进程并发的同时,线程也可以并发,同时系统开销降低

        线程的属性:
                
1、处理机调度单位,多CPU计算机中,各线程可占有不同CPU
                2、同一个进程中,线程共享进程资源
                3、线程几乎不拥有系统资源
                4、不同进程中线程切换会引起进程切换
                5、同一进程中线程切换不会引起进程切换
                6、同一进程内线程之间通信无需操作系统干涉

六、线程的实现方式、多线程模型

        用户级线程:通过线程库实现线程管理工作,在用户态下完成,无需操作系统干预(操作系统意识不到线程的存在)(就是从用户视角看得到的线程)

        优点:线程切换不需要切换到核心态,系统开销小,效率高
        缺点:一个用户级线程被阻塞,整个进程被阻塞,并发性不高,多线程不可在多处理机上并行运行

        内核级线程:操作系统来管理,切换时需要变态,必须内核态下切换(操作系统内核能看到的线程)(处理机分配的单位)

        优点:一个被阻塞后,其他线程仍可运行,并发能力强,可在多处理机上并行执行
        缺点:管理成本高,开销大,线程切换需要操作系统内核来完成

        一对一模型:一个用户级线程映射到一个内核级线程,一一对应

        优点:一个被阻塞,别的可以继续执行,并发能力强,可多处理机并行运行
        缺点:一个用户进程程占用多个内核线程,管理成本高,开销大,线程切换需要操作系统内核来完成



        多对一模型:多个用户级线程映射到一个内核级线程,一个进程只分配一个内核级线程

        优点:用户级线程切换在用户态就可进行,操作系统开销小,效率高
        缺点:一个被阻塞后整个进程都被阻塞,并发性不高,多线程不可在多处理机上并行运行


        多对多模型:N个用户级线程映射到M个内核级线程,每个进程对应M个内核级线程(N≥M)

        优点:克服多对一了并发度

标签:操作系统,阻塞,PCB,线程,内核,进程,第二章
From: https://blog.csdn.net/weixin_56233402/article/details/136665598

相关文章

  • 嵌入式——线程
    嵌入式——线程......
  • Java线程池参数详解及其示例
    线程池在Java并发编程中占据核心地位,通过复用线程资源,可以极大地提高系统资源利用率和响应速度。Java中的java.util.concurrent.ThreadPoolExecutor类提供了丰富的参数配置以满足不同场景的需求。下面我们将逐一介绍线程池的主要构建参数,并给出相应的例子说明:1.corePoolSi......
  • 多线程系列(十九) -Future使用详解
    一、摘要在前几篇线程系列文章中,我们介绍了线程池的相关技术,任务执行类只需要实现Runnable接口,然后交给线程池,就可以轻松的实现异步执行多个任务的目标,提升程序的执行效率,比如如下异步执行任务下载。//创建一个线程池ExecutorServiceexecutor=Executors.newFixedThreadPool......
  • 揭秘操作系统内核:深入浅出进程阻塞与唤醒
    一、进程与线程        操作系统要运行一个可执行的程序,首先要将程序文件加载到内存,然后CPU去读取和执行这些指令,而一个进程就是“一次程序执行的过程”,内核会给每一个进程创建一个名为task_struct的数据结构,而内核也是一段程序,系统启动时就被加载到了内存中。  ......
  • 阿里一面:Java中如何停止线程?
    引言在Java多线程编程中,正确且安全地停止线程是一项关键技能。简单粗暴地“杀死”线程不仅可能导致数据不一致性,还可能引发各种难以预测的错误。本文将探讨几种在Java中优雅地停止线程的方法,以确保程序的健壮性和可靠性。使用标志位(共享变量)停止线程一种常见的做法是使用一个bo......
  • 【操作系统】执行系统调用后发生了什么?
    执行系统调用后发生了什么?什么是系统调用?系统调用是受控的内核入口,借助于这一机制,进程可以请求内核以自己的名字去执行某些动作。以应用程序编程接口(API)的形式,内核提供了一系列服务供程序访问。包括创建进程、执行I/O,以及为进程间通信创建管道等。执行系统调用后发生的事件......
  • Linux线程池的创建(超详细解析)
    线程池:若干个线程组合在一起形成线程池;为什么需要线程池:多线程版本服务器一个客户端就需要创建一个线程,如果客户端太多,明显不太合适;创建思路:我们需要一个线程池结构体,然后这个结构体里面包含任务池,这个线程池结构体是全局变量,需要使用互斥锁,当子线程执行回调函数时,把该线程......
  • Java多线程&并发篇2024
    目录Java全技术栈面试题合集地址Java多线程&并发篇1.volatile能使得一个非原子操作变成原子操作吗?2.volatile修饰符的有过什么实践?3.volatile类型变量提供什么保证?4.Java中怎么获取一份线程dump文件?5.什么是线程局部变量?6.Java中sleep方法和wait方法的区别?7.......
  • JMeter接口性能压测之阶梯加压线程组(Stepping Thread Group)
    一、前言1、阶梯式场景(负载测试):该场景主要应用在负载测试只里面,通过设定一定的并发线程数,给定加压规则,遵循“缓起步,快结束”的原则,不断地增加并发用户来找到系统的性能瓶颈,进而有针对性的进行各方面的系统优化。2、Stepping Thread Group的作用减少服务器的瞬时压力,......
  • C# 实现Thread多线程
    在C#中,可以使用Thread类来实现多线程编程。多线程是同时执行多个任务的一种方式,每个任务在一个独立的线程中运行,有着各自的执行流和上下文。使用多线程的场景:需要同时执行多个耗时的任务,以提高程序的响应性能。需要处理实时数据,比如即时通讯、数据流处理等。需要并行执行......