Linux杂项知识

Linux的启动过程

Linux 的启动过程大致可以分为以下几个阶段:

1. BIOS/UEFI 加电自检

  • 当计算机加电时,BIOSUEFI 会首先执行一系列的硬件自检(POST,Power-On Self Test),检查系统是否正常运行。
  • 接下来,BIOS/UEFI 会查找并加载存储设备上的引导加载程序(如硬盘、USB、光盘等),通常存储在主引导记录(MBR)或 GUID 分区表(GPT)中。

2. 引导加载程序(Bootloader)

  • MBR 或 GPT 中的引导加载程序会被加载到内存。常见的引导加载程序包括 GRUB(Grand Unified Bootloader)或 LILO
  • 引导加载程序负责选择和加载 Linux 内核。它允许用户选择要启动的内核或操作系统(例如双系统选择)。
  • 一旦用户选择了要启动的内核,GRUB 会将内核加载到内存中,并将控制权交给内核。

3. 加载 Linux 内核

  • 内核被加载到内存后,它会解压并初始化自身。
  • 内核首先会检测硬件设备,并加载相应的驱动程序,以便能够与硬件进行通信。
  • 内核还会挂载根文件系统(通常存储在 /),然后启动第一个用户空间进程——init 进程(PID 为 1)。

4. init 进程启动

  • init 是所有用户进程的祖先,它是用户空间中的第一个进程。
  • 在大多数现代 Linux 发行版中,init 系统被替换为 systemdUpstart,它们作为系统的初始化系统,负责启动所有其他进程和服务。
  • init/systemd 读取配置文件来决定哪些服务和守护进程应该启动。

5. 启动服务和守护进程

  • init/systemd 根据系统配置启动各种服务和守护进程(例如网络服务、日志系统、文件系统挂载、设备管理等)。
  • 这些服务在后台运行,为系统提供各种功能。

6. 用户登录界面

  • 当所有的服务启动完成后,系统会进入用户登录界面。
  • 如果系统配置为启动图形界面(X Window System 或 Wayland),图形登录管理器(例如 GDM、LightDM)会启动。
  • 如果是纯终端模式,系统会启动终端登录提示符,用户可以在这里输入用户名和密码。

7. 用户会话

  • 用户成功登录后,用户的会话环境被初始化,包括加载用户的环境变量和设置。
  • 如果是图形化界面,窗口管理器或桌面环境(例如 GNOME、KDE)会被启动。
  • 系统处于可用状态,用户可以开始使用系统运行应用程序。

总结

  • BIOS/UEFI引导加载程序(GRUB)Linux 内核init/systemd启动服务用户登录界面用户会话

死锁的原因

常见的死锁原因:

  1. 资源竞争

    • 当多个线程或进程同时需要访问同一资源时,容易导致死锁。比如两个线程互相持有对方需要的资源,并且都不释放。
  2. 不当的锁定顺序

    • 如果两个或多个线程获取锁的顺序不同,可能导致循环等待。例如,线程1获取了锁A,线程2获取了锁B,然后它们都试图获取对方的锁,就可能发生死锁。
  3. 嵌套锁

    • 在持有一个锁的同时去获取另一个锁,容易造成资源的占有和等待,导致死锁。
  4. 资源不足

    • 当系统资源不足或者无法分配足够的资源时,进程或线程可能被阻塞,进一步增加了死锁的可能性。

死锁的条件

1. 互斥条件(Mutual Exclusion)

  • 资源只能被一个线程或进程独占使用。如果某个资源在被一个进程占用时,其他进程无法访问该资源。

2. 占有并等待(Hold and Wait)

  • 进程已经获得了某些资源,同时又请求新的资源,但这些资源被其他进程占有,此时该进程保持对已经获得资源的占有,同时等待其他资源释放。

3. 不可剥夺(No Preemption)

  • 已经分配给某个进程的资源不能被强制剥夺,必须由进程主动释放。当进程占有资源时,只有在它使用完资源并主动释放后,资源才能被其他进程使用。

4. 循环等待(Circular Wait)

  • 存在一个进程等待环形链,即有一组进程相互等待资源释放。进程A等待进程B占有的资源,进程B等待进程C占有的资源,最后进程C又在等待进程A占有的资源。

线程卡住了可能会导致什么问题

1. 死锁(Deadlock)

