自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 收藏
  • 关注

原创 飞算 JavaAI 操作全流程体验:一次面向纯 Java 项目的智能提效之旅

本文介绍了飞算JavaAI在Java开发中的应用价值。该工具针对重复性编码场景如业务逻辑、异常处理、注释生成等提供智能辅助,特别适合中小型项目和教学场景。通过TextAnalyzer项目案例,展示了AI如何优化代码质量:自动补全参数校验、推荐try-with-resources等现代语法、生成标准注释文档。相比人工开发,AI辅助使工具类封装效率提升66%,异常处理时间缩短75%。虽然不适合复杂系统设计,但其多轮自然语言交互和中文指令支持显著提升了开发效率,为纯Java项目提供了新的生产力解决方案。

2025-08-04 19:10:01 735

原创 Linux网络编程:基于UDP 的聊天室雏形

这个聊天室的启动如下:先启动服务器:同时执行一个客户端,并使其错误流重定向到一个fifo命名管道里,此时空间看好我们的那些初始化打印都执行了。依次类推开始我们的第二个客户端,但是记得重定向给另外一个管道:让客户端1输入nihao:可以看见两个客户端的管道都出现了你好,前面的ip加端口代表我们的这个客户端的唯一身份。大家其实也可以自己拓展成花样的用户名。再让用户2输入消息,同样的,其他人都会接收到,并且在聊天框里我们通过ip加端口可以分辨出来。

2025-08-03 02:45:49 1174 16

原创 Linux网络编程:UDP 的DictServer

本文实现了一个基于UDP协议的简易字典查询服务。通过创建字典类加载"英文:中文"格式的txt数据文件,使用哈希表存储键值对并提供翻译接口。服务端接收客户端发送的英文单词后,调用字典类的翻译功能返回中文释义。关键技术点包括:文件读取与字符串分割处理、unordered_map存储字典数据、使用function实现回调机制、智能指针管理对象生命周期。该实现为后续开发更复杂的网络应用(如聊天室)奠定了基础,展示了基本的网络通信与数据处理模式。

2025-08-01 00:28:34 838 10

原创 Linux网络编程:UDP 的echo server

本文介绍了如何使用UDP协议实现简单的服务端与客户端通信。首先讲解了服务端实现步骤:创建socket套接字、绑定地址信息,以及启动循环接收消息并回显的echo服务。客户端实现类似,但不需要显式bind,而是由系统自动分配端口。代码展示了完整的UDP通信流程,包括socket创建、地址绑定、数据收发等核心操作,并提供了日志记录和错误处理。通过这个示例,读者可以初步了解网络编程的基本模式,为后续深入学习更复杂的网络协议和应用打下基础。

2025-07-31 03:11:22 794 10

原创 Linux网络编程:网络基础概念(下)

本文介绍了网络传输的基础概念和socket编程预备知识。主要内容包括:1. 网络传输基本流程:解释MAC地址和IP地址的作用,MAC地址用于局域网内设备识别,IP地址用于跨网络通信;描述数据封装解包过程,以及路由器在网络传输中的关键作用。2. socket编程预备知识:讲解端口号的作用,IP+端口号唯一标识网络进程;介绍传输层协议TCP和UDP的特点;说明网络字节序的概念和转换函数;分析sockaddr结构体的设计目的,它实现了不同网络协议的地址格式统一。文章通过类比方式帮助理解网络概念,为后续深入学习网络

2025-07-30 00:38:33 1144 5

原创 Linux网络编程:网络基础概念(上)

本文介绍了网络编程的基础概念,重点阐述了协议的分层结构及其重要性。文章首先回顾了计算机网络的演进历程,从独立模式到广域网的发展。随后详细解释了协议的本质——通信双方的约定,并通过打电话和快递的生动类比帮助理解。文章重点分析了OSI七层模型和实际应用的TCP/IP五层模型,说明分层设计如何实现解耦和维护便利。最后强调协议是通信双方共识的结构化数据类型,协议报头就像快递单一样确保数据的正确传输。全文旨在帮助读者建立起对网络协议分层架构的基本认知,为后续深入学习打下基础。

