- 博客(104)
- 收藏
- 关注
原创 Git 为 ssh 协议设置代理
我们为终端设置clash代理的时候,一般都是设置的http/https或者socks.但是我们用github的时候一般是用密钥也就是ssh链接.在文件中加入以下的代码.
2024-02-12 11:06:35
1327
2
转载 AWS Lightsail 开启 Root 密码登陆权限
是一个脚本,开始创建用例的时候设为用户脚本,也可以在实例中执行该脚本。默认 root 密码为 Passwd。将下面代码中的第一句中的。改为自己将要设置的密码,
2024-02-03 12:07:47
1008
原创 deb包转rpm
在Linux系统上有两种主要的软件包格式,分别是RPM和debrmp是红帽系的,例如fedora,centosdeb是debian系的,例如debian,ubuntu。
2024-01-25 18:14:05
2304
原创 xv6源码分析--内存管理
xv6的内存管理在文件中,在线查看该代码请点击。该文章代码都在中)首先介绍一个结构体kmem// 这是一个临界资源,修改时候要获取锁struct {} kmem;kmem是一个临界资源,其中定义了一个锁,还有一个空闲页的链表,在这个空闲页的链表中存储着当前所有的空闲页。
2024-01-05 20:26:53
938
原创 neovim调试linux内核过程中索引不到对应头文件问题
当用nvim打开linux源码文件时候会出现下列的情况,找不到对应的结构定义,也索引不到对应的头文件,在对应结构按。最后在Reddit上发了篇求助帖子,有个外国友人解决了这个问题。如果是在ubuntu下编译内核,需要下载下面的依赖。在linux源码根目录下运行下面命令,编译内核。然后打开nvim更新完成索引就行了。mason的clangd LSP。也进入不了对应的结构。
2024-01-01 15:15:58
1059
原创 异常控制流ECF
CPU每次取指前都会查看一下中断引脚如果有有效值,并且IF=1(不可屏蔽中断),CPU就会向发送中断信号的外设发送一个低电平有效的电信号,表示已经收到了你的中断信号。其实举个例子来说:就是你写着作业呢,你舍友在蹲坑给你打个电话让你拿个卫生纸(发生事件),你保存下当前写的作业的状态(保存现场),然后给舍友去送纸(处理中断),送完回来继续接着写作业(恢复现场)。)是需要CPU立即处理该事务,不可屏蔽中断发生时,将当前的指令和状态(各个寄存器的值)存储在栈中,方便CPU处理完中断后继续恢复中断前的工作。
2024-01-01 11:38:18
1077
原创 vscode调试mit6s081Lab
这里,要填成自己gdb-multiarc的位置(ubuntu应该默认就是这个位置)。(这里是个例子,表示切换到sleep.c的符号表),输出。点开这个文件,然后记住画线的那个端口号,我这里是。文件中打断点了,断点是红色的表示打成功了。这个配置文件有两个需要改的地方。文件中的那个端口号。vscode调试会用到个。2、在调试控制台,输入。,项目根目录产生一个。(你的可能不一样),这一项需要把端口改为。表示这个gdb命令。
2023-12-03 15:49:09
920
原创 linux安装zsh、oh-my-zsh及常用插件
这个不用多说了,直接用你发行版Linux对应的包管理器安装就行了。代码高亮,终端输入正确命令时候是绿色的,不正确的是红色的。代码提示,终端输入命令的部分字母时候,会提示后面的字母。,在pulgins项的后面加上。,在pulgins项的后面加上。后面的值改为对应主题名称。一个自动跳转的,会对之前。,刷新一下zsh配置。到的位置有记忆功能。
2023-11-24 10:12:04
1269
原创 inode、软链接、硬链接
大家好,我叫徐锦桐,个人博客地址为,github地址为。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家访问。
2023-11-16 21:15:43
115
原创 ArchLinux设置grub引导
安装ArchLinux的时候,要先整完grub引导才能重新启动,要不重新启动的时候就进入不了这个系统了。如果grub界面中没有windows系统,在之后重新进入系统的时候重新执行。
2023-11-11 15:02:40
1433
原创 图片批量压缩成webp格式并重命名
运行脚本后,压缩后的文件会输出到output文件夹中,然后原图片会备份到backup文件夹中。之前我的图片都是用的蓝空图床加阿里的oss,但是由于经济问题,我服务器换到了斯巴达的黑五二十四刀。链接:https://pan.baidu.com/s/19VGyiR68eqOfWl1vWlL0dQ?图床换成了picoshare,只有20M左右,但是功能比较少,没有自动压缩和重命名的功能,没办法只能自己写个脚本了。如果不想下载依赖啥的,我这将代码打包成了个exe文件,下载了直接运行就行了。
2023-10-28 17:23:06
288
原创 picoShare图床中数据库图片下载到本地
这里entries是图片的信息(文件名、类型等等),entries_data是图片的二进制也就是实际图片的数据。downloads就是访问图片的信息。自己写一个了python脚本用于将PicoShare的sqlite数据库中下载图片。下面这个是将sqlite中的图片保存到当前目录的image文件夹中,将该程序与。这个放出PicoShare的数据库结构。通过id连接在一起。
2023-10-28 17:20:33
250
原创 操作系统页面置换算法
进程运行时,若其访问的页面不在内存而需将其调入,但内存已无空闲空间时,就需要从交换空间(磁盘中上)中找到对应的页,替换到内存中一个不经常用到的页。more选择那个内存中需要被替换的页的过程叫页面置换算法。
2023-10-27 09:23:26
166
原创 手写操作系统项目----进程切换
1、如果就绪队列中有多个任务才进行切换。如果有多个任务,就先将当前任务放到就绪队列的尾部(先将任务从就绪队列中移除–,然后将任务放到就绪队列尾部–2、从就绪队列中取出下一个任务。3、将中当前运行的任务改为 to 任务。4、将 to 任务的状态改为 TASK_RUNNING。5、进行TSS结构的切换。就是通过tss的选择子在GDT中找到下一个任务的tss地址,然后长跳到另一个进程的tss位置,然后硬件会自动将当前TSS中的信息加载到各个寄存器,将tss位置存到TR寄存器中。
2023-10-24 14:42:54
127
原创 信号量、互斥锁、计数信号量
信号量(semaphores)是一个简单的多进程共享的非负整型全局变量。一个进程修改信号量时,信号量不可被其他进程修改)操作:wait() 和 signal() 来访问。
2023-10-24 14:41:17
112
原创 GDT、LDT,TSS、段选择子、段描述符
在32位操作系统保护模式下,所有的内存访问都要通过GDT(全局描述符表)或者LDT(局部描述符表),GDT和LDT就是存储各种段描述符的一个表,而从GDT或LDT中找到进程对应的段描述符就需要段选择子了。
2023-10-24 14:39:23
495
原创 手写操作系统项目----进程初始化
1、初始化任务的TSS结构。遍历GDT表,找到一个空表项的选择子通过GDT的选择子,初始化对应的GDT表项选择相应的数据段和代码段选择子(分为内核的和用户的)页表初始化,将页目录表的地址放到CR3中初始化tss结构2、task_struct结构初始化。3、将当前任务加入task_manager_t中所有创建的进程队列中去。
2023-10-24 14:38:19
123
原创 路由--ARP协议
ARP协议是通过IP获取对应IP设备的MAC地址的一个协议。more我们发送数据的时候,需要知道源ip、源MAC地址、目的ip、目的MAC地址。前两个不用多说了,属于自己的属性,然后目的ip通过DNS查询。那目的MAC地址就要通过ARP协议获取了。ARP协议起始很好理解,就是广播,获取对应的MAC地址。
2023-10-24 14:36:35
131
原创 TCP--拥塞控制
有人说?我们有流量控制了,为什么还要有拥塞控制。因为流量控制只保证了数据不会超过接收窗口的缓存大小,但是TCP是感受不到网络的拥堵状态的。当网络拥堵了(比如接收端迟迟收不到ACK),发送端就会一直重传,导致网络更加拥堵,然后就是个恶性循环了。拥塞控制有4个经典的算法。慢启动拥塞避免快速重传快速恢复。
2023-10-24 14:35:41
98
原创 TCP--三次握手和四次挥手
三次握手中,客户端和服务端一共发送过两个确认序列号。确认序列号将对方的初始化序列号+1,就是起确认的作用,我确认收到了你的初始化序列号,我加上1表示你下次传过来的序列号应该是这个。
2023-10-24 14:33:27
85
原创 拷贝构造函数、拷贝赋值操作符、移动构造函数,移动赋值操作符
首先我们说一下什么是拷贝构造函数。拷贝构造函数(Copy Constructor)是c++中的一种特殊的构造函数,它用于创建一个对象并将其初始化为同一类中另一个对象的副本。拷贝构造函数通常以引用方式)接受一个同类对象作为参数,然后根据这个参数的值创建一个新的对象,使新对象与参数对象的内容相同。说的简单点就是用同一个类的实例构造一个新的实例。拷贝结束后被复制对象的资源依旧存在。
2023-10-24 14:32:27
286
原创 内存分段、分页
每个进程都有一套自己的虚拟地址,尽管进程可能有相同的虚拟地址,但经过映射后就是不同的物理地址了,以此来实现进程隔离等功能。more一开始使用分段来进行内存管理的,但是用多了会发现,使用分段管理会产生大量的外部碎片。说到分段,肯定要讲到GDT(全局描述符表)和段选择子还有段描述符。简单来说,它们之间的关系就是GDT是一个数组,里面存着段描述符,通过段选择子(索引)找到对应的段描述符。具体的寻址方式就是虚拟地址=段选择子+段内偏移量。
2023-10-24 14:13:35
105
原创 cpp中struct和class的区别
我们这里讨论的是cpp下的struct。more首先cpp下的class和struct差不多,比如说都可以用publicprivateprotected等属性,还可以用成员函数,但还是有一些区别的。我们为了数据安全一般定义类的时候用class,struct一般用户不同类型数据的一个集合。
2023-10-24 14:12:24
160
原创 cpp中this和*this区别
是返回的当前对象的克隆或者本身(如果返回类型是A,则是克隆,若返回类型是A&,则是本身)。是返回当前对象的地址(指向当前对象的指针)。
2023-10-24 14:11:24
209
原创 不同进程对应相同的虚拟地址,在 TLB(快表) 是如何区分的?
从虚拟地址到物理地址需要进行多级的页表转换,64位操作系统一般是3~5级,如果每次都要进行这个页表转换那会带来性能上的消耗。如果我们将已知的虚拟地址和物理地址映射关系存到一个缓存表中,那么如果再次用到这个映射关系就能直接查表来找到虚拟地址对应的物理地址了,这就是TLB表,也叫快表。more但是会发生一个歧义,就是两个进程有相同的虚拟地址,但是映射到了不同的物理地址,到时候查表的时候就会发生歧义。
2023-10-23 23:39:35
696
原创 Docker部署Nginx Proxy Manager
Nginx Proxy Manager就是配置nginx反向代理,还可以自动申请ssl证书的一个可视化面板。安装了Nginx Proxy Manager就不用单独安装nginx了,会发生端口冲突。Nginx Proxy Manager项目地址:https://github.com/NginxProxyManager/nginx-proxy-manager。Nginx Proxy Manager官网:https://nginxproxymanager.com/其他配置就不多讲了,详细配置请参考这个。
2023-10-23 23:38:45
1318
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人