首页 > 系统相关 >操作系统复习:进程和线程的理解串记

操作系统复习:进程和线程的理解串记

时间:2024-05-30 14:58:50浏览次数:16  
标签:串记 ikun 调度 互斥 线程 进程 资源 复习

进程和线程

        我是一个ikun,我坐着不动(静态)就是ikun程序,我开始执行任务唱、跳、rap和打篮球(动态)就是ikun进程。在ikun进程中,我们的孩子就是线程。

        为了ikun进程们能公平地抢坤坤哥哥下的蛋(临界资源),坤坤哥哥(CPU)会安排(进程调度)时间片给每个ikun进程,规定每个人在一段时间内(CPU时间片)可以执行任务的顺序(进程同步),这确保了每个进程都有机会使用CPU而不会被其他进程无限期地阻塞。

        当我们每个ikun进程在抢蛋时,一次只能有一个ikun进程可以使用这个资源(进程互斥)。如果多个进程同时抢蛋,可能会导致数据冲突和不一致,因此必须保证互斥访问。

        如果每个ikun进程都不同意坤坤哥哥提出的调度方案,导致大家都在等待对方释放资源,而没有人能继续执行任务,这种情况就会形成死锁。死锁意味着多个进程互相等待对方占用的资源,导致所有进程都无法继续执行。


进程和线程的详细概念

进程
静态的程序跑起来就是动态的进程,一个程序可以跑多次就有了多个进程(引入进程是为了更好地描述和控制程序的并发执行)。进程的组成是程序段、数据段、PCB。PCB就是进程的“学生证”,记录了进程的各种信息(进程描述信息、进程控制和管理信息、资源分配清单、CPU上下文)。

进程的状态
进程有五种状态:

  1. 创建态:终端用户登录系统、用户程序应用请求、系统提供服务、作业调度。
  2. 就绪态:等待CPU分配时间片。
  3. 运行态:占用CPU执行任务。
  4. 等待/阻塞态:期待的事件没有发生(如请求资源失败)。
  5. 终止态:正常或异常结束、外界干扰。

进程通信
进程之间需要相互通信,主要通过消息传递和共享内存来实现。

线程
线程是进程的轻量级子任务,同一进程的线程共享地址空间和资源,因此可以更高效地进行任务切换和协作。线程有三种实现方式:

  1. 用户级线程:多对一,不需要内核支持,切换开销小。
  2. 内核级线程:一对一,内核支持,切换开销大。
  3. 组合方式:多对多,结合了以上两种方式的优点。

CPU调度

调度类型

  1. 高级调度(作业调度)
  2. 中级调度(内存调度)
  3. 低级调度(进程调度)

调度模式

  1. 抢占式:高优先级、时间片轮转、多级反馈队列。
  2. 非抢占式:先来先服务、短作业优先、高响应比。

同步与互斥

临界区:对临界资源进行操作的代码段。

互斥:确保一次只有一个进程进入临界区。实现方法包括:

  1. 软件方法:单标志法、双标志法、Peterson算法等。
  2. 硬件方法:中断屏蔽、TSL指令和Swap指令。

信号量机制

  1. 整型信号量:只记录资源数目。
  2. 记录型信号量:记录资源数目并改变进程状态。
    • P操作:申请资源,若资源不足则等待。
    • V操作:释放资源,唤醒等待进程。

经典场景:

  1. 生产者-消费者问题:协调生产和消费的同步问题。
  2. 吸烟者问题:如何实现公平轮流。
  3. 读者-写者问题:控制读写操作的同步与互斥。
  4. 哲学家进餐问题:避免死锁和饥饿问题。

死锁

死锁条件

  1. 互斥条件:资源独占。
  2. 不可剥夺条件:资源不可强制释放。
  3. 请求并保持条件:持有资源时请求新的资源。
  4. 循环等待:存在循环等待链。

解决方案

  1. 预防:破坏上述四个条件。
  2. 防止:如银行家算法。
  3. 检测和解除:通过资源分配图检测,资源剥夺、撤销进程、进程回退等方法解除。

