![](https://img-blog.csdnimg.cn/direct/a9ff99a4a3cd4f4087218c3ae860d7bd.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux && 操作系统
文章平均质量分 96
Linux下的操作
无敌岩雀
内核是引擎,操作系统是汽车
展开
-
线程池的设计与实现:C++代码实现
在多线程编程中,线程池是一种管理和复用线程的机制。它包含了一个线程集合,用于执行提交给它的任务,而不需要每次任务到来时都创建新的线程。线程池通常由以下几个关键组件组成:任务队列、线程管理模块和线程池管理模块。原创 2024-06-17 10:15:00 · 821 阅读 · 6 评论 -
生产者消费者模型的同步与互斥:C++代码实现
在多线程编程中,生产者消费者模型是一种经典的设计模式,用于解决生产者和消费者之间的协作与资源共享问题。本文将深入探讨生产者消费者模型的基本概念和核心思想,以及其在实际应用中的优点和使用场景。特别地,我们将聚焦于消费者和生产者之间的同步与互斥控制策略,比较常见的两种实现方式:环形队列和阻塞队列。首先,我们会介绍生产者消费者模型的基础概念,探讨其背后的核心设计思想和关键组成部分。随后,详细分析不同实现方式中的同步和互斥机制,比较使用信号量与互斥锁的环形队列原创 2024-06-16 15:09:43 · 1069 阅读 · 3 评论 -
Linux多线程编程中的同步与互斥
本文介绍了线程同步等诸多概念,探讨了如何确保多个线程在共享资源上的正确协作。其次,深入剖析了互斥的概念,以及如何通过互斥锁来实现对临界区的保护,确保线程安全性和数据的一致性。在互斥锁部分,读者将了解互斥锁在Linux环境下的定义、使用方法以及实现原理,并通过示例代码演示了互斥锁的基本用法。随后,文章介绍了条件变量和信号量等其他重要的同步机制,以及可重入性和线程安全性的概念。最后,深入探讨了死锁问题,包括其产生的原因及如何预防和解决。原创 2024-06-14 09:18:18 · 933 阅读 · 4 评论 -
Linux线程:管理与控制
线程是操作系统能够进行调度的最小单位,是进程内的一个执行单元。它负责在程序里独立执行一个控制流(线程流),拥有独立的执行栈和程序计数器(PC),用于保存线程上下文信息。线程本身不拥有系统级的独立资源(如独立的内存空间、文件描述符表等),而是与同属一个进程的其他线程共享进程所拥有的全部资源。线程拥有一些运行中必不可少的资源,如程序计数器、一组寄存器和栈,以支持其独立的执行路径。在Linux中,线程是通过在相同的地址空间内创建多个结构体来实现的,这些结构体表示了线程的状态和相关信息。原创 2024-05-28 21:25:51 · 1040 阅读 · 3 评论 -
操作系统中内存的管理方式
Linux操作系统通过复杂的内存管理系统来管理物理内存和虚拟内存。在这个系统中,物理内存被抽象为struct page结构体,这是Linux内核中表示物理内存页的基本数据结构。内存管理的一个关键组成部分是内存页(memory page)。物理内存被划分为固定大小的页(通常是4KB),每个页都由一个`struct page`来表示。这个结构体包含了关于内存页的各种信息,如页是否在使用、页的内容是否在磁盘上(即交换出去)、页被哪个进程或哪些进程使用等。原创 2024-05-21 21:01:25 · 991 阅读 · 6 评论 -
Linux信号机制
Linux信号是操作系统中用于进程间通信、处理异常等情况的一种机制。它是由操作系统向一个进程或者线程发送的一种异步通知,用于通知该进程或线程某种事件已经发生,需要做出相应的处理。每个信号都有一个名字。这些名字都以三个字符SIG开头。在头文件中,这些信号都被定义为正整数(信号编号)。没有一个信号其编号为 0。POSIX 标准信号(Standard Signals):这些是传统的 Unix 信号,包括SIGINT(通常由 Ctrl+C 产生)、SIGTERM(请求终止)、SIGKILL。原创 2024-05-17 21:20:07 · 1089 阅读 · 3 评论 -
System V IPC(进程间通信)机制详解
在共享内存模型中,进程A和进程B都可以直接访问同一块物理内存区域(即“共享区”)。这意味着数据不需要通过系统调用或其他中间层进行复制或传输,从而减少了数据传输的开销。共享内存通过允许进程直接访问同一块物理内存区域,减少了数据传输和I/O操作的开销,降低了延迟,从而提高了进程间通信的效率。当A进程需要与B进程通信时,只需要把共享区的虚拟地址与物理地址的映射写入两进程的页表中。因此,进程A可以对该物理地址直接进行写入;而B进程则是通过页表的映射关系,从该物理地址直接进行读取。原创 2024-05-14 21:28:38 · 895 阅读 · 17 评论 -
Linux进程间通信——匿名管道和命名管道
Linux中的“万物皆文件”原则使得管道也被抽象为一个文件对象。这意味着进程可以通过标准的文件I/O操作(如read、write等)来访问管道,从而实现进程间的通信。因此我们可以说管道是基于文件的,让不同进程看到同一份资源的通信方式。对于管道而言,它允许一个进程的输出直接作为另一个进程的输入,而无需使用临时文件或其他中间存储机制。具体来说,管道在内存中创建了一个缓冲区,用于存储从写入端流向读取端的数据。这个缓冲区对于进程来说是透明的,进程只需要通过标准的文件I/O操作(如readwrite等)来访问它。原创 2024-05-13 08:00:00 · 624 阅读 · 6 评论 -
Linux动态库与静态库解析
在Linux系统开发中,库文件扮演着至关重要的角色。它们提供了程序运行所需的各种功能,使得开发者能够高效地复用代码,减少重复劳动。库文件通常分为动态库(也称为共享库)和静态库两种类型,它们在程序链接和运行阶段扮演着不同的角色。原创 2024-05-07 16:43:17 · 1165 阅读 · 4 评论 -
理解Linux文件系统
传统的磁盘与文件系统之应用中,一个分区就是只能够被格式化成为一个文件系统,所以我们可以说一个 filesystem 就是一个 partition。但是由于新技术的利用,例如我们常听到的LVM与软件磁盘阵列(software raid), 这些技术可以将一个分区格式化为多个文件系统(例如LVM),也能够将多个分区合成一个文件系统(LVM, RAID)! 所以说,目前我们在格式化时已经不再说成针对 partition 来格式化了, 通常我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分区。原创 2024-05-01 22:04:05 · 3964 阅读 · 5 评论 -
Linux文件系统中的软硬链接
在文件系统中,链接(Link)是一个重要的概念,它允许用户或系统通过不同的路径名访问同一文件或目录。链接分为硬链接(Hard Link)和软链接(Soft Link)两种。硬链接允许一个文件拥有多个文件名。这些文件名指向同一个inode,而该inode节点包含了文件的元信息(如文件大小、权限、所有者等)以及指向文件数据的指针,且文件所在的目录的inode与block的容量不发生改变。与硬链接不同,软链接不直接指向文件的inode节点,而是通过路径名来访问文件。原创 2024-05-01 19:45:59 · 849 阅读 · 1 评论 -
Linux下的进程管理:创建、终止、切换与等待
进程管理是操作系统中不可或缺的核心功能之一,它负责控制和协调系统中各个进程的执行,确保它们能够高效、安全地并发运行。进程的创建、终止、切换与等待更是管理的关键环节。这些操作不仅影响单个进程的生命周期,更直接关系到系统资源的分配与利用效率。原创 2024-04-24 21:16:26 · 4430 阅读 · 8 评论 -
Linux进程地址空间及其页表
进程地址空间是指每个进程在计算机内存中所占用的地址空间。它本质上是一种虚拟地址空间,是进程看待内存的方式,抽象出来的一个概念,由操作系统提供。这种地址空间不是物理地址,而是由内核中的结构体mm_struct表示,用于在进程控制块中完成各个数据区域的划分,并通过页表映射到物理内存上。每个进程都有自己独立的地址空间,意味着每个进程都有自己的内存地址范围,不会与其他进程冲突。这种独立性有助于防止地址的随意访问,保护物理内存与其他进程。同时,将进程管理和内存管理进行解耦合,保证进程的独立性。原创 2024-04-23 19:13:08 · 1236 阅读 · 2 评论 -
Linux环境变量深度解析
在Linux操作系统中,环境变量是一种特殊的变量,用于存储系统或用户配置的信息。它们以键值对(key-value pair)的形式存在,可以在整个系统中被不同的程序和脚本访问和使用。环境变量通常用于存储路径、系统设置、语言环境等关键信息,以便程序能够正确地运行和交互。环境变量具有全局性,一旦设置,就可以被当前用户或整个系统的所有进程所访问。这使得环境变量成为了一种非常有效的配置和管理系统资源的方式。原创 2024-04-20 19:44:55 · 2088 阅读 · 4 评论 -
Linux进程状态深度解析:探索进程的生命周期
在Linux系统中,进程状态是多种多样的,它们各自代表了进程的不同执行阶段和资源占用情况。这些状态可以大致分为几类:为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在 Linux内核里,进程有时候也叫做任务)。"X (dead)"可执行状态(R):进程正在运行或准备在CPU上运行。这通常表示进程处于可执行状态,等待获得CPU资源以执行其代码。可中断的睡眠状态(S):进程处于可中断的睡眠状态。这意味着进程正在等待某个条件成立,比如等待I/O操作完成。原创 2024-04-07 16:44:43 · 2798 阅读 · 9 评论 -
【Linux】用户切换及文件权限详解
Linux是一个基于Unix的操作系统内核,由芬兰程序员Linus Torvalds于1991年开发。Linux内核是开源的,这意味着任何人都可以查看、修改和重新分发它。Linux操作系统则是由Linux内核与其他软件组件(如GNU工具和图形界面)组成的完整操作系统。但Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统, 它包括GUI组件和许多其他实用工具。原创 2023-10-24 21:16:50 · 196 阅读 · 0 评论 -
【Linux】Shell基本命令——操作系统
命令行和sheill这两个概念常常是令人困惑的,在很多不正式的场合,这两个名词代表着相同的概念,即命令行解释器。然而从严格意义上讲,命令行指的是供用户输入命令的界面,其本质只是接受输入,然后把命令传递给命令解释器。后者就是shell。从本质上讲,shell是一个程序,它在用户和操作系统之间提供了一个面向行的可交互接口。用户在命令行中输入命令,运行在后台的Shell把命令转换成指令代码发送操作系统。shell提供了很多高级特性,使得用户和操作系统间的交互变得简单。原创 2023-11-12 10:37:26 · 368 阅读 · 3 评论 -
【Linux】make和makefile详解
当谈论到 Linux 中的软件构建工具时,不得不提到 Makefile。Makefile是一种文件,它包含了一组规则,用于指导构建系统在源代码中生成可执行文件或库。它是使用GNU Make软件的标准格式。Makefile 的主要目的是描述代码文件之间的依赖关系以及如何构建以达到特定目标。通过定义规则和命令,开发人员可以轻松地管理项目的复杂构建过程。Makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个 make 命令,整个工程 完全自动编译,极大的提高了软件开发的效率。原创 2024-02-01 17:30:52 · 1582 阅读 · 4 评论