- 博客(22)
- 收藏
- 关注
原创 [Linux]进程信号(下)
摘要:现代操作系统是中断驱动的系统,通过中断机制处理外设事件。CPU通过中断向量表查找处理程序,如键盘中断读取输入或硬盘中断处理数据传输。操作系统核心是一个等待和处理中断的循环,时钟中断是实现调度的关键。系统调用通过中断切换用户态和内核态。信号处理需使用可重入函数避免数据冲突,volatile关键字防止编译器优化导致的变量同步问题。
2026-03-06 12:44:17
381
1
原创 [Linux]进程信号(上)
1.信号是操作系统级的“2.信号早在没有产生信号之前就知道怎么处理信号了,操作系统了处理信号的默认方法(一般都是被kill)3.接收到信号可以不立即处理,可以在处理4.信号源有很多。
2026-03-05 20:53:07
505
1
原创 [Linux]进程间通信IPC(system V)
本文介绍了System V IPC机制的核心概念与实现方式。内核通过IPC资源表管理共享内存、消息队列和信号量三类资源,使用key标识唯一性,操作时通过shmget/msgget/semget返回的ID进行访问。详细列举了相关系统调用接口和终端命令(ipcs/ipcrm),并对比分析了三种IPC机制的特性:共享内存具有最高性能但需自行同步;消息队列支持结构化消息;信号量通过P/V操作实现资源访问控制。特别强调了共享内存的页对齐分配特性,以及信号量在保护临界资源时的互斥与同步机制。
2026-03-05 10:49:31
376
1
原创 [Linux]进程间通信IPC(命名管道)
本文对比分析了匿名管道和命名管道的实现机制。匿名管道通过pipe()系统调用直接创建运行态对象,两端共享同一份pipe核心;而命名管道(FIFO)则通过mkfifo创建文件系统节点,在首次open时才会生成运行态pipe结构。两者都使用pipe_inode_info作为核心数据结构,但命名管道具有同步特性:open操作会在两端未同时打开时阻塞。与普通文件不同,FIFO没有数据块且不可seek,本质是内存级通信机制。文章还介绍了相关终端命令和系统调用接口,包括mkfifo、unlink以及open等操作。
2026-03-04 14:55:46
226
1
原创 [Linux]进程间通信IPC(匿名管道与进程池)
本文探讨了进程间通信(IPC)的核心概念与技术实现。通信的本质在于让进程访问"同一份资源",通常由操作系统内核提供和管理。文章详细介绍了匿名管道的实现原理,包括pipe函数的使用、管道特性(如阻塞行为、原子性写入)及四种典型通信情况。特别阐述了进程池的设计,通过Channel和ChannelManager类管理多个子进程,实现任务的均衡分配。代码示例展示了如何使用管道构建进程池,包括任务派发、进程创建与通信等关键环节。整个系统体现了从硬件级到内存级的通信技术演进,以及通过标准化的系统调用
2026-03-03 17:49:12
547
1
原创 [C++]string类的使用和模拟实现
本文系统介绍了C++中string类的使用与实现方法。首先分析了string类的函数风格,包括参数传递方式、const与非const迭代器区别及隐式类型转换特性。然后详细讲解了string类的核心实现,包括构造函数、析构函数、拷贝构造等基础功能,以及迭代器、容量操作等内联函数实现。重点剖析了字符串的增删查改操作,如扩容机制、插入删除算法等实现细节,并指出了常见错误点(如'\0'处理、size_t循环问题)。通过具体代码示例展示了operator>>、insert等关键函数的实现逻辑,帮助读者掌握
2025-12-01 19:24:00
960
1
原创 时间复杂度和空间复杂度
丛结果上看,我们希望我们的程序,占用低,速度快。怎么办呢,上更强的cpu,更大的内存,当然可以实现,但我们希望在同等规模的计算下,同时在相同的硬件配置下,占用低,速度快,就必须优化算法。对于空间复杂度,由于现在存储技术的发展,很容易有大内存,故主要优化时间复杂度。
2025-11-10 14:50:29
312
原创 git企业开发的相关理论(二)
展示了 Git 基本操作流程,包括分支创建、切换、合并及冲突解决等常见操作,以及相关命令的使用方法与结果示例。
2024-12-19 12:09:28
1315
2
原创 git企业开发的相关理论(一)
认识 Git:Git 是一种分布式版本控制系统,用于管理代码版本和团队协作。Git 安装:介绍了如何在不同平台安装 Git。初始化本地仓库:通过 git init 创建一个本地仓库。配置用户信息:使用 git config 设置用户名和邮箱。基本操作流程:工作区、暂存区、版本库的概念。使用 git add 添加文件到暂存区。使用 git commit 提交文件到版本库。使用 git push 推送代码到远程仓库。查看变化:通过 git status 和 git log 查看仓库状态和历史记
2024-12-17 20:47:49
982
3
原创 字符串函数和内存函数的模拟实现
1.字符串操作:strncpy,strncat2.字符串检验:strlen,strstr3.字符数组操作:memcpy,memmove
2024-03-17 17:26:00
987
40
原创 分享c语言初始化数组简单还实用的四种方法
初识c语言中,不满于每次屏幕打印都是固定值,因为这段代码只能解决那一个问题。我们肯定希望哪怕在release版本中能解决更多相似的问题,这就需要数组的长度在写完代码但运行前都是未定的,并且有些情况需要我们自己指定元素是什么,有些是需要电脑随机生成。
2024-02-17 18:35:38
7834
31
原创 c语言大小写字母转换的三种方法 到 思考指针(超详细)
指针广义上来说,可以不仅仅是十六进制的地址,ASCII中的值又何尝不是一种地址,告诉你ASCII的值就相当于告诉了他的指针,通过指针我们可以找到其对应的字符。对ASCII值(指针)进行加减运算,可以得到另一个指针,对应另一个字符。
2024-02-16 10:40:08
2430
26
原创 笔试中返回函数指针数组的函数(超详解,从零开始)
party先与()结合说明这是一个函数,我们只需要明确party的参数及返回值,括号内自然是参数,然后与*结合,说明是返回一个指针该指针指向为void(**)(const char* name),至于该类型下面调用再讲party(p,"张三")[1][1]("李四");party(p,"张三")看成一个表达式,最终会返回一个类型为void(**)(const char* name)的数据,两个[1]就是解引用这个函数数组,()便是函数调用的意思最后,来一段代码。
2024-02-14 21:54:10
1823
19
原创 从变长数组到两种方法(动态内存与非动态内存)实现数组的动态控制。
在非动态内存方法深入理解scanf函数与gets函数在动态内存方法中感受到malloc函数的威力
2024-02-08 23:35:15
768
10
原创 从二进制和内存的底层来探究同一数据在不同类型下的调用
计算机读取数据将其转换成二进制,数字通过“一”转换,字符通过“二”转换。将它赋值给char或是int类型时,其实比较相似,从左(“个位”)到右(“更高位”),只能存储内存之内的数据,超过的部分舍弃,也就是所谓的截断。%d与%c与int,char同理(抽象成模型后是等价的)。
2024-01-05 21:06:48
1275
7
原创 初识c语言:字符常量用int储存,整型常量用char储存会怎样
所谓截断,就是int类型你用char来储存时,由于char是一个字节,而int是int类型,舍弃掉高字节,只保留低字节的数据就是截断。所谓整型提升,就是char类型你用int类型来储存时,由于高字节缺少数据,就会在高字节中自动补充数据,无符号数直接补0,有符号数补充符号数的0或1(二进制)
2024-01-04 23:15:10
1476
11
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