2025-07-29 00:40:38 810 3

原创 Linux操作系统之线程:线程池

摘要:本文详细介绍了线程池的实现过程,从基础概念到代码实现。线程池通过预先创建并管理线程组来提高异步任务处理效率。文章首先构建了ThreadPool类框架,包含线程管理、任务队列和同步机制。在实现过程中,重点讲解了线程启动、任务添加、回调函数设计等关键环节,并通过生产者-消费者模型实现线程安全。随后优化了线程标识和任务执行跟踪,最后将线程池改造为线程安全的单例模式,确保全局唯一实例。代码实现涉及模板、智能指针、条件变量等C++特性,并提供了完整的测试用例。该线程池实现为后续网络编程奠定了基础。

2025-07-28 03:02:08 1226 4

原创 综合:日志的实现

本文介绍了基于策略模式的日志系统设计与实现。首先讲解了策略模式的概念,即定义一系列算法并使其可互换的设计模式。然后详细阐述了日志系统的核心组件:1. 定义了5种日志等级(DEBUG到FATAL)和标准日志格式;2. 实现了控制台和文件两种日志策略,分别通过继承LogStrategy基类实现多态;3. 设计了Log类及其嵌套类LogMessage,通过运算符重载和临时对象机制实现优雅的日志输出语法;4. 使用宏定义简化日志调用方式,支持动态切换日志策略。该系统通过策略模式实现了日志输出的灵活配置,兼顾了功能性

2025-07-27 02:42:23 1609 4

原创 Linux操作系统之线程(八):信号量sem

本文介绍了线程同步机制中的信号量(Semaphore)概念及其应用。信号量由计数器+等待队列构成,通过原子操作实现资源分配,解决竞态条件问题。文章重点讲解了POSIX信号量的接口使用,包括sem_init、sem_wait(P操作)、sem_post(V操作)等,并解释了其原子性保证原理。随后以环形队列实现生产者消费者模型为例,展示了如何利用信号量实现高效并发:生产者申请空间信号量后生产数据并唤醒消费者,消费者申请数据信号量后消费数据并唤醒生产者。当访问不同位置时可并行执行,同一位置时则需串行处理。最后讨论

2025-07-26 00:26:13 1206 9

原创 Linux操作系统之线程(七):线程同步

本文介绍了线程同步机制中的条件变量及其应用。首先分析了单纯使用互斥锁的局限性:无法高效解决线程协作问题,存在轮询浪费CPU和死锁风险。接着重点讲解了条件变量的核心思想——"不要轮询,等通知",通过生产者-消费者模型演示如何利用条件变量实现高效协作。文章详细说明了条件变量的接口使用,并强调必须使用while循环防止虚假唤醒,以及为何要在持有锁的情况下调用pthread_cond_wait。最后,通过一个完整的阻塞队列实现,展示了条件变量在实际编程中的具体应用,包括生产者等待队列满、消费者等

2025-07-25 01:25:54 1331 9

原创 关于前文:取消点的补充

本文补充了线程取消点和自旋锁的相关知识。重点介绍了线程取消点的概念,指出POSIX线程在某些系统调用处会检查取消请求,若取消状态为ENABLE且类型为DEFERRED,线程将在这些"取消点"终止。文章通过代码示例展示了纯计算循环因无取消点导致无法终止的问题,并列出常见取消点函数。此外,还介绍了协作式取消方法,通过共享变量通知线程优雅退出,建议使用原子变量和volatile关键字保证内存可见性。这些内容虽非核心知识,但对理解多线程工作机制很有帮助。

2025-07-23 23:55:48 575 14

原创 Linux操作系统之线程(六):线程互斥

