Linux
文章平均质量分 94
Vect__
我不爱学习
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基于生产者-消费者模型下的线程同步综述
文章摘要: 本文深入探讨了线程同步与互斥的区别及实现方式。互斥解决资源竞争问题,保证数据安全;同步解决执行时序问题,避免线程饥饿。通过厕所坑位和奶茶店出杯的生动例子,解释了生产者-消费者模型的321原则(3种关系、2个角色、1个交易场所)。重点分析了条件变量的使用,包括wait等待和signal唤醒机制,并提供了基于阻塞队列的生产者-消费者模型实现代码。文章还强调wait必须原子性地释放锁并进入等待,以及signal与broadcast的适用场景差异,最后通过RAII封装实现了自动资源管理。原创 2026-01-27 19:28:25 · 970 阅读 · 0 评论 -
基于抢票系统的线程互斥详解
本文展示了两种C++线程封装实现:版本一采用静态成员函数处理线程回调,支持线程创建、启动、停止、连接和分离操作;版本二引入模板支持参数传递。文章重点演示了使用版本一模拟火车票抢购场景,通过全局变量tickets实现多线程共享资源访问,每个线程循环检查剩余票数并模拟抢票过程。代码片段展示了线程初始化、票数递减及并发访问控制的基本实现,为理解多线程编程提供了实践案例。原创 2026-01-26 22:26:35 · 594 阅读 · 0 评论 -
线程概念和线程控制
线程概念与Linux实现 线程是进程内部的执行流,Linux内核中通过轻量级进程(LWP)实现线程。与传统进程不同,线程共享进程的地址空间、文件描述符等资源,但拥有独立的栈和寄存器上下文。Linux内核使用task_struct统一管理进程和线程,线程创建时通过clone()系统调用共享父进程资源,而非创建全新地址空间。这使得线程调度更高效,CPU只需处理独立的执行流task_struct。 线程控制与创建 使用pthread_create()创建线程时,需注意: 线程函数参数应为堆内存或全局变量,避免栈变原创 2026-01-24 22:50:49 · 1004 阅读 · 0 评论 -
分页式存储管理——内存高效管理的基石
分页机制与内存管理 分页机制通过将内存划分为固定大小的页框(通常4KB),解决了内存碎片问题。虚拟内存和物理内存被分割为相同大小的页和页框,通过页表建立映射关系,使程序看到的连续虚拟地址可以映射到离散的物理内存空间。 多级页表设计(如二级页表)减少了连续内存需求,通过页目录和二级页表的分层管理,将大页表拆分为多个小页表分散存储。地址转换过程由MMU硬件完成,通过CR3寄存器定位页目录,结合虚拟地址的高10位和中10位索引查找物理页框。 页表项包含关键控制位(如有效位、读写权限、脏位等),用于内存管理和访问控原创 2026-01-24 18:59:28 · 1003 阅读 · 0 评论 -
进程间通信之管道
进程间通信(IPC)核心机制 摘要:本文阐述了进程间通信(IPC)的基本原理和实现方式。重点分析了管道机制,包括匿名管道和命名管道的底层实现、使用场景及编程接口。通过父子进程通信示例展示了匿名管道的实际应用,并介绍了基于匿名管道的进程池设计方案。文章还详细讲解了管道文件描述符管理、读写特性等关键技术点,为理解操作系统进程通信机制提供了实践参考。 (148字) 核心要点: IPC通过内核共享资源实现进程间数据交换 匿名管道仅限亲缘进程通信,命名管道支持任意进程 管道本质是内核缓冲区,需合理管理文件描述符 进程原创 2026-01-20 18:46:49 · 811 阅读 · 0 评论 -
基于CSAPP对链接和库的理解
本文介绍了静态库和动态库的概念、生成方法及使用方式。静态库在编译时将代码复制到可执行文件中,生成独立运行的程序;动态库则在运行时加载,支持多进程共享内存。静态库通过ar命令打包.o文件生成,使用-l选项链接;动态库通过gcc -fPIC -shared生成位置无关码。两者区别在于链接时机和资源占用:静态库独立但体积大,动态库节省内存但依赖运行时环境。文章还演示了如何将库安装到系统目录或指定路径使用,并指出默认情况下gcc优先使用动态库,可通过-static强制使用静态库。原创 2026-01-11 21:34:30 · 707 阅读 · 0 评论 -
基于inode的文件系统
持久化存储演进与磁盘技术 摘要:本文系统梳理了持久化存储技术的发展历程,从远古石刻到现代磁盘技术。重点分析了机械硬盘的物理结构(盘片、磁头、磁头臂等)及其工作原理,详细解释了磁盘的存储层级(柱面、磁道、扇区)和CHS/LBA寻址方式。同时介绍了文件系统的基本概念,包括块设备、分区机制和inode数据结构。通过技术演进的分析,展现了存储设备如何从简单的数据保存发展到支持高效随机访问的现代存储系统。原创 2026-01-11 21:28:13 · 751 阅读 · 0 评论 -
25.12.27 理解文件本质+文件系统调用接口+fd+重定向
本文主要探讨文件系统操作和文件描述符(fd)的相关概念。首先介绍了文件由属性和内容组成,重点分析加载到内存中的文件及其与进程的关系。其次详细讲解了文件操作系统调用接口open()的使用方法及其参数flags和mode的含义。然后深入解析文件描述符的本质是数组索引,并说明其分配原则:默认打开stdin/stdout/stderr(0/1/2),新文件按最小未分配索引递增分配。最后通过dup2()系统调用实现重定向功能,将标准输出重定向到文件,并用示例代码验证了重定向效果。全文系统性地阐述了Linux环境下文件原创 2025-12-27 23:22:01 · 267 阅读 · 0 评论 -
进程控制详解
本文介绍了Linux进程控制的相关知识,主要包括进程创建和终止两个部分。在进程创建方面,详细讲解了fork函数的工作原理、写时拷贝机制以及fork的常见用法和失败原因。在进程终止部分,阐述了进程终止的本质、三种终止场景(正常成功、正常失败、异常终止),并具体说明了进程退出的方法(main返回、exit、_exit)和退出码的含义。文章通过代码示例和图示,清晰展示了父子进程的执行流程和内存管理机制,帮助读者深入理解Linux进程控制的核心概念。原创 2025-12-25 22:42:08 · 725 阅读 · 0 评论 -
Linux常见工具使用
本文介绍了Makefile的基本结构和规则,通过一个简单的C++项目演示了Makefile的使用方法。主要内容包括: 项目结构:展示了一个包含add.h、add.cpp和main.cpp的简单C++项目 Makefile解析: 变量定义:使用SRC、OBJ、BIN变量管理源文件和目标文件 默认目标:定义可执行文件的生成规则 编译规则:使用模式规则将.cpp文件编译为.o文件 清理规则:使用.PHONY声明伪目标 构建过程: 详细解释了make命令的依赖推导过程 说明了目标文件和依赖文件的时间戳比较机制 演示原创 2025-12-17 22:17:34 · 777 阅读 · 0 评论 -
初识操作系统
本文介绍了冯诺依曼体系结构和操作系统的基本概念。冯诺依曼体系结构规定计算机由输入设备、输出设备、存储器和CPU组成,所有数据必须经过内存与CPU交互,这种设计通过内存作为高速缓存解决了外设与CPU效率不匹配的问题。操作系统作为中间层,向上为用户程序提供简单接口,向下统一管理硬件资源,其核心思想是"先描述,再组织",通过封装系统功能和抽象硬件操作,使整个系统有序运行。文章还通过实例说明了数据在冯诺依曼体系中的流动过程。原创 2025-12-17 21:00:51 · 868 阅读 · 0 评论 -
g++演示如何从C++代码到可执行程序
本文介绍了C++代码从编写到生成可执行文件的完整编译过程。文章通过示例代码演示了预处理、编译、汇编和链接四个关键阶段:预处理阶段处理宏替换和头文件展开;编译阶段进行语法分析、语义检查和模板实例化;汇编阶段生成机器码目标文件;最后链接阶段合并目标文件并解析符号依赖。文中特别强调了模板实例化的时机、符号表的作用以及重定位信息的重要性,并通过实际命令操作展示了每个阶段的输出结果,帮助读者直观理解C++程序的编译流程。原创 2025-12-14 18:52:24 · 1033 阅读 · 0 评论 -
Linux常见指令
本文介绍了Linux文件系统的基本操作,包括目录和文件的创建、修改、删除以及内容读写。主要内容有: 目录操作:使用mkdir命令创建目录,-p选项可递归创建多级目录结构 文件操作: touch命令创建空文件或修改文件时间属性 echo和printf命令写入内容,配合重定向符号>和>>实现覆盖或追加写入 cat和tac命令查看文件内容,支持正序和逆序显示 文件系统特性:Linux采用树状目录结构,所有文件以根目录/为起点,并遵循"一切皆文件"的理念 文章通过具体命令示例演原创 2025-12-05 19:42:11 · 838 阅读 · 0 评论
分享