自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 http实现免密登录

你可以运行以下命令来验证远程URL是否更新成功,输出应该显示更新后的URL。: 使用生成的个人访问令牌更新远程URL。假设你的Gitee用户名是。打开终端并导航到你已经克隆的仓库目录。

2024-07-06 20:40:59 102

原创 出错记录笔记

显然这种方法太死板了,直接升级go版本到1.20,1.18在build时还是会报错。构建注释标记,它是在Go 1.17中引入的,所以需要升级版本或者加入。命令中包含了一个不正确的文件名或参数。将go可以mv到/usr/local/目录下,并配置环境变量。或者二进制文件安装的Go,需要手动删除Go的安装目录。这是因为go版本太低,Go 1.16版本不支持新的。2、yarn build构建项目报错。文件作为输入,但传递了一个非。解决办法:未安装yarn依赖包。重新bulid,显示成功。删除go环境重新下载。

2024-07-03 10:03:26 224

原创 Netlink机制实现内核用户间通信

Linux中内核与用户空间交互方式很多,比如/proc、ioctl,用户态通过标准的文件操作访问,比如procfs中的文件,内核态被动响应且无法主动向用户态发起通信,这种单向通信具有一定的局限性。Netlink通信机制完美克服了单向通信的不足,支持双工通信,允许内核主动发起通信,适用于用户空间与内核空间通信、用户空间两个进程通信。Netlink为用户空间进程提供了一个标准的基于套接字的接口,可以实现Linux内核与用户空间的双向数据传输。本文Netlink通信机制源码分析基于6.2版本。

2024-07-02 12:04:06 637

原创 信号量基础总结

在linux中信号量可以看作是一种睡眠锁,允许进程进入睡眠状态,其过程如下:存在一个 Task获得已占用的信号量,信号量将task推进等待队列让其处于睡眠状态,CPU处理其他任务,当signal被释放,则将处于等待队列睡眠的task唤醒,重获该信号量,由于争用信号量的进程在等待锁重新变为可用时会处于睡眠状态,故信号量适用于锁被长时间持有的状态。

2024-06-02 20:09:25 941

原创 xdp学习—加载第一个BPF程序

xdp 提供了一种处理网络报文的高性能方案,之所以性能高,是因为 xdp 对报文的处理在报文进入 IP TCP 协议栈之前,避免了漫长而繁琐的协议栈处理过程, 也就是 xdp 在收到包时最早能处理包的地方进行处理。即网卡收到网络数据包并将其交付到IP/TCP协议栈之前插入XDP程序。

2024-04-29 11:14:39 969

原创 记录错误——ubuntu连接vs code始终连接不上

分析报错一直显示写入的管道不存在,这是因为vs code在连接和ssh终端连接方式类似,因为之前在vs code 里面连接过该ip对应的服务器,win本地已经保存了该ip所对应服务器的密钥。删除ubuntu虚拟机之后重置ubuntu并配置,发现其分配的虚拟机ip与之前的一样,所以我们在重置服务器当该ip对应的服务器发生变化时,连接的时候发现远程服务器发回来的密钥跟之前的对不上了,导致连接失败,显示管道并不存在。win/用户下面找到.ssh文件夹找到。删除原先密钥j即可连接成功。

2024-04-25 12:02:21 408

原创 《操作系统真象还原》第一章 部署工作环境

/configure --prefix=/root/Ytest/bochs --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11 LDFLAGS='-pthread'(/root/Ytest/替换为自己的路径)keyboard:keymap=/root/Ytest/bochs/share/bochs/keymaps/x11-pc-us.map(路径替换)

2024-04-22 09:34:22 678 1

原创 监控端口流量

【代码】监控端口流量。

2024-04-22 09:25:42 142

原创 linux网络协议栈——TCP连接

(1)创建socket。(2)调用connect连接服务端地址和端口。(1)创建socket,服务端需要创建一个 socket 对象,用于监听传入的连接请求。(2)bind()绑定本地的IP/Port二元组用以定位,将创建的 socket 绑定到一个具体的 IP 地址和端口上,便于客户端寻找。(3)listen监听,监听绑定的地址和端口。

