- 博客(75)
- 收藏
- 关注
原创 Linux 进程信号(超详细的都在这里了,从多个方面【信号的产生(系统闹钟)-信号的保存(sigset_t)-信号的捕捉-基于信号操作系统的运行-可重入函数-Volatile-SIGCHLD信号】讲解
在操作系统中,信号的软件条件指的是由软件内部状态或特定软件操作触发的信号产⽣机制。这些条件包括但不限于定时器超时(如alarm函数设定的时间到达)、软件异常(如向已关闭的管道写数据产⽣的SIGPIPE信号)等。当这些软件条件满⾜时,操作系统会向相关进程发送相应的信号,以通知进程进⾏相应的处理。简⽽⾔之,软件条件是因操作系统内部或外部软件操作⽽触发的信号产⽣。系统闹钟,其实本质是OS必须⾃⾝具有定时功能,并能让⽤⼾设置这种定时功能,才可能实现闹钟这样的技术。定时闹钟也要被管理的:先描述,再组织。
2024-12-25 12:24:20
3403
63
原创 【Linux 进程间的通信】-命名管道(要知道什么是命名管道,已经为你全部整理到这里了)
命名管道(Named Pipe),也叫做FIFOs(First In First Out),是一种在进程间进行通信(IPC, Inter-Process Communication)的方法。与匿名管道相比,命名管道具有一个持久化的名字,可以在不同的进程之间进行数据传输,甚至跨越不同的应用程序。在操作系统中,管道(Pipe)是一种单向通信方式,允许数据从一个进程流向另一个进程。命名管道的特点是,它通过一个在文件系统中存在的名字来标识,进程可以通过这个名字来访问和通信。命名管道常用于跨进程通信,并且允许数据
2024-12-18 09:00:00
444
13
原创 【Linux 进程间的通信】—进程池(何为进程池,看了就懂)
进程池的核心思想是预先创建一定数量的进程,并将这些进程放入一个池中。当有新的任务到来时,进程池会分配一个空闲的进程来处理这个任务。任务完成后,进程不会关闭,而是返回池中等待下一个任务。这种方式避免了频繁创建和销毁进程的开销,同时也限制了同时运行的进程数量,防止操作系统过载。
2024-12-17 09:00:00
779
9
原创 【Linux 进程间的通信】匿名管道
匿名管道是UNIX系统进程间通信(IPC)的一种基本形式,它允许具有血缘关系的进程之间进行数据传输。在Linux环境下,匿名管道是通过内核中的缓冲区实现的,这个缓冲区的大小是有限的,通常由操作系统决定。匿名管道是半双工的通信方式,即数据只能单向流动,要么是父进程向子进程发送数据,要么是子进程向父进程发送数据。在Linux中,可以通过pipe()系统调用来创建匿名管道。这个函数会返回两个文件描述符,pipefd[0]用于读取,而pipefd[1]用于写入。创建管道后,通常会通过fork()创建子进程,子进
2024-12-16 09:00:00
496
12
原创 Linux 进程间的通信(超详细的从多方面【管道-匿名管道(进程池)-命名管道-system V】讲解)
管道是Unix中最古老的进程间通信的形式,我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”补充who //看当前有几个用户登录who | wc -l //统计当前的登录用户。
2024-12-15 12:00:00
3664
52
原创 Linux 详细了解动静态库创建以及内部详细,全方位讲述,要想知道什么是动静态库,看这一篇就够了
在编译可执行文件时,要注意,之前的编译方法对于我们自己弄的第三方库,要 `gcc main.c -lmystdio` 这样进行编译,mystdio是libmystdio.a去了头去了尾的在编译可执行文件时,**如果库和源文件在一起**,gcc在查找静态库的时候,不会在当前目录查找,那就要用 `gcc main.c -o main -L. -lmystdio` 告诉编译器,编译的时候,查找库,除了系统路径,也要在我指明的路径下找 在编译可执行文件时,**如果使用的是带路径的库**,编译时就要用 `gcc m
2024-12-03 17:38:21
877
44
原创 Linux文件系统 超详细的都为你整理到这里了,要想知道文件系统是什么,以及文件系统的内部是怎么样的,看这一篇就够了
磁铁数:每个盘片都有上下两面,分别对应1个磁铁,共两个磁头磁道数:磁盘是从盘片外面往内圆编号0磁道、1磁道…靠近主轴的同心圆用于停靠磁头,不存储数据。柱面数:磁道构成柱面,数量上等同于磁道个数扇区数:每个磁道都被分成很多扇形区域,梅道的扇区数量相同圆盘数:就是盘片的数量磁盘容量=磁头数×磁道(柱面数)× 每道扇区数×每扇区字行数传动臂上的磁头是共进退的。
2024-12-01 16:36:56
1489
47
原创 【Linux】—文件(这里有你想知道的文件的一切)
1 文件=内容+属性2 访问文件之前,都必须先打开它(fopen)!因为文件没有被打开时是在磁盘上的,(当文件执行到fopen后文件才会被打开,访问文件的时候其实是进程在访问的,而进程是在内存上的,通过cpu来执行的,因为cpu可以直接读写内存)根据冯诺依曼体系,cpu不能直接访问磁盘。打开的本质就是将文件(内容或者属性)加载到内存中!文本写入和二进制写入是没有区别的,在系统层面上只有二进制写入,因为read 在系统调用的参数是(void*)所谓的格式是用户层自己维护的。所以文本写入和二进制写入由用户决
2024-11-30 17:08:33
1071
36
原创 【Linux】—简单实现一个shell(myshell)
shell本质上就是一个进程,所谓的命令行参数,环境变量,就是shell内部的表(指针数据组),如果是表的话可以通过(env、expect…)这些命令会围绕着这张表来让shell来自主定义与维护这张表。
2024-11-23 12:54:14
3190
71
原创 【Linux】—进程创建详解(新手小白通俗易懂版)
进程调用fork,当控制转移到内核中的fork代码后,内核做:1 分配新的内存块和内核数据结构给子进程2 将父进程部分数据结构内容拷贝至子进程3 添加子进程到系统进程列表当中4 fork返回,开始调度器调度execlp等这些都是通过C标准库封装了execve这个系统接口来实现的。
2024-11-20 13:34:23
1029
38
原创 【Linux】—进程地址空间
地址空间的本质就是一个struct mm_struct ,里面所有的内容,都是OS系统自动完成的。我们只要把进程管理好了,地址空间就管理好了。比如:全局变量,字符串常量具有全局性,在程序运行期间都会有效,其实实际上是在地址空间中随着进程,一直存在,全局变量的虚拟地址也会一直被用户看到。
2024-11-17 11:34:53
700
12
原创 【Linux】--环境变量
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
2024-11-16 13:42:27
1160
14
原创 【Linux】--进程(优先级)
进程切换的核心就是进程上下文数据的保存和恢复。保护就是单时间片或者其他进程进入之前,先将相关寄存器的内容保存起来(这个保存的地方是不在CPU中的)。恢复就是当要继续这个进程时,将历史保存的寄存器的数据,恢复到寄存器中每次的切换都保证了CUP在运行下一个进程时都是全新的。进程在CUP中的切换过程1. 根据pc取指令2. 更新pc3. 分析执行指令pc=当前地址+读进来的指令的长度进程的优先级是:获得CPU资源的先后顺序,比如:排队的本质就是在确认优先级。优先权高的进程有优先执行权利。配置
2024-11-15 18:28:03
1019
1
原创 C++11 新的类功能与默认参数模版
原来C++类中,有6个默认成员函数:1. 构造函数2. 析构函数3. 拷贝构造函数4. 拷贝赋值重载5. 取地址重载6. const 取地址重载最后重要的是前4个,后两个用处不大。默认成员函数就是我们不写编译器会生成一个默认的。C++11 新增了两个:**移动构造函数和移动赋值运算符重载**针对移动构造函数和移动赋值运算符重载有一些需要注意的点如下:1. 如果**你没有自己实现**移动构造函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任意一个。那么编译器会自动生成一个默
2024-11-12 19:36:04
633
17
原创 【Linux】进程(状态)
并发:cpu执行进程代码,不是把进程代码执行完毕,才开始执行下一个,而是给每一个进程预分配应该时间片,基于时间片,进行调度轮转(单CUP下),让多个进程都得以推进并行:多个进程在多个CPU下分别,同时进行运行在内存资源严重不足时,操作系统会通过挂起进程的方式,将代码和数据换出到磁盘的所有分区,从而有效的去缓解内存资源不足的问题,如果实在缓解不了,操作系统就会干掉系统上进程
2024-11-12 13:29:48
572
1
原创 【Linux】——操作系统-进程详解
父:子=1:nfork()->两进程->父子关系->一般而言,代码是会共享的,但是数据是各自私有一份的那问题来了,为什么数据是各自私有一份的呢???因为进程具有很强的独立性!多个进程之间,运行时。互不影响,即便是父子。
2024-11-02 14:33:20
1664
原创 了解 C++11(右值引用和移动语义)
右值引用和移动语义传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。左值是一个表示数据的表达式(如变
2024-11-01 19:37:45
1886
8
原创 【Linux】--操作系统(Operator System)(1)
1. 冯诺依曼体系的复习2. 管理3. 了解进程任何程序,运行的时候,都必须先被(从键盘)加载到内存当数据在计算机内部流传的时候,本质是在不同的设备间进行拷贝——设备的拷贝效率本质就是计算机的效率任
2024-10-31 19:38:08
317
原创 详细了解C++11(1)
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中。
2024-10-30 18:00:00
1497
原创 C++ 哈希表
顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(log_2 N),搜索的效率取决于搜索过程中元素的比较次数理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。
2024-10-27 18:13:06
1096
原创 C++ 红黑树模拟实现STL中的map和set
迭代器的好处是可以方便遍历,是数据结构的底层实现与用户透明。如果想要给红黑树增加迭代器,需要考虑以前问题:**1 begin()与end()**STL明确规定,begin()与end()代表的是一段前闭后开的区间,而对红黑树进行中序遍历后,可以得到一个有序的序列,因此:**begin()可以放在红黑树中最小节点(即最左侧节点)的位置,end()放在最大节点(最右侧节点)的下一个位置**,关键是最大节点的下一个位置在哪块?能否给成nullptr呢?答案是行不通的,因为**对end()位置的迭代器进行-
2024-10-24 21:20:08
366
2
原创 C++ 红黑树
红黑树是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个着色方式的限制,红黑树确保么没有一条路径会比其他路径长出两倍(最长路径
2024-10-23 15:24:49
995
3
原创 C++ AVL树
AVL树:二叉搜索树虽然可以缩短查找的效率,但**如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),就可以降低树的高度,从而减少平均搜索长度。1. 它的左右子树都是AVL树2. 左右子树高度之差(简称平衡因子)的绝对值不超过1如果一棵二叉搜索树是高度平衡的,它就是AVL树。
2024-10-14 20:38:09
1224
3
原创 map与set在题目中的运用
希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦(不能私学,谁私学谁是。原创优快云首发,如需要转载请通知。
2024-10-13 21:00:00
213
1
原创 C++ map和set
map中的的元素是键值对map中的key是唯一的,并且不能修改默认按照小于的方式对key进行比较map中的元素如果用迭代器去遍历,可以得到一个有序的序列map的底层为平衡搜索树(红黑树),查找效率比较高Olog2NO(log_2 N)Olog2N支持[]操作符,operator[]中实际进行插入查找。multiset是按照特定顺序存储元素的容器,其中元素是可以重复的。
2024-10-13 16:49:33
694
2
原创 C++ 搜索二叉树
若它的左子树不为空,则左子树所有节点的值都小于根节点的值。若它的右子树不为空,则右子树上所有节点的值都小于根节点的值。它的左右子树也分别为二叉搜索树。时间复杂度:增删查改时间复杂度O(N)插入和删除操作都必须查找,查找的效率代表了二叉搜索树中各个操作的性能。对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二叉搜索树的深度的函数,即结点越深,则比较次数越多。最优情况下,二叉搜索树为完全二叉树(或接近),其平均比较次数为:log_2 N。
2024-10-08 10:25:08
878
1
原创 C++ 多态
基本概念:通俗的讲,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。1、满足虚函数的重写2、调用时要么只能用指针调用虚函数,要么只能用引用调用虚函数。在虚函数的后面写上 =0 ,则这个函数为纯虚函数。**包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化对象。**派生类继承后也不能实例化对象,只有重写纯虚函数,派生类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现了接口继承。class Carpublic:public://重写虚函数。
2024-09-26 18:18:46
1119
4
原创 C++ vector
vector的介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。
2024-09-25 15:44:49
825
3
原创 C++ (进阶)继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增强功能,这样产生新的类,被称为派生类。继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认知过程。以前我们接触的复用都是函数的复用,继承是类设计层次的复用。public:cout
2024-09-06 18:31:42
711
原创 C++模版进阶
通常情况下,使用模版可以实现一些与类型无关的代码,但对于一些特殊类似的可能会得到一些错误的结果,需要特殊处理,比如:实现了一个专门用来进行小于比较的函数模版。//特化--特殊处理bool Less} //特化--特殊处理 template < > bool Less < Date * >(Date * const & left , Date * const & right) {return 0;
2024-09-01 12:24:22
1077
5
原创 C++零基础入门
熟悉了C语言后我们现在要学习一下C++了,C++是C语言的基础之上而建立的语言。学习目标:1、知道C语言的一些不足,以及C++是如何对C语言设计不合理的地方进行优化的。比如:作用域方面、IO方面、函数方面、指针方面、宏方面等2、为后续类和对象打下基础需要使用到namespace关键字后面跟命名空间的名字然后接一对{}就可以了,{}中为成员。1、命名空间的定义//namespace 命名空间的定义关键字 作用:防止命名冲突//命名空间中可以定义变量/函数/类型struct top。
2024-04-09 18:40:33
920
7
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人