
linux系统
文章平均质量分 95
系统内容
郭二哈
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux开发工具——vim,git的使用和gdb工具
本文介绍了Linux下三个常用开发工具的使用方法: vim文本编辑器:详细讲解命令模式、插入模式、底行模式的切换方式及常用操作命令,包括光标移动、复制粘贴、撤销恢复等,并提供了快速配置vim的方法。 git版本控制:通过gitee示例演示仓库创建、克隆、提交代码的基本流程,核心命令包括git add、commit、push等。 gdb调试工具:说明如何用-g选项编译debug程序,介绍断点设置、代码执行控制、变量查看等调试技巧,如list、break、next、print等命令的使用。 全文以实用操作为主,原创 2025-08-19 18:05:36 · 847 阅读 · 0 评论 -
IO多路转接—— select,poll,epoll
本文介绍了I/O多路转接技术中的select系统调用。select允许程序同时监视多个文件描述符上的事件就绪状态,核心功能是等待并检测文件描述符的就绪情况。文章详细解析了select函数的参数和返回值,包括文件描述符集fd_set的操作方法、超时设置timeval结构等。重点说明了socket读/写/异常就绪的条件,以及select的工作原理和基本流程。最后通过一个select服务器的实现框架,展示了如何初始化服务器、设置文件描述符集、处理就绪事件等关键步骤。select通过单线程同时监控多个文件描述符,有原创 2025-08-10 19:04:01 · 1120 阅读 · 0 评论 -
五种IO模型与⾮阻塞IO
文章摘要: I/O(输入/输出)是冯诺依曼体系中的核心操作,涉及数据在内存与外设(如磁盘、网卡)间的传输。操作系统通过中断机制感知外设数据就绪,而非主动轮询,以提升效率。对于网络数据包,内核使用sk_buff结构管理,通过指针操作实现链路层、网络层、传输层的逐层解包,避免数据拷贝,仅调整指针指向即可完成封装与分用。sk_buff设计高效且兼容多种协议,但其实际结构复杂,包含多层元数据和状态控制,支持网络协议栈的高性能处理。这一机制体现了操作系统“先描述,再组织”的核心思想。原创 2025-08-08 20:38:01 · 1294 阅读 · 0 评论 -
Linux——线程池的模拟实现
线程池技术是一种高效管理多线程任务的机制,通过预先创建一组线程并复用它们来执行短期任务,避免了频繁创建和销毁线程的开销。线程池适用于高并发场景(如Web服务器),能提高系统响应速度并防止资源耗尽。文章介绍了线程池的优势、适用场景,并提供了C++实现的线程封装类(Thread)和线程池模板类(ThreadPool),包含线程创建、任务队列管理、线程唤醒等功能。线程池通过控制线程数量(通常不超过CPU核心数)来平衡并行效率与系统稳定性,特别适合处理大量短时任务的场景。原创 2025-07-28 20:14:09 · 796 阅读 · 0 评论 -
Linux——死锁问题
本文介绍了死锁的概念、必要条件及预防和避免方法。死锁是指多个进程因互相申请被占用的资源而永久等待的状态,单线程也可能因代码错误、递归或信号处理导致死锁。死锁的四个必要条件包括互斥、请求与保持、不剥夺和循环等待。预防死锁可通过破坏任一条件实现,如减少共享资源、保证锁申请顺序一致或使用超时机制。死锁避免则通过动态检测资源分配安全性,银行家算法是最经典的避免算法之一,确保系统在安全状态下运行。原创 2025-07-28 15:54:14 · 772 阅读 · 0 评论 -
Linux——生产者消费者模型
摘要:生产者消费者模型解析 生产者消费者模型是一种经典的并发编程模型,通过引入缓冲区(超市)实现生产者和消费者的解耦。该模型提高了效率,支持忙闲不均,并通过互斥和同步机制保证线程安全。模型包含三种关系:生产者之间互斥、消费者之间互斥、生产者和消费者之间互斥+同步。文中实现了一个基于阻塞队列的版本,详细介绍了队列满/空时的阻塞机制、条件变量的使用以及伪唤醒问题的解决方法(使用while而非if判断)。最后给出了阻塞队列类的核心代码实现,包括入队、出队操作和线程同步机制。原创 2025-07-27 21:47:51 · 1079 阅读 · 0 评论 -
Linux——线程同步
本文介绍了多线程编程中同步与条件变量的核心概念及应用。首先通过抢票示例说明单纯互斥锁可能导致的线程饥饿问题,引入同步机制作为解决方案。同步在保证共享资源安全的基础上,通过条件变量实现线程执行顺序的合理调度。 条件变量包含等待队列和提示功能,关键接口包括初始化、销毁、等待(pthread_cond_wait)、单线程唤醒(pthread_cond_signal)和广播唤醒(pthread_cond_broadcast)。使用要点强调:1)线程必须在临界区内通过锁保护进入等待;2)可通过条件变量控制线程执行顺序原创 2025-07-26 22:07:34 · 927 阅读 · 0 评论 -
Linux——线程互斥
该文章摘要了多线程编程中的关键概念,包括共享资源、临界资源、临界区、互斥、原子性等。重点阐述了多线程不加锁保护共享资源会导致的数据不一致问题,并通过抢票程序实例演示了线程竞争导致票数变为负数的过程。文章详细解释了原子操作与互斥锁的区别,介绍了Linux中的互斥锁机制及其相关API函数(初始化、销毁、加锁等),并区分了全局锁和局部锁的使用场景。最后强调了保护共享资源的本质是对临界区代码进行保护,通过加锁确保任何时候最多只有一个线程能执行临界区代码。原创 2025-07-26 20:21:32 · 730 阅读 · 0 评论 -
Linux——线程(下)
摘要 本文详细介绍了Linux线程的相关概念和操作。线程共享进程的地址空间,包括栈区,并能瓜分进程的时间片资源。重点讲解了线程创建(pthread_create)、获取线程ID(pthread_self)、线程等待(pthread_join)、线程终止(pthread_exit/cancel)和线程分离(pthread_detach)等核心操作函数。深入分析了线程ID的本质是线程库维护的TCB结构体地址,而非内核LWP。线程库在进程共享区维护TCB结构,实现了对线程的用户级管理,与内核LWP解耦。通过系统调原创 2025-07-25 17:25:27 · 1024 阅读 · 0 评论 -
Linux——线程(上)
Linux线程实现与调度机制解析 摘要:本文深入剖析Linux系统中线程的实现原理与调度机制。Linux采用进程模拟线程(LWP),通过共享地址空间的task_struct实现线程管理,使线程成为CPU调度的基本单位。线程通过瓜分进程资源(代码/数据)实现轻量级执行流,共享进程结构体(mm_struct、页表等)。相比进程,线程具有创建/切换成本低、资源占用少等优势,特别适合并行计算和IO密集型任务。调度器直接以线程为单位进行调度,通过CPU亲和性优化降低切换开销。文章还分析了多线程编程的潜在问题,包括性能原创 2025-07-25 15:06:01 · 834 阅读 · 0 评论 -
Linux——信号
本文介绍了Linux系统中的信号机制,包括信号的基本概念、产生方式、保存方式以及处理方式。信号是一种异步事件通知机制,进程可以通过默认处理、自定义处理或忽略来处理信号。信号的产生方式包括键盘输入、系统调用、指令、硬件异常和软件条件。信号在进程中被保存在block(阻塞状态)、pending(未决状态)和handler(处理方法)三张表中。文章还详细讲解了信号集操作函数和信号屏蔽字的设置方法,并通过代码示例演示了信号的捕获、阻塞和pending表的查看。原创 2025-07-24 14:18:02 · 1070 阅读 · 0 评论 -
Linux——中断
本文深入探讨了计算机系统中的中断机制及其工作原理。文章首先通过程序阻塞问题引出硬件中断的概念,详细描述了外设通过中断控制器通知CPU的完整流程;随后介绍了时钟中断作为操作系统进行进程调度的基础机制;在软中断部分,解析了系统调用如何通过软中断实现,包括系统调用号的传递和处理过程;最后阐述了用户态与内核态的权限机制,说明操作系统如何通过权限控制保护内核安全。全文系统性地揭示了操作系统基于中断机制运行的本质,涵盖了硬件中断、时钟中断、软中断等关键概念,以及它们与系统调用、进程调度、权限管理的紧密联系。原创 2025-07-24 10:57:02 · 973 阅读 · 0 评论 -
Linux——System V 共享内存 IPC
共享内存通信原理与实现 共享内存是最高效的IPC通信方式,通过将物理内存映射到多个进程地址空间实现数据共享。其核心步骤包括: 创建共享内存:使用shmget函数,通过key标识内存段,设置权限和大小 内存映射:通过shmat将共享内存附加到进程地址空间 通信操作:进程可直接读写共享内存区域 资源释放:使用shmdt解除映射,shmctl或命令行删除共享内存 特点: 通信速度快(不经过内核) 双向通信能力 需要手动管理同步问题 生命周期与内核相同,需显式释放 关键参数: key:系统级标识(通常由ftok生成原创 2025-07-23 22:00:01 · 720 阅读 · 0 评论 -
Linux——命名管道
文章摘要: 本文介绍了命名管道的概念、创建与使用方法,并与匿名管道进行了比较。命名管道(FIFO)允许不相关进程间通信,通过mkfifo命令或函数创建,以文件形式存在,通过open、read、write操作实现数据交换。匿名管道仅限父子进程通信,而命名管道适用范围更广。两者均具有同步、字节流、单向通信和随进程销毁的特性,并遵循四种通信场景(读写速度差异及关闭行为)。文中提供了C++代码示例,演示了命名管道的读写端实现,并强调了实际开发中需添加函数调用成功判断。最后指出管道本质是内核缓冲区,删除文件不影响已打原创 2025-07-23 20:11:04 · 707 阅读 · 0 评论 -
Linux——进程间通信,匿名管道,进程池
本文主要探讨了进程间通信(IPC)的原理与实现,重点介绍了匿名管道及其特性。文章首先阐述了进程间通信的必要性,指出其是实现进程协作、数据共享和系统控制的关键机制。然后详细讲解了匿名管道的工作原理、使用方法和五种重要特性:血缘关系限制、自带同步机制、面向字节流、单向通信和生命周期绑定进程。通过代码示例展示了管道创建和父子进程通信的具体实现。文章最后介绍了进程池的概念和实现方法,包括管道管理、任务派发策略等,为构建高效进程通信系统提供了实用方案。原创 2025-07-22 21:02:40 · 1216 阅读 · 0 评论 -
Linux——动静态库的制作与使用
本文介绍了静态库和动态库的制作与使用方法。静态库在编译时链接到可执行文件中,而动态库在运行时加载。制作静态库使用ar指令,动态库使用gcc的-shared选项。文章详细说明了库的命名规范、打包方法以及四种动态库路径配置方案。静态库可通过-I、-L、-l选项指定路径使用,也可放入系统默认路径;动态库则需要额外配置运行时路径,包括拷贝到系统库目录、建立软链接、修改环境变量或更新ldconfig配置等方法。原创 2025-07-22 17:40:58 · 1051 阅读 · 0 评论 -
Linux——文件结构,重定向,缓冲区
Linux文件系统与操作摘要 本文介绍了Linux文件系统的核心概念和文件操作机制。主要内容包括: 文件理解:Linux系统采用"一切皆文件"的设计理念,将硬件设备抽象为文件统一管理。文件包含内容和属性两部分,即使空文件也占用磁盘空间。 文件操作:系统默认打开三个标准流(stdin/stdout/stderr)。文件操作核心接口包括: open():打开/创建文件,使用位图标记控制打开方式 write()/read():文件读写操作 文件描述符:实质是进程文件表数组的下标,通过该机制定位原创 2025-07-21 20:02:25 · 693 阅读 · 0 评论 -
Linux——自制shell命令行解释器
本文介绍了一个简单的shell实现框架,主要包括命令提示符显示、用户输入获取、命令行解析、环境变量初始化、进程创建与替换等核心功能。通过混合使用C/C++编写,实现了基本的shell交互功能,包括获取用户名、主机名和当前路径,处理内建命令如cd等。文章详细说明了如何通过fork创建子进程执行命令,并使用waitpid等待子进程完成。最后还提及了环境变量的初始化和更新机制,为后续扩展更复杂的shell功能奠定了基础。原创 2025-07-21 18:06:26 · 789 阅读 · 0 评论 -
Linux——虚拟地址空间与物理内存
本文探讨了Linux系统中的虚拟内存机制。通过fork()函数创建子进程的示例,展示了父子进程共享代码但拥有独立数据空间的现象,解释了虚拟地址与物理地址的映射关系。文章详细介绍了虚拟内存的概念,包括页表的作用、mm_struct结构体对虚拟内存的管理方式,以及虚拟内存区域的组织形式(单链表和红黑树)。同时分析了虚拟内存的优势:使地址有序化、保护物理内存、实现解耦合,并延伸说明了缺页中断和挂起操作的原理。最后,通过mm_struct源码展示了虚拟内存的区域划分方式,包括代码段、数据段等各部分的地址管理。原创 2025-07-20 21:31:20 · 852 阅读 · 0 评论 -
Linux——进程的退出、等待与替换
进程退出:介绍三种退出场景(正常/错误/异常),分析_exit和exit函数的区别(后者会刷新缓冲区),并通过测试验证差异。进程等待:阐述父进程等待子进程的必要性(避免僵尸进程和内存泄漏),对比wait/waitpid函数的使用,详解status参数如何通过位图存储退出码和信号,并区分阻塞与非阻塞等待(WNOHANG选项)。进程替换:解析exec函数族原理(覆盖原进程代码但不创建新进程),列举6种替换函数(如execl、execvp等),说明其命名规则和参数差异(路径、参数传递方式、环境变量处理),强调原创 2025-07-20 18:22:46 · 767 阅读 · 0 评论 -
Linux操作系统——进程认识
进程是操作系统中的基本执行单元,由内核数据结构(PCB)和程序代码及数据组成。进程创建时先建立PCB再加载代码,退出时先释放代码再处理PCB。操作系统通过task_struct结构体描述进程,并以组织化方式管理进程列表。原创 2025-07-20 17:06:43 · 835 阅读 · 0 评论 -
理解操作系统
本文介绍了冯诺依曼体系结构和操作系统的基本概念。冯诺依曼体系结构将计算机硬件分为输入设备、输出设备、存储器和中央处理器(CPU),其中存储器作为数据中转站提升系统效率。操作系统作为软硬件管理者,通过"先描述,再组织"的方式实现对底层硬件的间接管理,其核心是系统调用和库调用。系统调用是操作系统提供的安全访问接口,库调用则在此基础上封装简化常用操作,两者共同构建了用户与硬件之间的安全桥梁,既提供服务又保护系统安全。原创 2025-07-20 10:34:32 · 514 阅读 · 0 评论 -
Linux开发工具——make/Makefile
Makefile是一种自动化构建工具,通过定义依赖关系和依赖方法实现项目的高效编译。它解决了多源文件管理的复杂性,只需执行make命令即可自动完成编译流程。Makefile支持变量定义、伪目标(如.PHONY修饰的clean命令)和特殊符号(如$@、$^),还能通过文件时间戳判断是否需要重新编译。其执行逻辑采用类似栈的结构处理文件依赖,优化编译效率。通过stat命令可查看文件修改时间,确保仅对变更内容重新编译,显著提升开发效率。原创 2025-07-19 22:49:35 · 617 阅读 · 0 评论 -
Linux的用户和权限
本文介绍了Linux系统中的用户管理和权限控制相关内容。主要包括: Linux用户分为root超级管理员和普通用户,普通用户可通过sudo提权但需在/etc/sudoers白名单中配置。 用户切换命令su及用户管理命令adduser/passwd/userdel。 文件权限的组成:用户类型(拥有者/所属组/其他)和权限类型(读/写/执行),通过ls -l可查看。 权限修改命令chmod(权限)、chown(拥有者)、chgrp(所属组)。 umask掩码影响新建文件/目录的默认权限,计算方法为初始权限&am原创 2025-07-19 21:51:12 · 990 阅读 · 0 评论 -
Linux基本指令
Linux常用命令摘要 本文介绍了Linux系统中常用的基础命令,包括文件操作和目录管理相关指令。主要内容包括: 文件查看命令:ls(显示目录内容)、pwd(显示当前路径)、cd(切换目录)、tree(树状显示目录结构) 文件操作命令: touch(创建文件) mkdir(创建目录) rmdir/rm(删除目录/文件) cp(复制文件或目录) mv(移动/重命名文件或目录) 文件内容查看命令:cat/tac(正/逆序显示)、more/less(分页查看)、head/tail(查看文件头/尾) 其他实用命令:原创 2025-07-19 21:05:28 · 901 阅读 · 0 评论