2024-04-20 14:06:55 748 1

原创 进程调度—主动调度

调度程序主要涉及4个方面,分别是主动调度、周期调度、高精度时钟调度、进程唤醒时调度,本次分析主动调度。

2024-04-01 21:03:30 596

原创 中断

workqueue工作流程(1)workqueue由一个或多个worker线程池组成,每个worker线程都会不断地从workqueue中获取需要执行的工作项。(2)如果此时有延迟的work,将多个work组装成工作项添加到workqueue工作队列中。(3)工作者线程worker在空闲状态下可以从workqueue工作队列中取出一个work放在自己的私有队列等待执行。(4)当工作者线程worker完成当前的工作项,将会处理自己私有队列的下一个工作项。

2023-12-05 19:09:00 112 1

原创 工作队列workqueue

workqueue工作流程(1)workqueue由一个或多个worker线程池组成,每个worker线程都会不断地从workqueue中获取需要执行的工作项。(2)如果此时有延迟的work,将多个work组装成工作项添加到workqueue工作队列中。(3)工作者线程worker在空闲状态下可以从workqueue工作队列中取出一个work放在自己的私有队列等待执行。(4)当工作者线程worker完成当前的工作项,将会处理自己私有队列的下一个工作项。

2023-12-03 17:06:08 156 1

原创 TASK机制

tasklet的禁用可启用可能存在于不同的上下文,有可能在中断上下文中禁用tasklet但是在其他上下文中会重新启用tasklet,如果被禁用后在链表中将其移除,那么可能在重新启用它时会导致丢失某些需要延迟处理的任务,所以通常情况下会通常会保留禁用状态的。简单来说就是缩短task的工作时间。,该软中断会被特定的函数进行处理,执行所有的已经调度的tasklet,tasklet核心处理过程就是循环遍历获得链表上的每一个待处理的tasklet,进行一系列检查最终判定tasklet处于。tasklet的触发是在。

2023-11-28 21:27:37 109

原创 伙伴算法学习笔记

当程序在运行的时候需要更多的内存空间来存储数据,操作系统会根据请求给程序动态分配内存空间,分配的过程中可能会导致内存碎片,而且内核在频繁的请求和释放不同大小的一组连续页框的过程中肯定会导致在已经分配的块内分散许多小块的空闲页框,那么内存空间将会浪费,所以需要尽量避免产生内存碎片,所以引入伙伴算法对内存进行管理。

2023-10-28 21:21:23 176 1

原创 缺页异常处理-ebpf统计缺页时间

当一个进程执行时,如果cpu访问到一个有效的虚地址,但是此地址对应的物理页没有在内存中,那么cpu就会产生缺页异常。可能引起的情况:(1)访问用户栈的时,超出了当前用户栈的范围,需要扩大用户栈(2)当进程申请虚拟内存区域的时候,没有分配物理页,进程第一次访问的时候触发页错误异常(3)内存不足的时候,采用交换机制内存将会把进程的匿名页换出到交换区。

2023-10-24 10:25:30 469

原创 实验三:系统调用

系统调用中使用int 0x80来切换到内核态,使用内核中的系统函数来完成系统调用,我们进行系统调用的时候需要通过~/Desktop/tt/oslab/linux-0.11/lib目录下的close.c进入到system_call。返回值是拷贝的字符数。在linux-0.11/kernel下修改系统调用号的个数,系统调用号从0开始,我们将72修改成74,系统调用号增加两个,所以我们在后期要添加两个函数。解决方法:重新开启挂载,进入到~/oslab/hdc/usr/include/unistd.h进行宏定义。

2023-10-11 10:40:54 216 1

原创 实验二:操作系统的启动

bootsect.s与setup.s均位于linux-0.11内核源码boot目录下,setup.s和bootsect.s一样都是操作系统进入system的准备工作,其主要功能就是获取各种硬件参数,并将这些数据保存到内存0x90000处,也就是覆盖bootsect程序所在的空间,然后我们就可以进入保护模式啦,那么如何进入保护模式呢?