如果一个线程在等待某些资源(如锁、信号量等),而这些资源正好被其他线程持有,且这些线程也在等待第一个线程释放的资源,就会导致死锁。死锁会导致多个线程互相等待,最终导致程序无法继续执行。

2. 资源阻塞(Resource Blocking)

一个线程如果因为卡住而不能继续工作,可能会占用系统资源,如内存、文件句柄、网络连接等。这些资源无法被其他线程或进程使用,可能会导致系统资源的枯竭,影响系统性能。

3. 响应时间增加(Increased Latency)

如果卡住的线程是负责处理用户请求或关键任务的线程,程序的响应时间将显著增加,甚至会导致系统看起来失去响应(假死)。

4. 线程饥饿(Thread Starvation)

一个卡住的线程可能会占用某些资源,导致其他需要这些资源的线程无法执行。这种情况可能导致线程饥饿,即其他线程长时间得不到执行的机会。

5. 数据不一致(Data Inconsistency)

如果线程卡住的位置涉及数据操作,可能导致数据状态不完整或不一致。特别是在共享资源或临界区操作时,卡住的线程可能持有锁,导致其他线程无法访问这些资源。

6. 程序崩溃或超时(Program Crash or Timeout)

如果线程卡住的时间过长,某些系统或应用可能会认为程序发生了异常,从而引发崩溃或触发超时机制,导致程序被强制终止。

7. 降低系统整体性能(Degraded System Performance)

卡住的线程可能会让系统的多线程优势无法充分发挥,影响系统的并行性能,导致其他任务的执行效率降低。

总结来说,线程卡住可能会导致死锁资源阻塞响应延迟数据不一致等问题,严重时会影响整个系统的稳定性和性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/875416.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode面试经典150题-82.删除排序链表中的重复元素II

