Linux系统
文章平均质量分 91
Linux系统的学习
Arcane Code
C++后端开发工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux系统:线程池
线程池就像一个“工人队伍”,提前雇好几个工人(线程),让他们随时待命。每个任务来时,不用临时招人(创建新线程),直接让闲着的工人去干活复用线程。干完后,工人不走,继续等下一个任务。线程池的应用场景线程池最适合那些需要“同时干多件事,但任务短小精悍”的地方。简单说,它像一个“待命工人队”,帮你高效处理并发任务。Web服务器处理请求:比如网站收到很多用户访问(如淘宝浏览商品),每个请求是短任务,用线程池分配“工人”快速响应,避免服务器卡顿。文件上传/下载。原创 2025-09-14 12:13:12 · 780 阅读 · 1 评论 -
Linux系统:日志系统
本文介绍了一个基于C++的线程安全日志系统,采用策略模式支持终端和文件两种日志输出方式。系统自动记录时间戳、日志等级、进程号、源文件及行号等信息,用户只需通过LOG(level) << "消息"格式即可记录日志。关键实现包括:1) 定义LogStrategy抽象基类,派生出终端输出(ConsoleLogStrategy)和文件输出(FileLogStrategy)子类;2) 建立日志等级枚举类型(DEBUG/INFO/WARNING等)及转换函数;3) 实现时间戳获取功能。系原创 2025-09-13 11:31:06 · 681 阅读 · 0 评论 -
Linux:环境变量
环境变量是在一些操作系统中,运行环境的参数当我们运行操作系统时,操作系统为自己开辟了一块空间,这块空间里存储了一些参数变量,当我们要使用时,我们可以直接那这些参数来用。原创 2025-04-23 20:38:24 · 992 阅读 · 0 评论 -
Linux: 进程的调度
再Linux系统中,我们可以用以下指令查看进程优先级ps -la先写一个死循环程序运行这个程序 并且查询程序优先级其中有两个重要的参数,分别是PRI和NI分别对应单词是priority和nicePRI对应的就是进程优先级,PRI越小进程优先级越高,80是系统默认的优先级,PRI取值范围在[60,99]这40个级别,为什么只设置40个级别,是因为防止有些进程优先级过高,导致一些优先级低的进程长时间得不到运行,造成进程饥饿。原创 2025-04-23 18:36:15 · 758 阅读 · 0 评论 -
Linux:进程的等待
当以一个进程结束时,它会变成僵尸进程,这个僵尸进程如果不处理,就会一直占用CPU资源,如果父进程要回收这个进程会通过进程等待的方式处理,回收子进程只会,会得到进程的退出信息。原创 2025-04-25 21:44:24 · 800 阅读 · 0 评论 -
Linux:进程地址空间
这是一块虚拟地址空间的展示图地址从下往上增长下面时对应存放的数据代码段: 存放可执行代码和只读常量数据段:存放全局变量和静态变量堆区:动态地址空间,地址一般是增长的栈区:存放局部变量,地址一般是降低的内核:命令行参数argv和环境变量env等我们来用一段代码来验证图片信息是否准确我们先是输出了main函数的地址,函数也是有自己的地址的然后我们输出了两个变量的地址,分别是已初始化变量和未初始化变量我们malloc了三个堆的空间分别用指针heap1和heap2和heap3去管理。原创 2025-04-23 22:33:29 · 890 阅读 · 0 评论 -
Linux:进程的概念
课本概念:程序的一个可执行实例,正在执行的程序。内核观点:担当分配系统资源实体。当操作系统要执行程序时,也就是说操作系统要执行代码,但一个操作系统需要执行多个程序,而CPU只有一块,那么这些需要执行代码的程序要排队依次执行。CPU有一个结构体将代码和关于这代码所处程序的信息存起来,比如进程的状态,优先级等,而这个task_struct被称为PCB。原创 2025-04-23 10:50:18 · 782 阅读 · 0 评论 -
linux系统下如何提交git和调试
我们默认的ubuntu20.04镜像是没有Git提交的工具,我们需要配置安装包。将我们这个新建的TEXT1提交到我们gittee的远端仓库中。配置用户信息--用于后面提交代码确认提交信息。随便进入linux系统下的一个目录中。创建一个文件在当前仓库目录下。将暂存区文件存储到本地仓库。获取gittee仓库地址。将本地仓库与远端仓库同步。安装和更新git的命令。查看暂存区有哪些文件。原创 2025-04-10 20:56:46 · 403 阅读 · 0 评论 -
Linux:进程的状态
当一个可执行程序被载入内存中时,获得PCB,那么它就变成一个进程,进程的状态常见的有以下三种我们把进程的状态分为阻塞,就绪,执行三个状态,这三个状态分别对应三个整形变量,进程的状态的本质就是整形变量,操作系统通过访问PCB的整形变量来管理进程以下是Linux对于进程状态的源码表示这些进程状态后面都有一个数字,而这些数字都是2的倍数为什么都是2的倍数呢?在我们第一行有描述,这些进程的状态是用一个bitmap的位图存储起来的,也就是用二进制的方式存储起来的。原创 2025-04-23 14:16:50 · 987 阅读 · 0 评论 -
Linux:进程的创建&&进程的终止
fork是c语言中的一个函数,用于创建新的子进程,它存放在<unistd.h>的头文件中当我们运行程序时,如果使用了fork函数那么就会为这个进程创建一个它的子进程,这个子进程会继承父进程的所有数据和代码,但其实子进程是和父进程共用一套数据和代码。还有一个重点是:内存指针子进程会继承父进程的内存指针,内存指针用于指向程序执行到了哪里。我们来测试一下fork是否真的会创建一个新的进程。我们来看以下代码运行结果我们可以看到,在fork之前的程序只运行了一次,但是在fork之后的语句运行了两次,原创 2025-04-24 22:43:35 · 870 阅读 · 0 评论 -
linux:进程的替换
当我们使用fork时,会创建一个子进程来给我们执行代码,但是子进程执行的也是父进程的代码,我们再写代码的时候,往往是需要执行其它代码,所以当其它程序的代码替换到自己的程序中执行,这种行为叫,进程的替换使用进程的替换我们往往需要使用exec类型函数来进行让我们来查看一下exec的类型函数有哪些exec函数有六种,让我们来分别讲解用途。原创 2025-04-27 23:37:28 · 1103 阅读 · 0 评论 -
Linux系统:基础I/O
学习Linux的基础I/O可以让我们理解文件本质,提高系统操作能力, 写出高质量的 C/C++ 系统程序,理解命令工具背后的机制,系统调优 & 性能优化,开发脚本、工具、守护进程的基础能力,为后续高级知识打基础,Linux 的基础 I/O 是“系统之眼”,是你进入操作系统底层世界的钥匙。pathname:要打开或创建的目标文件路径flags:文件打开方式,可以使用以下常量之一或多个进行按位“或”运算()组合:O_RDONLY:只读方式打开文件O_WRONLY:只写方式打开文件O_RDWR。原创 2025-08-05 21:44:27 · 989 阅读 · 0 评论 -
Linux系统:Ext系列文件系统(硬件篇)
本文介绍了Linux系统中Ext文件系统的硬件基础——磁盘的物理与逻辑结构。主要内容包括: 硬件层级关系:磁盘作为服务器的一部分,服务器置于机柜中,多个机柜组成机房。 磁盘的物理结构:包括盘片、主轴、磁头、永磁铁和磁头臂等核心组件,通过磁化原理存储数据。 存储结构:详细说明扇区、磁道、柱面等概念,以及传统的CHS寻址方式及其容量限制(约8.4GB)。 逻辑结构:将磁盘抽象为线性结构,引入LBA(逻辑块地址)作为现代寻址方式,替代了CHS的限制。 地址转换:解释了CHS到LBA的转换公式,实现物理到逻辑地址的原创 2025-08-08 17:18:30 · 1073 阅读 · 0 评论 -
Linux系统:Ext系列文件系统(软件篇)
摘要 本文深入解析了ext2文件系统的核心结构与工作原理。ext2将硬盘分区划分为多个块组(Block Group),每个块组包含超级块、组描述符表、块位图、inode位图、inode表和数据块等关键组件。超级块记录文件系统全局信息并在各块组备份以提高容错性;块组描述符表管理块组属性;位图系统跟踪资源使用状态;inode表存储文件元数据并通过多级索引实现数据块映射。文件创建过程需分配inode和数据块,并更新相应位图结构。这种设计既保证了文件系统的可靠性,又实现了高效的文件管理能力。原创 2025-08-08 17:20:38 · 1084 阅读 · 0 评论 -
Linux系统:库的制作
Linux库是预先编写好的可复用代码集合,分为静态库(.a)和动态库(.so)。静态库在编译时直接打包进可执行文件,而动态库在运行时加载。常见库如libc(标准C库)和libstdc++(C++标准库)分别提供基础功能。文章通过示例展示了如何制作简单的静态库:编写头文件(.h)声明函数,源文件(.c)实现功能,使用ar命令将目标文件(.o)打包为.a文件。库的开发能提高代码复用性,减少程序体积,加快编译速度,是Linux程序开发的重要基础。原创 2025-08-13 13:43:20 · 854 阅读 · 0 评论 -
Linux系统:管道通信
Linux系统中的管道(pipe)是一种基础进程间通信方式,分为匿名管道和命名管道。匿名管道通过pipe()创建,仅限有亲缘关系的进程使用,采用半双工单向通信,默认阻塞读写。命名管道(FIFO)通过mkfifo创建文件系统路径,允许无关进程通信,遵循与匿名管道类似的读写规则。两者核心区别在于创建方式,但均依赖内核协调数据传输,具有生产者-消费者模型特性,适用于不同场景的进程协作需求。原创 2025-08-20 17:09:06 · 697 阅读 · 0 评论 -
Linux系统:进程信号的产生
本文介绍了Linux进程信号的基本概念和作用。信号是软件层面的中断机制,用于进程间异步通信和控制,包括终止进程(Ctrl+C)、事件通知和错误处理等。文章详细讲解了信号的定义、分类(标准信号1-31和实时信号34-64)、产生方式(键盘输入和kill命令),并通过代码示例展示了如何使用signal函数自定义信号处理函数。信号机制使程序能够响应外部事件,是编写健壮系统程序的重要基础。原创 2025-08-28 11:49:26 · 757 阅读 · 0 评论 -
Linux系统:进程信号的处理
本文深入讲解了Linux进程信号处理机制,重点分析了信号在task_struct中的存储结构(pending、block和handler表)。信号处理流程涉及三个关键数据结构:Handler表(存储信号处理动作)、Block位图(标识阻塞信号)和Pending位图(暂存待处理信号)。文章详细介绍了sigset_t类型及其操作函数(sigemptyset/sigfillset等),并通过sigprocmask函数演示了如何修改信号屏蔽字。示例代码展示了阻塞SIGINT信号的效果,验证了信号原创 2025-09-02 23:44:40 · 831 阅读 · 0 评论 -
Linux系统:线程的概念和控制
本文主要介绍了线程的概念、优缺点及其控制方法。线程作为进程内部的执行单元,允许多个任务并发执行,共享同一进程的内存和资源,具有轻量级、高效的优势。相比进程,线程更节省系统资源,能更好利用多核CPU,但同时也存在稳定性、访问控制和编程复杂度等挑战。文章详细讲解了POSIX线程库的使用,包括线程创建、线程ID类型及线程终止方法,并通过C语言代码示例演示了线程的基本操作。掌握线程技术有助于提升程序性能和响应速度,为并发编程和服务器开发奠定基础。原创 2025-09-05 00:15:00 · 852 阅读 · 3 评论 -
Linux系统:线程的互斥和安全
摘要: 本文探讨了线程互斥在多线程编程中的重要性。通过模拟多线程抢票案例,展示了共享资源(全局变量)因线程竞争导致的错误结果(如票数为负)。问题根源在于if判断和--操作的非原子性,导致线程切换时数据不一致。解决方案是引入互斥锁(pthread_mutex_t),确保临界区代码(操作共享资源的部分)仅由一个线程执行。示例代码演示了静态初始化的全局锁如何保证数据正确性,并对比了无锁与加锁情况下的输出差异。此外,还简要介绍了互斥锁的静态初始化和动态初始化两种方式及其适用场景。互斥机制有效避免了竞态条件,确保多线原创 2025-09-08 22:03:05 · 1439 阅读 · 0 评论 -
Linux系统:线程同步与生产消费模型
文章摘要: 线程同步通过互斥锁和条件变量实现多线程环境下的有序协作。条件变量(pthread_cond_t)与互斥锁配合,解决线程等待特定条件的场景(如生产者-消费者模型)。生产者线程在缓冲区满时等待,消费者线程在空时等待,通过pthread_cond_signal唤醒对方。初始化条件变量可采用静态(PTHREAD_COND_INITIALIZER)或动态(pthread_cond_init)方式。生产者-消费者模型通过缓冲区解耦生产与消费,利用互斥锁保证操作原子性,条件变量实现同步,从而解决速度不匹配问题原创 2025-09-08 23:49:57 · 693 阅读 · 0 评论
分享