这样的小故事可以帮助你更好地理解操作系统中进程和线程的概念以及它们的管理机制,包括调度、同步、互斥和死锁处理。

标签:串记,ikun,调度,互斥,线程,进程,资源,复习
From: https://blog.csdn.net/qq_29992017/article/details/139319881

相关文章

  • 线程简述:协程、抢占式、sleep、wait、interrupt,优雅中断线程,线程通信等
    思维导图在此:java线程简述-CSDN博客1、线程与协程协程-->线程-->进程,协程最小协程:用户态,go语言线程:用户态、内核态都有。cpu调度的最小单位。是工人,从进程获取资源,多个线程共享进程的资源。进程:内核态。操作系统调度资源的最小单位。是资源管家。2、调度机制协同式。......
  • 在 Rust 多线程应用程序中锁定 Mutex 时发生死锁
    我正在开发一个Rust应用程序,其中有一个与PacketManager交互的BusDevice。在多线程环境中尝试锁定一个Mutex时,我遇到了死锁。应用程序被卡在锁定Mutex的那一行,再也无法继续。详细描述:在我的Rust应用程序中,我有一个使用PacketManager发送确认数据包的BusDevice。BusD......
  • 给师妹写的《Java并发编程之线程池十八问》被表扬啦!
    写在开头  之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为《Java并发编程之线程池十八问》,今天聊天时受了学妹的夸赞,心里很开心,毕竟自己整理的东西对别人起到了一点帮助,记录一下!Java并发编程之线程池十八问  经过之前......
  • 物理复习|电学
    一、静电场基础库伦定律:\(f=\frac{1}{4\pi\varepsilon_0}\frac{q_1q_2}{r^2}\)高斯定理:\(\oiint\boldsymbol{E}·\mathrm{d}\boldsymbol{S}=\frac{1}{\varepsilon_0}\sumq_内\)环路定理:\(\oint\limits_{l}\boldsymbol{E}\cdot\mathrm{d}\boldsymbol{l}=0\)电势定义:......
  • 【Rust】——使用消息在线程之间传递数据
    ......
  • C++ 跨线程 传递指针
    目录在C++中跨线程传递指针时,需要注意线程安全和生命周期管理的问题。以下是一些常见的方法,用于在C++中安全地跨线程传递指针:使用智能指针和线程安全队列结合使用std::shared_ptr和线程安全的队列(如std::queue配合互斥锁)是一种常见的方法。#include<iostream>#include<t......
  • C++ 线程同步condition_variable的使用
    一,condition_variable使用步骤创建一个scondition_variable对象。创建一个互斥量对象mutex。创建两个线程:等待线程和唤醒线程。在等待线程中,使用unique_lock锁定互斥量,并调用wait函数进入等待状态。在唤醒线程lock_guard锁定互斥量,并调用notify_one或notify_all函数唤醒等......
  • 线程练习题
    编写一个程序,主线程中创建一个子线程,容纳后让主线程先退出并返回一个值,子线程接合主线程后输出主线程的退出值,然后子线程退出./********************************************************************* filename:pthread.c* author :Dazz* date :2024/05/29*......
  • 协程 进程 线程的区别
    协程(Coroutine)、进程(Process)和线程(Thread)是三种并发编程的技术,它们在并发控制、资源使用和上下文切换方面有不同的特点和用途。以下是它们的主要区别:进程定义:进程是操作系统分配资源和调度的基本单位。每个进程拥有独立的地址空间、全局变量、堆和栈。资源开销:进程之间的切换......
  • JavaScript基础ECMAScript知识点复习整理
    **本篇文章食用的简单说明**本篇文章为复习JavaScript基础ECMAScript进行了知识点梳理,加粗部分为重点!!!加粗加红为重重点!!!由于JavaScript内容比较多,本篇文章只是基础部分,WebAPIs(DOM和BOM)等知识在后续过程中会继续更新,欢迎小伙伴在评论区补充~推荐大家按记忆梳理部分的内容自......