- 博客(29)
- 收藏
- 关注
原创 【Linux进程概念】从进程地址空间角度深入理解fork()与写时拷贝
之前我们在学习第一个系统调用函数fork()的时候,学到了fork()函数在return的时候发生了写时拷贝,因此会返回两个,甚至多个值(取决于创建几个子进程),但用来接收这些值的id变量只有一个,它是怎么做到一个变量却拥有不同的值呢?进程地址空间是操作系统为每个进程分配的 虚拟内存视图,使进程认为自己独占整个物理内存,通过内核的 mm_struct 结构体管理代码段、堆、栈等区域划分,配合页表映射物理内存,实现内存隔离、动态调整(如堆栈扩展)和写时拷贝保护机制,确保进程独立性、安全性及物理内存高效利用。
2025-04-01 19:07:57
537
原创 【Linux】从开发到系统管理深入理解环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。掌握环境变量的正确使用方式,将显著提升开发效率和系统管理能力。建议读者通过命令深入学习相关机制,并在实践中不断探索环境变量的高级用法。
2025-03-24 19:54:37
967
原创 【Linux】深入理解Linux进程状态与优先级管理
在Linux系统下,系统通过PCB的方式管理进程(struct_task),在进程还未获得CPU资源时处于等待就绪状态,排队依次被CPU执行。在本文中我们将会了解到进程还有哪些状态,以及Linux系统下的实现方式是什么样的。通过本文的学习,读者应该能够全面理解Linux进程状态转换机制,并掌握基本的进程管理技巧。
2025-03-20 18:33:07
781
原创 【Linux】深度解析Linux进程管理:从进程PCB到创建子进程的全景指南
在Linux操作系统中,进程管理是操作系统核心功能模块之一,其本质是通过地址空间抽象与动态资源调度实现多任务并发执行。本文将从进程控制块(task_struct)、内存管理单元(MMU)到调度算法(CFS)的实现机制展开分析,揭示操作系统如何通过精妙的数据结构与算法设计,构建高效可靠的进程管理体系。承上启下:上篇最后提到了操作系统是通过先描述,再组织的方式管理资源,同样的,操作系统也是以同样的方式进行进程的管理。
2025-03-18 19:06:44
1025
原创 【Linux】冯诺依曼体系与操作系统底层原理详解!新手必看攻略
冯诺依曼体系结构(Von Neumann Architecture)是现代计算机设计的基础框架,由数学家约翰·冯·诺依曼(John von Neumann)于1945年提出。其核心思想是将程序和数据存储在同一存储器中,并通过指令执行机制完成计算任务。
2025-03-13 19:46:51
668
原创 【Linux】新手必看!10分钟掌握Makefile自动化编译秘籍
在拥有数千个源文件的大型工程中(比如Linux内核包含超过6万个文件),手动编译无异于用勺子舀干大海!通过本文你将掌握:✅ Makefile如何实现智能增量编译(节省90%编译时间)✅ GDB调试器核心用法预告(文末有学习路线图)✅ 独家优化技巧:多线程编译加速(make -j至此,本篇介绍了make/makefile的概念与用法,较为深入地讨论了makefile中的语句用法,以及make时产生的问题原由。
2025-03-12 20:49:20
601
原创 【Linux】GCC编译器入门指南(新手必看+附实战案例)
GCC(GNU Compiler Collection)诞生于1987年,最初仅支持C语言,现已发展为支持C++、Fortran、Ada等十多种语言的超级编译器套件。它凭借开源免费、跨平台支持和高度可定制的特点,成为Linux开发者的标配工具!
2025-03-11 19:00:00
382
原创 【Linux】软件生态与Vim编辑器终极指南
发行版多样性:Linux生态以不同发行版为核心分支,例如适合新手的[Ubuntu]、企业级场景的[CentOS]、追求稳定性的[Debian]等。这些发行版基于相同内核(LinuxKernel),但通过差异化的软件包管理和预装工具形成独特定位。软件仓库机制:每个发行版维护官方软件仓库(如Ubuntu的APT源、CentOS的YUM源),提供数万款开源软件的一键安装。例如通过即可安装编辑器,依赖解析由包管理器自动完成。互动时间:你在使用Vim时有哪些独门技巧?欢迎评论区分享!👍🔔。
2025-03-10 19:21:01
623
原创 【Linux】2025最新深入解析Linux权限体系:从小白到高手的完全指南
三类文件权限只能有一个有效,默认是按顺序来找(特别要注意两个都为同一个用户时,只有拥有者权限生效)。目录的可执行权限是表示你能否在目录下执行命令;如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目录,即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件);而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,即使可以执行ls命令,但仍然没有权限读出目录下的文档。互动时间。
2025-03-03 20:30:00
725
原创 【Linux零基础入门实践】第一章——Linux的基础指令(下)
上一篇我们学到了十条左右的指令,但指令到底是什么呢?我们创建一个源文件,生成可执行文件,可以运行结果,那么是不是可以认为指令有着和可执行文件同样的属性,各种指令的效果不同,对应着底层实现它的代码不同。各种不同的指令功能存放在了一起,构成指令集。
2025-03-02 20:00:00
807
原创 基于Keil MDK 5.34的STM32F10x标准库环境配置说明
这篇文章主要记录一下安装好Keil后,要开始使用前的环境配置问题。本文对Keil环境进行了标准库的配置,后续会继续更新如何链接调试器烧写程序,以及常遇到的报错如何解决的。
2025-02-27 12:51:07
932
原创 【C语言操作符详解】
c语言当中有着大量的操作符,本篇文章相较于之前的【初识c语言】中的所讲的操作符做出了对各个操作符的具体内容更加深入的探究。类似 - + = 这种比较简单的这篇文章就不再过多解释了本片文章基本上涵盖了c语言中常用的操作符,希望本篇能对c语言初学者在对于操作符这块能有所帮助。如有纰漏,欢迎批评指正。
2023-02-08 12:33:42
615
原创 【c语言实战项目】扫雷游戏
基于上一次制作的c语言小游戏——三子棋,这次是一个更难一点的游戏:扫雷。其中运用到了c语言初级阶段几乎所有内容且难度有所提升,让我们一起来研究一下如何用c语言实现扫雷游戏逻辑。至此,一个能够实现扫雷游戏基本逻辑的小游戏便制作完成了,当然c语言版的扫雷仍有较大的优化空间,如:用递归算法实现一定条件下展开一片无雷区、标记功能等,后期再来补充。这次制作最主要的是要学会一个项目从无到有的搭建过程,同时注意写代码时函数传参问题,除此之外,整个游戏大量使用字符,要注意数字和字符相互区别。
2023-02-03 23:48:05
601
原创 循环、函数作业
有多种方法解题,可以把整数加起来,负数加起来,最后两者再相加,也可以根据分母正负用if判断(如图中的方法一),还可以定义符号位flag 通过有序的变号达到加减交替的效果。注意:我们要得到的是小数,所以除法中两者其中之一要写成。的形式,并且返回的数据类型也应该是浮点型。
2023-02-01 22:25:39
145
原创 【重点】函数递归
此代码思想主要是将字符串长度看作是:1 + 剩余字符串部分。其原因是传参时,传的是数组首地址,因此解引用就是数组的第一个元素,用它和 ' \0 ' 比较,来确定字符串的长度。这样子,剩余字符串部分又是一个 “原题目的小规模” ,因此就可以实现递归算法。
2023-01-31 20:33:26
79
原创 【重点】关于函数的一些知识点
自定义函数和库函数一样,有函数名,返回值类型和函数参数,但是不一样的是这些都是由程序员自己设置,这就给我们提供了很大的发挥空间。statement;//语句ret_type;//返回类型fun_name;//函数名para1;//函数参数例子一:需要注意的是,传参与受参时的参数类型要保持一致,并且不能用原来参数名,需要创建新的变量来接受传入的参数,例如上图中新的容器就是int x,int y;当返回值有要求时,注意函数的返回类型,如果没有要求,则int 可以写为void。
2023-01-30 19:00:43
345
原创 【重点】分支、循环语句
与while循环里的continue不同的是,for循环中,遇到continue仅仅只是本次循环跳过,后续不变,因为调整阶段在continue之前。注:非零就是真,c语言中一般 0 表示假, 1 表示真。与while循环里的break一样,for循环中出现break同样是直接终止循环。注:① if和else只能控制接下来一条语句,否则应加上{ }来控制多条语句;一些建议:不可在for循环体内修改循环变量 ,防止for循环失去控制;注意代码格式,case决定入口,break决定出口。③ &&前一段可省;
2023-01-27 21:21:15
67
原创 【初识c语言】初识常见关键字、指针、结构体
static修饰全局变量,使得这个全局变量只能在自己所在的源文件(.c)内部可以使用,其他源文件不可使用。static修饰局部变量,改变了局部变量的生命周期(本质上是改变了变量的存储类型)。1:c语言提供的,不能自己创建关键字。*pa中的 ‘*’ 为解引用操作,注:%p是用来打印地址的。2:关键字不能做变量名。
2023-01-26 15:02:22
265
原创 【初识c语言】初识操作符
原码: 10000000000000000000000000000001(原)= -1。按位取反:1111111111111111111111111111111111111(补)0的补码: 00000000000000000000000000000000(补)exp1不成立,exp3计算,整个表达式的结果是:exp3的结果。exp1成立,exp2计算,整个表达式的结果是:exp2的结果。左移一位:00000000000000000100。右移一位:00000000000000000001。
2023-01-25 19:55:21
116
原创 【初识c语言】初识选择、循环语句、函数、数组
ADD函数中需要新的“盒子”x和y来装入scanf中的数。最后再用sum来接住ADD返回出的z值,进而打印出sum。数学中的函数含义是值给定一个数可以唯一地返回一个对应的值,c语言中的函数概念与之类似。scanf()函数接收输入的值,输入1返回“好offer”;输入其他返回“卖红薯”。arr [ 10 ] 中,10指的是元素个数,但实际存储空间下标地址是0~9。(没有到达一定条件则会一直循环)其中,48,49可以合并为。
2023-01-25 17:41:56
120
原创 【初识c语言】初识转义字符
从图中可以看到,\t 失去了本来的意义而转变为另外的意义,故称类似于 \t,\n 这种的为转义字符。要恢复原有的意思只需在需要转义的字符前加上 \ 即可。补充:printf("%d", 100 )
2023-01-23 22:40:51
105
原创 【初识c语言】初始字符串
注:%s是打印字符;当给arr2后面加上 ‘ \0 ' 时,两者输出结果就一致了。一、字符串就是一串字符(用双引号括起来的一串字符)使用strlen函数时应引入头文件string.h。下图可说明" \0 "是字符串的结束标志。计算字符串长度时不包含\0。
2023-01-23 22:10:23
199
原创 【初识c语言】第一个c语言项目
第一步:写出主函数main。其中注意:int是整数类型,printf是库函数(在屏幕上输出信息)使用前应引用头文件(stdio.h),字符hehe后+\n达到换行的效果。一个经典问题:一个工程中有且仅有一个main函数,且一个工程中可以有多个.c文件,但是多个.c文件只能有一个main函数。第二步:使用快捷键ctrl+F5 快捷输出结果。
2023-01-20 18:27:43
102
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人