之前写过这个题的基础第83题,看本文之前一定要先看懂这个Leetcode面试经典150题-82.删除排序链表中的重复元素II前序-83.删除排序链表中的重复元素_删除链表中重复的元素-CSDN博客 直接上代码了,解法都在代码里,不懂就留言或者私信 /*** De…

C++---string类常见接口

介绍 string类详情>>>https://cplusplus.com/reference/string/string/?kwstring 1. string是表示字符串的字符串类(感觉就像一个动态的字符数组) 2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作…

突破瓶颈:Java并发编程的最佳实践与技巧,你了解了吗?

文章目录 1 什么是 Executor 和 ExecutorService ?这两个接口有什么区别?2 java.util.concurrent 标准库中 ExecutorService 的可用实现是什么 ?3 什么是 Java 内存模型( JMM )?描述下其目的和基本思想4 JM…

工业相机飞拍的原理及工作原理

工业相机飞拍(或称为工业高速相机飞行拍摄)是一种利用高速图像捕捉技术和精密运动控制系统进行高效图像采集的先进技术。它广泛应用于工业检测、质量控制和自动化生产等领域。本文将详细探讨工业相机飞拍的原理及其工作方式。 一、工业相机飞拍的基本概…

插件第一版基本完成

什么插件 Command Assist 经过多次修改和界面优化,Mac和Windows的适配,最终形态长这样: 欢迎下载使用,反馈问题和建议~ 主要作为日常开发的手边工具,功能不复杂,核心就是常用命令的管理,包括&…

35天学习小结

距离上次纪念日,已经过去了35天咯 算算也有5周了,在这一个月里,收获的也挺多,在这个过程中认识的大佬也是越来越多了hh 学到的东西,其实也没有很多,这个暑假多多少少还是有遗憾的~ 第一周 学习了一些有…

Good Die与Inked Die 介绍

Good Die与Inked Die在半导体行业中,特别是与闪存芯片相关的领域,是两个重要的概念,它们代表了芯片质量的不同等级。 Good Die 定义: Good Die,即良品颗粒,是指在晶圆生产过程中,经过严格测试后被认定为符合原厂规格要求、质量良好的芯片。这些芯片在切割、封装等后续工…

第15-02章:理解Class类并获取Class实例

我的后端学习大纲 我的Java学习大纲 1、Java反射机制原理图: 源代码通过Javac编译得到字节码文件,当我执行到new一个对象的时候,字节码文件会通过ClassLoader被加载,然后得到一个Class类对象,存放在堆中,加…

Redis搭建集群

功能概述 Redis Cluster是Redis的自带的官方分布式解决方案,提供数据分片、高可用功能,在3.0版本正式推出。 使用Redis Cluster能解决负载均衡的问题,内部采用哈希分片规则: 基础架构图如下所示: 图中最大的虚线部分…

Linux的历史,版本,Linux的环境安装、简单学习4个基本的Linux指令、创建普通用户等的介绍

文章目录 前言一、Linux的历史二、版本三、Linux的环境安装1. 腾讯云服务器的申请2. xshell的安装与使用 四、 简单学习4个基本的Linux指令1. ls2. pwd3. mkdir4. cd 五、创建普通用户总结 前言 Linux的历史,版本,Linux的环境安装、简单学习4个基本的Li…

PHP随时随地预订民宿酒店预订系统小程序源码

随时随地预订,民宿酒店预订系统让旅行更自由! 🌍 说走就走的旅行,从预订开始 旅行,总是让人心生向往,但繁琐的预订流程却常常让人望而却步。不过,现在有了“随时随地预订民宿酒店预订系统”&am…

RK3588九鼎创展方案在Arm集群服务器的项目中的应用分析​​

RK3588九鼎创展核心板,搭载8核瑞芯微3588芯片,具备高性能、低功耗以及强大的多媒体和AI处理能力。在Arm集群服务器项目中,RK3588系列芯片用有明显的性能优势。本文将结合RK3588芯片的性能特征以及九鼎创展的项目经验来分析RK3588在集群服务器…

【JAVA入门】Day34 - Stream流

【JAVA入门】Day34 - Stream流 文章目录 【JAVA入门】Day34 - Stream流一、Stream 流的作用和使用步骤1.Stream流的创建,数据的添加2. Stream流的中间方法3. Stream流的终结方法 Stream 流有什么作用?我们看一个例子: 【练习】需求&#xff…

swift qwen2-vl推理及加载lora使用案例

参考: https://swift.readthedocs.io/zh-cn/latest/Instruction/LLM%E5%BE%AE%E8%B0%83%E6%96%87%E6%A1%A3.html#%E5%BE%AE%E8%B0%83%E5%90%8E%E6%A8%A1%E5%9E%8B https://blog.csdn.net/weixin_42357472/article/details/142150209 SWIFT支持300+ LLM和50+ MLLM(多模态大模型…

利用高德+ArcGIS优雅获取任何感兴趣的矢量边界

荷花十里,清风鉴水,明月天衣。 四时之景不同,乐亦无穷尽也。今天呢,梧桐君给大家讲解一下,如何利用高德地图,随机所欲的获取shp边界数据。 文章主要分成以下几个步骤: 首先搜索你想获取的矢量…

发送成绩的app或小程序推荐

老师们,新学期的第一次月考马上开始,是不是还在为如何高效、便捷地发布成绩而头疼呢?别担心,都2024年了,我们有更智能的方式来解决这个问题! 给大家安利一个超级实用的工具——易查分小程序。这个小程序简…

element ui form 表单出现英文提示的解决方案

场景再现: 在使用 form 表单的时候,一般都需要对表单元素进行验证,错误就出现在了这里,除了配置的错误信息,还会出现一个 英文校验提示,如下图: 解决方案 出现的原因是在el-form-item中使用…

把设计模式用起来(3)用不好的原因之时机不对

上一篇:《把设计模式用起来(3)——用不好的原因 之 实践不足》https://blog.csdn.net/nanyu/article/details/141939342 本篇继续讲设计模式用不好的常见原因,这是第二个:使用设计模式的时机不对。 二、时机不对 这里…

望繁信科技与华恒生物正式签约,共同开启流程数字化转型新篇章

近日,上海望繁信科技有限公司(简称“望繁信科技”)与安徽华恒生物科技股份有限公司(简称“华恒生物”)成功举行了战略合作签约仪式。作为全球领先的合成生物制造企业,华恒生物将引入望繁信科技的流程智能管…

3分钟带你了解什么是数据目录

什么是数据目录? 数据目录,顾名思义就是“数据的目录”。这里的“数据”指的是元数据。数据目录通过管理这些元数据,形成一个可用的数据清单,使数据开发者、数据分析师等人员能够通过查阅和搜索等操作,快速找到所需的数…