本文介绍了线程同步与互斥的相关概念,重点讲解了互斥量mutex的原理及使用方法。首先阐述了临界资源、临界区和互斥的基本概念,通过一个多线程抢票的示例展示了数据竞争问题。接着详细讲解了mutex的初始化、加锁、解锁等接口函数,并展示了如何通过mutex解决上述问题。文章深入探讨了mutex的实现原理,指出其基于CPU的原子交换指令实现。最后,作者演示了如何将mutex封装成C++类,并介绍了RAII风格的锁管理方式,通过LockGuard类自动管理锁的生命周期,避免手动加解锁可能出现的遗漏问题。这些内容为理解

2025-07-22 23:54:19 1402 4

原创 Linux操作系统之线程(五):线程封装

本文介绍了Linux线程的相关知识,包括线程ID的本质、线程栈与线程局部存储的区别,并重点演示了如何封装一个简单的线程类。文章首先解释了pthread_t实际上是NPTL线程库在用户空间分配的TCB地址,然后对比了线程栈与进程栈的区别,并介绍了__thread关键字实现线程局部存储。最后通过C++封装实现了线程的创建(start)、等待(join)、分离(detach)和终止(stop)等基本功能,采用std::function包装线程函数,使用智能指针管理线程对象,并通过容器实现对多线程的统一管理。这种&

2025-07-21 23:56:52 475 4

原创 Linux操作系统之线程(四):线程控制

本文深入探讨了线程的核心特性与操作要点:1. 线程资源实际完全共享,包括栈空间(通过全局指针可访问其他线程栈数据);2.线程终止方式多样:主线程return导致进程退出,副线程return仅自身退出,pthread_exit可优雅退出并返回状态值;3.线程等待可使用join或detach分离,但需注意主副线程退出顺序;4.线程中调用exec会终止所有线程,建议通过fork创建新进程再使用exec。文章通过代码示例揭示了线程操作的底层机制和潜在风险,强调在多线程编程中需谨慎处理资源管理和执行顺序。

2025-07-20 23:33:58 1672 6

原创 Linux操作系统之线程(三)

本文主要探讨了线程管理的核心概念。首先补充了页表机制中的缺页中断与越界访问的区分方法,指出通过页号合法化和内存映射检查可以准确识别。其次分析了线程的优缺点,包括资源占用少但存在同步开销的问题。文中通过代码示例展示了线程运行的顺序不确定性,并指出需要通过同步机制控制。同时解释了线程时间片分配原则,强调线程共享进程时间片。最后讨论了线程共享资源引发的安全问题,包括打印错乱、全局变量冲突等,并介绍了线程回收机制,说明主线程需要通过pthread_join获取子线程返回值和避免僵尸线程。全文系统性地阐述了线程管理的

2025-07-19 23:53:35 982 9

原创 Linux操作系统之线程:分页式存储管理

本文深入解析了操作系统的内存管理机制,重点阐述了分页式存储和虚拟内存实现原理。文章首先介绍了单级页表的内存占用问题,引出多级页表(二级页表)的解决方案,通过将大页表拆分为1024个小页表来减少内存占用。详细讲解了二级页表的地址转换过程,包括虚拟地址的三段式划分和MMU硬件的工作流程。针对多级页表查询效率问题,提出了TLB快表的缓存优化方案。最后探讨了缺页中断机制,解释了操作系统如何通过按需分配策略实现高效内存管理,包括写时复制、动态内存分配等场景的处理方式。文章展现了现代操作系统内存管理的精妙设计理念。

2025-07-18 23:35:43 1076 10

原创 Linux操作系统之线程:线程概念

本文介绍了Linux操作系统中线程的基础概念和初步实现。首先阐述了线程与进程的关系:线程是进程内部的执行分支,共享进程资源但拥有独立执行上下文。Linux通过PCB(task_struct)管理线程,采用轻量级进程(LWP)模型。文章通过pthread_create函数演示了线程创建,并展示了如何通过LWP区分执行流。随后探讨了分页式存储管理机制,解释了页框、物理页等概念,以及struct page结构体如何管理物理内存。最后指出线程共享同一虚拟地址空间,为后续讲解页表分级存储和线程同步互斥奠定基础。

