自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

原创 【Linux】网络概念

1号主机发送数据,其他主机都会收到,在数据链路层判断目的mac是否是自己,不是就丢弃,是就把有效载荷交给上一层处理。如果网卡是混杂模式,那么无论是不是发给自己的,都交给上一层处理。交换机可以减少数据扩散范围,假如1号发给7号,那么交换机就可以不让数据扩散到右侧。局域网协议包含以太网,令牌环网,无线wlan。mac地址是网卡出厂就有的地址,全球唯一。数据链路层的报头包含源man和目的mac。网络层和传输层就是操作系统的一部分。多个主机同时发消息会出现数据碰撞。发送与接收,封包与解包。

2025-03-31 19:22:55 164

原创 【Linux】线程

子进程会拷贝父进程的PCB,地址空间,页表。而线程只用拷贝进程的PCB,进程会分享一些地址空间的资源给线程使用。linux对线程的实现方案复用了进程pcb,并没有重新写tcb重新理解进程进程包括多个执行流(PCB,线程),地址空间,页表以及占用的部分物理内存。线程和进程的理解CPU不用关心当前执行的是线程还是进程,CPU只有执行流的概念。

2025-03-26 21:11:09 616

原创 【Linux】信号

前台进程ctrl c 是2号信号给信号设置自定义动作键盘输入数据完成后,会通过硬件中断提醒CPU,操作系统提取对应中断号去中断向量表执行对应方法。异步。

2025-03-10 14:53:46 897

原创 【Linux】进程间通信 续

文件描述符表,文件的加载,内存中生成一个文件对象,每个文件对象有inode,方法集,文件缓冲区,磁盘中的文件属性加载到inode,文件内容加载到文件缓冲区。父进程同时用读方式和写方式打开管道文件,会创建读文件对象和写文件对象,但它们是同一个文件,都是同一个inode,同一个方法集,同一个缓冲区。不同进程通信的前提是看到同一份资源,为了保证同一份资源我们就用了路径+文件名确定,因为具有唯一性,所以叫命名管道。不同的进程会以读写方式打开不同的文件对象,但都指向同一个文件的inode,方法集,缓冲区。

2025-03-05 22:32:51 841

原创 【Linux】进程间通信

目录进程间通信什么是进程间通信?为什么要进程间通信?怎么做进程间通信? 一个进程给另一个进程发送基本数据。一个进程给另一个进程发送命令控制进程。多个进程协同工作。通知进程。两个标准:systemV,posix管道与两个标准无关。

2025-02-24 22:22:49 186

原创 【Linux】动静态库

如果读到call指令,CPU会发现这是函数调用,CPU读到的指令内部可能有地址,这个地址是逻辑地址,也就是虚拟地址,所以就直接用虚拟地址去找物理地址。gcc编译时,会去系统默认库路径下找库文件,加L后面跟路径就是告诉系统来这个路径找库文件,加l后面直接跟库的名字就是告诉系统我要链接这个库。第二步,用虚拟地址去页表找物理地址,但此时并没有建立映射,此时会触发缺页中断,然后加载程序,建立映射。这里报的是加载错误,就是你还得告诉系统,告诉加载器,不仅编译要有路径,加载也要有路径。(编译器要考虑操作系统)

2025-02-23 18:12:19 657

原创 【Linux】软硬链接

项目中的exe文件可能在很深的目录中,为了方便执行,会给exe创建一个快捷方式就是软链接。ln建立链接,-s就是soft,软链接的意思。随意允许对目录进行硬链接会造成环路问题。软链接类似于windows的快捷方式。ln建立链接,不加-s就是硬链接。查看inode编号。

2025-01-31 22:39:16 225

原创 【Linux】文件系统

新建文件的流程:路径可以知道自己所在的分区,然后分区内每个组的GDT可以知道inode是否有剩余,确定组后inode位图可用知道哪个inode可用并给你对应的inode编号,然后就去inode Table写入对应文件属性,然后到写入文件内容,写入前会获取你要写入的大小从而确认要用多少数据块,然后在Block Bitmap找对应数量可使用的数据块并返回这些数据块编号,这些编号会填到inode结构体里面的数据块数组中,然后在对应编号的数据块里面写入内容。inode位图负责判断对应的inode内容是否有效。

2025-01-30 12:59:27 873

原创 【Linux】磁盘

