- 博客(25)
- 收藏
- 关注
原创 Linux:进程信号
在操作系统中,进程信号(Signal) 是一种用于通知进程发生特定事件的通信机制,常用于进程间通信(IPC)、异常处理或系统控制。我们将根据以下顺序阐述信号。同步:任务按顺序执行,前一个任务完成后,才能执行下一个任务。执行流程是阻塞的(Blocking)。类比:在餐厅点单,服务员必须等厨师完成当前菜品后,才能处理下一个订单。异步:任务触发后不等待完成,继续执行后续代码,任务完成后通过回调、事件或Promise通知结果。执行流程是非阻塞的(Non-blocking)。
2025-04-03 17:41:34
1010
3
原创 Linux:进程间通信
进程间通信其实就是让不同进程看到同一份资源的思想,然后设计不同的模式或者数据结构来达到这一目的由于进程地址空间的独立性设计,我们在面对下面情况时需要一种机制来实现进程间的交互,这便是进程间通信的目的数据传输:⼀个进程需要将它的数据发送给另⼀个进程资源共享:多个进程之间共享同样的资源。通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它(它们)发⽣了某种事件(如进程终⽌时要通知⽗进程)。进程控制:有些进程希望完全控制另⼀个进程的执⾏(如Debug进程),此时控制进程希望能够。
2025-03-22 18:40:04
1265
3
原创 Linux:ELF文件&&动静态库的加载和形成
ELF是一种文件格式的名称ELF(Executable and Linkable Format)是Linux和其他类Unix系统中用于可执行文件、目标文件、共享库(动态链接库)和核心转储(core dumps)的标准文件格式。它定义了程序在存储和运行时的结构,是理解程序编译、链接和加载过程的关键。这篇博客是博主时隔三个多月再次恢复的博客写作,仍有诸多欠缺,希望看到这篇博客的小伙伴能一起坚持下学习和进步。
2025-03-09 15:26:22
1007
1
原创 Linux:Ext系列文件系统
提示:以下是本篇文章正文内容,下面案例可供参考本文总结了磁盘的物理结构,并抽象为软件层面上的结构,并将这个结构拆分为若干数据结构进行讲解。
2024-12-05 14:09:27
1326
1
原创 Linux:内存文件 && 基础io
文件是操作系统中用于存储数据和信息的基本单位。它可以是任何形式的数据集合,包括但不限于文本、图像、音频、视频、程序代码等。在操作系统中,文件通常被组织在目录(或文件夹)结构中,以便于用户和管理员进行查找、访问和管理。
2024-12-02 16:34:37
1785
原创 Linux:进程控制
前面我们已经掌握了基本的进程概念,从冯诺依曼结构->进程概念->进程优先级和切换->环境变量->虚拟地址的初步了解,本文将来进一步了解其中一些进程发生过程中的细节实现,并说明如何使用一个进程本文主要对进程概念做进一步的了解和并初步使用。
2024-11-26 22:12:18
1169
4
原创 Linux:程序地址空间初步了解
程序地址空间包含了程序所需的所有内存区域,这些区域包括代码段、数据段(包括已初始化和未初始化的数据)、堆(heap)、栈(stack)等。每个进程都有自己独立的程序地址空间.。代码段:存放程序的机器指令。这些指令在程序执行期间被CPU读取并执行。数据段:存放程序中已初始化的全局变量和静态变量。这些变量在程序执行期间被程序访问和修改。未初始化数据段(BSS段):存放程序中未初始化的全局变量和静态变量。这些变量在程序执行前由操作系统初始化为零。堆(heap):用于动态分配内存的区域。
2024-11-21 11:42:32
634
1
原创 Linux:进程的优先级 && 进程切换
在linux或者unix系统中,⽤ps ‒l 命令则会类似输出以下⼏个内容:我们很容易注意到其中的⼏个重要信息,有下:• UID : 代表执⾏者的⾝份• PID : 代表这个进程的代号• PPID :代表这个进程是由哪个进程发展衍⽣⽽来的,亦即⽗进程的代号• PRI :代表这个进程可被执⾏的优先级,其值越⼩越早被执⾏默认为80• NI :代表这个进程的nice值虽然一般情况下我们是不需要调整优先级的,不过我们仍然需要了解如何调整优先级。使用下面的命令都需要管理者的身份。⽤top命令更改已存在进程
2024-11-17 16:03:18
2844
2
原创 Linux:进程状态
本文将介绍如何利用系统调用来在创建进程,并进一步了解进程的状态,以及相对应延伸出来的僵尸进程和孤儿进程等知识点我们在函数内部使用fork时它会创建一个子进程,并且它会返回两个pid_t类型值(实际上就是整形),子进程的pid会返回给父进程,0会返回给子进程,创建错误返回-1。而返回两个值的具体的实现方法主要依赖于操作系统的进程管理和上下文切换机制(当前不做过多赘述,只需要知道有这个东西就好了)。并且由task_struct链表形式可知每个进程都是具有独立性的!当他返回两个值的时候我们就可以根据if。
2024-11-16 15:54:58
984
2
原创 Linux:进程概念
• 课本概念:程序的⼀个执⾏实例,正在执⾏的程序等• 内核观点:担当分配系统资源(CPU时间,内存)的实体。但这些观念都是建立在已经理解的基础上描述出来的,对于初学者一头雾水,所以本文将尽可能描述清晰其概念。本文主要介绍了进程的一些基本概念,并展示了一些查看进程的方式,以及bash的概念。
2024-11-13 19:51:01
1215
原创 Linux:调试器 gdb/cgdb 的使用
本文主要讲解如何在Linux环境下面来对代码进行调试本文主要介绍了gdb的一些指令方便使用的时候查看。
2024-11-09 18:06:21
841
原创 c++:智能指针
智能指针(smart pointer)是一种用来防止内存泄漏的编程技术,它利用对象管理资源的方式(又名RAII——Resource Acquisition Is Initialization),即利用对象析构函数在生命周期结束时自行调用的特性,让编译器自行释放动态开辟的空间。内存泄漏通常发生在使用了new或malloc等函数动态分配内存后,忘记了对应的delete或free调用,或者是因为逻辑错误导致这些调用未能执行。这种情况下,程序占用的内存会逐渐增加,最终可能导致系统资源耗尽,程序崩溃或运行缓慢。
2024-11-05 20:56:53
3098
1
原创 c++:异常
异常(Exception)是一种用于处理运行时错误的机制。它允许程序在检测到错误条件时,能够优雅地从一个代码块跳转到另一个代码块,以处理该错误,而不是直接崩溃或返回不确定的结果。C++的异常处理机制依赖于三个关键字:try()、throw(抛出)和catch(捕获)。
2024-11-02 19:47:26
717
原创 c++11(下篇)
承接上文c++11(上篇),上文主要讲解了初始化列表,右值引用和移动语义等相关知识,下面将会由此深入并扩展c++11中的重要概念此外在了解一个知识点的时候,作者会先介绍其面对的问题,再讲解概念是如何解决这个问题的以上便是c++11的部分内容,其中仍有诸多不足之处,望能看到总结处的小伙伴见谅。
2024-11-01 21:07:56
2896
原创 c++11(上篇)
C++11 是 C++ 语言的一个重大更新版本,于 2011 年正式发布。它引入了许多新特性和改进,旨在使 C++ 编程更加现代化、高效和易用。此外在学c++11之前,有关c++临时对象这篇文章可能会给您带来理解上的帮助。
2024-10-27 18:01:56
1269
原创 c++临时对象(无名对象)
临时对象(temporary object)是编译器在需要时自动创建的一种无名对象,通常用于表达式求值、函数返回以及类型转换等场景。临时对象在需要时会被创建,并在表达式求值结束后被销毁。了解临时对象的行为和用途对于编写高效和正确的C++代码至关重要。当我们在写代码时,应当注意以下几点要求:避免不必要的临时对象:频繁创建和销毁临时对象可能会带来性能开销。因此,在设计类和运算符重载时,要尽量避免不必要的临时对象创建。
2024-10-24 17:30:21
556
原创 哈希表(结构原理梳理与模拟实现)
哈希表(Hash table),也叫散列表,是一种非常重要的数据结构。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。本文简单的介绍了哈希表以及其面临的哈希冲突问题和解决办法,哈希冲突是无可避免的,我们能做的就是尽量使其映射到哈希表上的数据分布更为均匀。
2024-10-20 19:00:51
1114
原创 AVL树(包括其代码实现以及思想过程)
AVL树又名自平衡的二叉搜索树,本文将逐步介绍其形成过程和原理思想``当我们遇到如下情况的二叉树搜索树的时候可以看出当我们需要遍历或者访问里面的数据变量时,它的时间复杂度就从O(log N)变成了O( N ),从树结构的操作变成了链表操作。这时候就需要用一种方式来控制其高度上的变化来维持这段树结构。两位苏联数学家G.M.Adelson-Velsky和E.M.Landis在1962年发明了AVL树(又名自平衡的二叉搜索树)。它时最先被发明的一种自平衡二叉查找树。
2024-10-05 16:26:46
1601
1
原创 C++:多态的认识和使用
多态顾名思义就是同一种行为或者事物的多种形态,了解并掌握使用多态可以使代码变得灵活以及提高可扩展性。多态的构成同时会伴随着继承行为的产生。多态的出现是继承关系下的类对象调⽤同⼀函数,会产⽣了不同的⾏为。例行解释:⽐如Student继承了Person。Person对象买票全价,Student对象优惠买票。多态是面向对象语言中重要的一种表达方式,灵活的运用能提高代码的各种属性。百尺竿头更进一步。
2024-09-16 19:06:46
1280
原创 STL:迭代器(iteratoes)概念
迭代器(Iterator)是一种用于访问容器(如数组、向量、列表等)中元素的通用机制。迭代器提供了一种方法,能够按顺序遍历容器中的元素,同时保持容器与迭代器之间的解耦,这意味着迭代器的设计不依赖于容器的内部结构。本文概念定义主要参考《STL源码剖析》,以下将会梳理迭代器相关的概念,以及用list中的迭代器的模拟实现来大致阐述其作用。迭代器是一种抽象的设计概念,现实编程语言中并没有直接对应于这个概念的实物
2024-08-18 21:00:37
1396
原创 c++:string类的简单了解以及简单模拟实现
srting类的出现本质上是为了复用性(reusability)的提升,它位于头文件中,用于表示和操作字符串。string类提供了丰富的成员函数和运算符重载,使得字符串的处理变得既简单又高效。string类虽然没有存在于STL中,但它拥有着STL里面容器的身影,两者相得益彰。所以学习STL的开篇便是从string类当作打开STL世界的钥匙想要了解string必须知道它的解释以及成员函数。让我们来看看官方对于string的解释如何:,这是由其编码方式原因造成的不做过多赘述。
2024-08-15 00:20:33
824
原创 linux的环境安装
本篇内容将会简单梳理Linux的发展历史,然后讲解本人如何安装Linux的环境以及遇到的一些问题和解决方法,如果对发展史不敢兴趣可以直接跳到二:云服务器环境安装例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
2024-08-07 21:24:14
1195
原创 c++:类与对象
C++ 中的类和对象是面向对象编程(OOP)的核心概念。面向对象编程是一种编程范式,它使用“对象”来设计软件。对象包含数据(属性)和操作数据的方法(行为)。类则是一种定义对象的蓝图或模板,它指定了对象应具有的属性和方法。
2024-07-19 18:06:08
1144
2
原创 初识c++(namespace的基本概念)
C++是一种编程语言,所谓语言就是交流的工具,而c++就是人与计算机进行交流的语言。当在特定环境下从键盘上输入语法(就像两个人之间交流),并将语法灵活组合(就像汉字之间组合起来)就成了程序。而c++在这里面的作用就是能让计算机以特定的逻辑和指令来理解我们的程序。本文主要介绍了namespace的一些基本概念,也是作者第一次写博客,开始了c++的旅程,仍有不足与缺陷之处,希望以后能坚持不断的写博客总结知识点。故不积跬步,无以至千里;不积小流,无以成江海。
2024-06-25 17:27:05
565
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人