2025-07-17 23:51:54 995 8

原创 Linux操作系统之信号:信号补充

本文深入探讨了用户态与内核态的概念及其转换机制。文章首先通过虚拟地址空间的划分(用户空间0-3GB和内核空间3-4GB)解释了进程如何共享操作系统内核,并引入CPL(当前特权级)概念说明权限控制原理。随后详细分析了sigaction函数的用法和信号处理机制,包括自动阻塞当前信号、pending表变化时机等特性。文章还区分了可重入与不可重入函数,并以SIGCHLD信号为例说明异步清理子进程的方法。最后指出通过设置SIG_IGN可避免僵尸进程产生,为后续线程学习做铺垫。全文通过代码示例和位图打印验证了理论分析,

2025-07-17 00:12:27 809 5

原创 Linux操作系统之信号:保存与处理信号

本文深入讲解了Linux系统中信号的保存与捕捉机制。主要内容包括:1)信号保存的PCB结构,详细解析了pending位图、block位图和handler函数指针数组的作用;2)信号集操作函数如sigprocmask、sigpending的使用方法;3)信号处理的完整流程,涉及4次内核态与用户态切换;4)操作系统运行原理,包括硬件中断、时钟中断和软中断的工作原理;5)系统调用的实现机制,说明其本质是通过中断向量表进行跳转。文章通过代码示例和图示,帮助读者理解信号从产生到处理的全过程,并揭示了操作系统作为&qu

2025-07-15 23:49:47 1502 12

原创 Linux操作系统之信号:信号的产生

本文详细介绍了Linux系统中信号产生的五种方式:1. 键盘硬件中断(如Ctrl+C发送SIGINT信号);2. 通过kill等指令发送信号;3. 使用系统调用(kill/raise/abort);4. 软件条件触发(如管道关闭发送SIGPIPE,alarm定时发送SIGALRM);5. 异常情况(除零错误、野指针访问等)。文章还解释了信号处理机制,包括信号位图存储、默认处理方式,以及Core和Term终止方式的区别。通过代码示例演示了自定义信号处理方法,并揭示了操作系统通过中断机制管理信号的原理。

2025-07-14 23:18:46 1510 13

原创 Linux操作系统之信号概念启程

在我们生活中无处不存在着信号:古代的狼烟烽火,现在马路上随处可见的红绿灯,甚至于你每天上早八定的闹钟,都是一种信号信号有一个特点,就是异步什么是异步性就是突发的,不可预料。我们用官方的点语言来说就是:信号可能在任何时刻到达,打断进程的正常执行流。你说闹钟和红绿灯我们可以预料,怎么会有异步性呢?那如果你的手机没电了!如果交通拥堵有交警专门去手动控制交通!这种情况的出现我们无法预料,所以,闹钟与红绿灯也是一种信号。敌人多久来?我们多久点燃烽火?

2025-07-13 23:00:21 774 14

原创 Linux操作系统之进程间通信:共享内存

本文介绍了进程间通信(IPC)中的共享内存机制。共享内存是多个进程共同映射的物理内存区域,通过直接访问同一块物理内存实现高效通信。文章详细讲解了共享内存的原理、内核数据结构(如shmid_kernel)以及管理接口(shmget、shmat、shmdt等)。通过代码示例展示了如何使用共享内存进行读写操作,并指出了数据不一致的问题。最后提出了使用命名管道进行同步的解决方案,确保读写时序的正确性。文章强调共享内存虽然高效,但需要谨慎管理,掌握正确使用方法才能充分发挥其优势。

2025-07-12 23:41:53 1164 7

原创 Linux操作系统之进程间通信:命名管道