2023-10-11 10:15:27 143

原创 实验一:编译Linux0.11内核并在Bochs虚拟环境上运行

本机上搭建oslab实验环境,所需压缩文件分别为gcc-3.4.tar.gz以及hit-oslab-linux-20110823.tar.gz,并将文件下载到ubuntu系统内部,进行解压。基本环境Bochs+gcc-3.4+ Linux 0.11 源代码+ubuntu搭建hit-oslab集成环境。本次实验代码程序均在实模式下完成,所以需要8086汇编编译器以及连接器as86和ld86,我们需要进行安装。//在oslab/hdc/user/root下创建.c文件实现挂载。

2023-10-11 09:54:36 505 1

原创 打印进程控制块PCB相关信息

每当进程从用户态进入内核态都要使用进程内核栈,一旦进程进入内核态,cpu就会自动设置该进程的内核栈(内核的数据段),为了节省空间,我们把内核栈和thread_info放在一起,因为从用户态切换到内核态以后,内核态是空的,所以ESP堆栈寄存器直接指向内存区顶端,当我们向栈中写入数据时,ESP就会递减,而task_struct和thread_info都有一个域指向对方,由于PCB的内容越来越大,所以仅将thread_info放在内核栈空间中。(D不可中断的睡眠状态、R运行、S睡眠、T=跟踪、 Z僵尸进程);

2023-10-06 17:28:43 77 1

原创 体验进程的生命周期

通过调试可得,没有创建新进程fork之前只有父进程在执行,其PID为8136,直到进fork系统调用,产生子进程pid为8247,当pid大于0时候我们向下执行父进程操作遇到wait()函数,用status保存收集子进程8247退出时的一些状态,而子进程8247中加入exec函数族里面的excelp()进行进程替换,将其替换成/bin/ls程序,打印当前目录下的文件信息,父进程等待子进程执行完毕,进入sleep阶段,暂停4秒,exit退出程序。原型:void exit(int status);

2023-10-04 10:25:24 41 1

原创 QEMU+GDB调试内核环境

主要步骤:虚拟机(Parrales Desktop,vmware等均可)中安装Ubuntu下载linux kernel,编译生成bzImage配置busybox安装QemuGDB调试内核实现宿主机与qemu文件挂载,进行文件共享。

2023-09-27 18:26:52 521 3

原创 ubuntu22.04中搭建eBPF环境

Python及其开发头文件:如果计划使用BCC的Python绑定,请确保已安装Python及其开发头文件(python-dev或python3-dev软件包)。内核头文件:通常需要安装与使用的Linux内核版本相对应的内核头文件,因为BCC依赖于内核的内部结构,以正确地编译和与eBPF程序进行交互。分析python库版本不一致,解决复制已编译的bcc库中的python bcc库到python3的库中。分析 python默认是没有安装setuptools这个模块的,进行安装。Ubuntu环境下构建依赖关系。

2023-09-13 22:39:36 139

原创 Visual Studio Code、Xshell远程连接VMware虚拟机

默认VMware虚拟机、xshell、Visual Studio Code全部已经下载完成。(VMware版本建议选择16,15版本最后会遇到电脑蓝屏重新启动问题)

2023-09-01 13:30:45 836 1

原创 《操作系统真象还原》第一章 部署工作环境(Centos7下bochs)

下载地址 (https://udomain.dl.sourceforge.net/project/bochs/bochs/2.6.8/bochs-2.6.8.tar.gz)我的必须在虚拟机中重新下载bochs压缩包或者本机与虚拟机共享文件,copy到虚拟机中尝试几次均不成功,文件损坏。解决方案:make编译之后,将bochs-2.6.8文件夹 copy一份,命名为bochsdbg即可。2、make编译时出现无法获取“./bochsdbg”的文件状态(stat):没有改文件或者目录。写入磁盘(替换路径)

2023-08-19 08:20:26 236

空空如也

空空如也

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

TA关注的人

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