与磁头运动频率有关。

2025-01-27 22:42:53 323

原创 【Linux】重定向,dup

close(1)就是把下标1的内容清空。然后下次再打开文件时,下标1的位置是最小的且没有占用的,所以就这个打开的文件struct file就放在这个下标里。重定向是修改进程内核数据结构的内容,程序替换是替换原本的程序是在内存层面上的,对进程不影响。把显示器文件关闭后,本来应该写给显示器文件的,却写到了普通文件。把oldfd的内容拷贝给newfd。拷贝的是下标对应的内容。不写几号文件默认是1,写了就代表几号文件的输出重定向。write只需要往1里面写,并不会考虑1是谁。2>&1表示把下标1的内容给下标2。

2024-11-22 21:15:33 482 4

原创 【Linux】文件接口,struct file, 文件描述符表,FILE

文件被打开,文件属性先被加载到内存,文件内容是否加载看你是否读取。

2024-11-20 11:09:48 496 1

原创 【Linux】实现一个简易的shell

8162425 //获取用户名27 {29 }3031 //获取主机名33 {35 }3637 //获取当前路径39 {41 }4244 {4749 //这里s无论如何都不可能为空,50 //因为什么都不输入都至少有一个回车,51 //所以空就是出错了。53 (void)s;5455 //把输入的回车去掉58 }5961 {67 }6870 {73 {75 return;76 }78 {

2024-11-20 10:42:54 695

原创 【Linux】进程程序替换

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 例程开始执行。linux形成的可执行程序是elf格式,这种格式最开始有可执行程序的表头,可执行程序的入口地址就在表里面。把自己的代码和数据替换成其他的代码和数据,然后再执行一遍新的代码。程序替换没有创建新进程,只进行进程的代码和数据的替换。程序替换后,替换函数后面的代码不会执行。

2024-11-19 11:53:35 376

原创 【Linux】进程等待

子进程退出时会把退出信息比如退出码,终止信号记录在自己的PCB上,waitpid检测到你是Z状态就会把这些信息拿到给status,所以waitpid的本质是获取该进程的PCB其中的某些数据,然后把Z状态改为X。0表示阻塞等待,子进程没结束父进程就一直等待,一直在子进程PCB等待队列中,等着子进程PCB的退出信息。因为父进程关心子进程的信息挺多,所以要分几部分,比如是否异常退出,结果是否正确。父进程通过调用wait/waitpid进程僵尸进程的回收。通过进程等待可以保证父进程是多个进程中最后一个退出的进程。

2024-11-18 17:23:56 587

原创 【Linux】进程创建,进程终止

从技术上讲,当你创建子进程时,父进程完全可以把代码和数据全部拷贝过去,但万一需要写入的数据只有少数,剩下的数据只需要读取,这样相当于有大量重复内容,造成空间浪费,所以写时拷贝是一种按需申请,等你要用时再给你进行拷贝写入。如果你是只读数据那么权限还是只读,如果你是可读写那么第一次权限改成暂时的只读,当你要写入时,遇到暂时的只读会触发写时拷贝,并且把这个暂时的只读改为可读写。通常,父子代码共享,父子不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。12是当前进程的退出码。

2024-11-18 10:37:55 353

原创 【Linux】虚拟地址空间,页表,物理内存

每个存储单元是一个字节,一共有2^32个字节,大概有4G。栈往下走,堆往上走。static修饰的局部变量编译的时候会被编译到全局数据区。如下图,父子进程访问同一个变量,子进程修改了一下变量,如何做到同一个地址,却读到了不同的内容?答:因为这个地址不是物理地址,这个地址是虚拟地址或线性地址,平时语言用的地址都是虚拟地址。

2024-11-16 16:32:05 568

原创 【Linux】进程状态,优先级,环境变量

进程状态,优先级,环境变量

2024-11-15 12:08:51 1116

原创 【刷题】优选算法

如图,我们先算出最左边(1)和最右边(7)围起来的容量,然后,7不动,1继续和7的左边3,8,4...遍历算出容量,你会发现底是不断缩短的,同时高一直都是1,因为高只有两种情况,比它小或和它相等,所以1和7左边的值算出来的容量都是比1和7的容量小的,因为底在不断变小同时高可能不变也可能变小。根据两个实例和鸽巢原理可以发现不断的平方和最终都会形成环,所以我们可以联想到用快慢指针,慢指针走一步,快指针走两步,最终会在环相遇,判断相遇时是否为1。第一个实例是快乐数,因为会变为1且不断是1的循环。