本文介绍了命名管道(FIFO)的基本原理和使用方法。命名管道是一种特殊的文件类型,通过文件名实现不相关进程间的通信。作者详细讲解了如何用mkfifo命令创建命名管道,并提供了C++代码示例,包括读端和写端的实现。文章还分析了命名管道的阻塞问题,说明了不同打开模式下的行为特点。通过创建两个管道可以实现进程间的双向通信。命名管道突破了匿名管道只能在父子进程间通信的限制,为进程间通信提供了更灵活的解决方案。

2025-07-11 22:37:04 736 9

原创 匿名管道的应用:手把手模拟实现进程池

本文详细介绍了进程池的实现过程,主要包括以下内容:1. 进程池概念:预先创建并维护一组工作进程,通过复用减少创建/销毁开销;2. 实现步骤:创建Channel类管理管道和子进程,通过fork创建子进程并使用管道通信;3. 任务分配:采用轮询方式通过管道向子进程传递任务编号;4. 问题解决:发现并修复了管道文件描述符引用计数导致的进程阻塞问题;5. 代码优化:最终封装为ProcessPool类,包含初始化、任务派发和清理功能。文章通过具体代码展示了进程池的完整实现过程,特别强调了管道引用计数问题的解决方案。

2025-07-10 23:30:45 824 12

原创 Linux操作系统之进程间通信:管道概念

摘要:本文介绍了进程间通信(IPC)的基本概念,重点讲解了匿名管道的工作原理和使用方法。文章首先阐述了进程独立性与通信需求之间的矛盾,然后详细说明了管道作为IPC机制的具体实现方式。通过代码示例展示了父子进程间使用管道进行单向通信的过程,并分析了管道操作的四种典型现象:读写阻塞、缓冲区上限和关闭端口的响应。最后总结了匿名管道的五大特性,包括面向字节流、血缘关系限制、生命周期随进程、单向通信和自带同步机制等。文章为理解进程间通信提供了基础,并预告了后续将介绍的进程池相关内容。

2025-07-09 22:23:40 919 12

原创 Linux操作系统:再谈虚拟地址空间

本文深入探讨了ELF文件加载与虚拟地址空间的联系。首先介绍了编译链接过程及ELF文件结构(包括ELF头、程序头表、节头表和节),解释了目标文件如何合并成可执行文件。重点分析了虚拟地址空间的本质,指出虚拟地址在编译阶段就已确定,并通过mm_struct进行管理。最后阐述了动态库加载机制,说明其通过VMA链表实现共享内存。文章揭示了虚拟地址是操作系统、CPU和编译器协同工作的产物,为理解程序加载机制提供了系统视角。建议初学者重点关注前三个章节的核心概念。

2025-07-08 21:53:55 1016 10

原创 Linux操作系统:软硬链接与动静态库

本文介绍了Linux系统中的软硬链接与动静态库知识。硬链接通过inode实现多个文件名指向同一文件,共享存储空间;软链接则创建新文件指向原文件路径。目录通过"./"和"../"实现硬链接,但系统禁止用户创建目录硬链接以防止循环问题。静态库(.a)在编译时直接嵌入程序,动态库(.so)则在运行时加载,可被多个程序共享。文章详细讲解了两种库的生成与使用方法,包括动态库的路径配置技巧。这些知识对理解Linux文件系统和程序开发具有重要意义。

2025-07-07 22:20:12 786 6

原创 Linux操作系统之文件(五):文件系统(下)

本文深入解析Linux文件系统的核心机制,重点介绍了inode、块组描述符(GDT)和超级块(SuperBlock)的工作原理。文章详细阐述了文件存储过程:通过inode位图查找空闲inode,通过块位图分配数据块,并建立inode与数据块的映射关系。特别强调了目录文件存储文件名与inode映射关系的重要特性,解释了路径解析和dentry缓存机制如何加速文件访问。文章还探讨了文件系统跨分区管理的关键技术——挂载机制,揭示了操作系统如何通过挂载点将不同分区的文件系统整合为统一的目录树。最后指出文件系统管理遵循

2025-07-06 23:53:51 6421 5

原创 Linux操作系统之文件(四):文件系统(上)

摘要:本文从计算机组成原理角度解析Linux文件系统的构成。首先介绍磁盘作为主要存储设备的工作原理,包括CHS地址定位法和LBA线性地址。然后解释磁盘分区管理和EXT2文件系统结构,重点阐述inode作为文件属性集合的概念及其编号机制。文章指出文件属性(inode)与内容(DataBlocks)分开存储的特性,并初步介绍了inode结构中的块号数组。最后预告将深入探讨inode管理和文件查找机制,为理解文件系统奠定基础。(149字)

2025-07-05 23:41:53 959 1

原创 Linux操作系统之文件(三):缓冲区

本文详细介绍了缓冲区的概念,重点阐述了用户级缓冲区与内核级缓冲区的区别与联系。通过实验演示了重定向时缓冲区的变化,解释了子进程创建时缓冲区数据重复输出的原因。文章还模拟实现了FILE结构体及其相关操作函数(fopen、fwrite、fflush、fclose),展示了用户级缓冲区的工作原理。核心观点是:缓冲区的存在是为了提高IO效率,C标准库通过用户级缓冲区减少系统调用次数,而缓冲策略(行缓冲/全缓冲)会根据输出目标自动调整。理解缓冲区机制对掌握IO操作和进程通信具有重要意义。

2025-07-04 23:43:13 886

原创 Linux操作系统之文件(二):重定向

本文深入解析了Linux"一切皆文件"的设计理念及其实现机制。文章首先解释了硬件设备、进程等如何在Linux中被抽象为文件,通过struct file结构体和操作表实现统一接口,开发者仅需使用read/write等系统调用即可操作各类资源。随后分析了系统调用与语言层封装的关系,指出write直接操作二进制数据而printf进行格式化转换的差异,以及封装带来的跨平台优势。接着详细讲解了内核缓冲区的工作原理和重定向机制,包括dup2函数的实现原理和Shell重定向的底层操作。最后总结了这种设

2025-07-03 22:55:51 1295 5

原创 Linux操作系统之文件(一):重识IO

本文探讨了Linux系统下文件操作的深层原理。首先介绍了Linux"一切皆文件"的哲学理念,将键盘、打印机等设备都视为文件。然后分析了文件的本质是内容加属性,以及操作系统通过"先描述,再组织"的方式管理文件。重点讲解了open系统调用及其文件描述符(3)的含义,揭示了进程默认打开三个文件描述符(0,1,2)的机制。最后通过C语言的FILE*结构验证了文件描述符的底层实现。文章为理解Linux文件系统提供了基础概念框架。

2025-07-03 00:05:36 1284 3

原创 关于进程控制部分的总结小代码:Myshell

我们本篇文章只是对前文的内容进行一个简单的总结与练,并且我们是模拟的一个简单shell,与真实shell肯定会存在部分差异与不足。但最重要的是给大家展示一下在操作系统里的关于进程的简单应用,让大家看看代码。enumOK=0,//全局的命令行参数列表//全局的环境变量列表//当前路径//接口,获取用户名,倘若不存在或者获取失败就返回None//接口,获取主机名,倘若不存在或者获取失败就返回None=0)index++;

2025-07-02 17:08:06 1134 1

原创 Linux操作系统之进程(七):进程的控制(下)

本文主要介绍了进程控制中的两个重要概念:进程等待和进程替换。在进程等待部分,详细讲解了waitpid函数的阻塞与非阻塞模式,并通过自动备份数据的代码案例展示了非阻塞等待的实际应用。进程替换部分则从exec函数家族入手,阐述了程序替换的原理和不同exec函数的区别,强调fork-exec是Linux进程创建的核心机制。文章还预告了将通过实现简易Shell来综合运用这些知识,为后续学习打下基础。

2025-07-01 00:21:28 697 6

原创 Linux操作系统之进程(六):进程的控制(上)