2024-11-06 17:23:27 576 1

原创 【Linux】工具和软件

yum, vim, gcc/g++, makefile, git, gdb

2024-11-06 17:22:11 456

原创 【Linux】指令,权限

基本指令,指令运行原理,权限

2024-11-05 19:46:10 1170

原创 【C++】类型转换

C++类型转换

2024-11-01 15:12:54 446

原创 【C++】特殊类设计

单例模式, 饿汉,懒汉

2024-11-01 15:12:01 626

原创 【C++】IO流

类型转换重载,文件IO,字符串流

2024-11-01 15:10:31 960

原创 【C++】C++11

列表初始化,initializer_list,decltype,右值引用,移动构造,移动赋值,万能引用,完美转发,default,delete,lambda,function包装器,bind,智能指针

2024-10-23 09:21:04 970 1

原创 【C++】异常

异常概念,用法,抛出捕获,重新抛出,安全,规范,体系,优缺点。

2024-10-20 12:50:17 1101 1

原创 【C++】unordered系列,哈希,闭散列,开散列,位图,布隆过滤器,哈希切分

unordered_map,unordered_set,哈希函数,哈希冲突,闭散列,开散列,哈希表,位图,布隆过滤器,哈希切分。

2024-10-16 12:51:10 709 1

原创 【C++】set,multiset,map,multimap

set,multiset,map,multimap

2024-10-07 15:58:29 860 3

原创 【C++】二叉搜索树

二叉搜索树模拟实现,编程题,性能,应用

2024-10-05 21:54:40 821 1

原创 【C++】多态,虚函数,重载,重写,重定义,final,override,抽象类,虚函数表,动态绑定,静态绑定详解

多态,虚函数,重载,重写,重定义,final,override,抽象类,虚函数表,动态绑定,静态绑定

2024-10-01 11:14:12 918 2

原创 【C++】继承,菱形继承,虚拟继承,组合详解

继承,虚拟继承,组合

2024-09-28 20:43:59 1161 2

原创 【C++】函数模板,类模板,全特化,偏特化详解

函数模板,类模板,全特化,偏特化

2024-09-27 17:45:54 1640

原创 【C++】容器适配器,stack,queue,priority_queue详解,模拟实现

stack,queue,priority_queue,容器适配器

2024-09-24 11:39:01 775 2

原创 【C++】list详解及模拟实现

list介绍,模拟实现

2024-09-21 18:02:51 1190 1

原创 【C++】vector详解,模拟实现

vector

2024-09-17 17:06:19 1091 2

原创 【C++】详细介绍内存管理方式,new和delete实现原理,定位new,内存分布

new,delete,operator new,operator delete,定位new,内存分布

2024-09-13 10:05:51 908 12

原创 【C语言】选择题错题集

x86是小端存储,即高位存储在高地址,低位存储在低地址。此时不再是数字字符0,1,2,而是ascii码值。一个算法有0个或多个输入 有一个或多个输出。

2024-09-13 10:00:26 322 2

原创 【C++】详细介绍类的相关语法概念,this,默认成员函数,static,友元,内部类

类,this,默认成员函数,static,友元,内部类,日期类

2024-09-13 09:59:09 1015

原创 【C++】C++入门基础,详细介绍命名空间,缺省参数,函数重载,引用,内联函数等

命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for,nullptr

2024-09-09 22:53:49 2269 159

原创 【数据结构】选择题错题集

筛选法就是向下调整算法。用向下调整建堆从最后一个节点的父亲开始。可以先推出第一趟的key,左边比key小,右边比key大。当换到根节点的时候,左右子树就已经是堆了,只需比较一次。不要想象只有这两个节点,还有其他节点省略了。这里只有遍历前面的链表找到尾节点连接即可。这里错位相减法是乘4,所以最后要除三。向下调整建堆的时间复杂度是O(n)这里注意原本p后面也是有节点的。100个数只用比较99次。快排的key也能确定。

2024-09-07 23:27:01 297 3

原创 【数据结构】详细介绍各种排序算法,包含希尔排序,堆排序,快排,归并,计数排序

直接插入排序,希尔排序,直接选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序

2024-09-06 23:06:12 3068 198

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除