前面关于进程的五篇博客主要给大家讲解的是一些进程的相关概念,从本篇开始,将为大家带来有关我们进程控制的内容。我们怎么在我们的代码中控制、管理我们的进程呢?进程有哪些基本的用图呢?希望通过本篇博客,能够给大家解决这些疑惑。我们本篇文章主要是讲了进程创建,进程的终止,以及进程等待的部分内容,了解了写时拷贝,以及退出码等信息。关于进程的等待,还有一点内容,options参数并未向大家详细介绍,这个我会放在下一篇文章讲解。

2025-06-18 12:32:46 967 7

原创 Linux操作系统之进程(五):初识地址空间

在上一篇文章命令行参数与环境变量中,我们深入探讨了命令行参数与环境变量的作用和机制,了解到它们是进程启动时传递信息的重要手段,也是用户与程序交互的基础方式。然而,这些信息最终都要“落地”到内存中,供进程访问与使用。那么问题来了:程序中的所有数据、代码、参数,它们在内存中是如何组织和存放的?为什么同一个变量在父子进程中地址看似相同,却可能指向不同的内存?操作系统又是如何保障不同进程间互不干扰、独立运行的?为了解答这些问题,我们就必须进一步深入理解进程的地址空间结构。

2025-06-06 17:45:02 1099 6

原创 Linux操作系统之进程(四):命令行参数与环境变量

本文介绍了Linux系统中的命令行参数与环境变量。命令行参数通过main函数的argc和argv传递,决定程序执行的不同功能;环境变量则是系统级别的全局配置,通过envp或getenv()访问,影响所有子进程的行为。重点讲解了PATH、HOME、USER等关键环境变量的作用,并对比了环境变量与本地变量的差异:环境变量具有全局性,可被子进程继承。文章还演示了如何修改PATH环境变量,以及通过配置文件永久生效的方法。掌握这些概念有助于理解Linux系统的工作机制和程序交互方式。

2025-05-30 23:00:38 1294 7

原创 Linux操作系统之进程(三):进程优先级与进程切换调度

本文深入讲解了Linux进程管理的核心概念。首先解释了进程优先级(PRI)及其修正值(NI),通过示例演示了如何用top命令修改优先级(范围-20到19)。其次详细剖析了进程切换机制,包括上下文数据的保存与恢复。重点介绍了Linux2.6的O(1)调度算法,阐述了active和expired双队列的工作原理,以及位图优化查找过程。文章还补充了PCB双链表实现原理和C语言offset计算技巧。整体从优先级、切换、调度三个维度系统性地解析了Linux进程管理机制,适合有一定Linux基础的读者深入理解进程调度原

2025-05-25 19:39:31 1079 1

原创 Linux操作系统之进程(二):进程状态

本文深入探讨了Linux操作系统中进程的各种状态及其行为。首先,文章介绍了进程的基本概念,包括并行与并发的区别、时间片的分配以及等待的本质。接着,详细解释了Linux中常见的进程状态,如运行(R)、睡眠(S)、不可中断睡眠(D)、停止(T)、僵尸(Z)和死亡(X),并通过代码示例展示了这些状态的实际表现。此外,文章还讨论了僵尸进程和孤儿进程的形成及其对系统的影响。通过本文,读者可以更好地理解进程状态在系统编程和性能调优中的重要性。

2025-05-21 20:23:41 1344 2

原创 Linux操作系统之进程(一):进程属性与进程创建

本文深入探讨了操作系统中的进程管理,重点介绍了进程控制块(PCB)的作用及其关键属性。进程是运行中的程序,由代码、数据和PCB组成,其中PCB是进程的核心数据结构,存储了如PID、状态、资源等所有管理信息。文章通过类比医院管理,形象地解释了操作系统如何通过PCB管理进程,包括资源分配、隔离保护和效率提升。此外,还详细介绍了进程的标识(PID和PPID)、进程的独立性、进程的查看与管理(如/proc文件系统和fork()系统调用),以及进程的工作目录(CWD)。理解这些概念对于深入学习Linux系统编程至关重

2025-05-13 20:51:05 1414 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除