自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《操作系统真相还原》——终章

有一点需要注意的是,每次想要重新加载程序从磁盘上,要先把原来的删掉。

2025-06-08 14:34:51 201

原创 《操作系统真相还原》——硬盘

硬盘驱动程序。

2025-06-07 16:27:50 288

原创 《操作系统真相还原》——赞美Syscall

系统调用。

2025-06-07 13:47:31 461

原创 《操作系统真相还原》——初探进程

很好的进程。

2025-06-07 09:49:15 209

原创 《操作系统真相还原》——大战并发

本文构造的锁使用的二元信号量,底层是依靠中断来实现的。但这种可能对操作系统有一些影响。

2025-06-05 00:39:18 206

原创 《操作系统真相还原》——线程并发一起走

一开始只能看到满屏的异常,后来调高A线程的时间占比后就可一看到相应的输出结果了。一开始我还去调试,好累。

2025-06-04 20:31:22 253

原创 《操作系统真相还原》——初探内存

内核断言,输出信息时不希望被打断,所以需要关中断。

2025-06-04 12:49:38 340

原创 《操作系统真相还原》——中断

可以毫不夸张的说,操作系统离不开中断此时我们将中断处理程序放在了汇编文件中了,很显然我们不能很方便的编写中断处理程序,不如在汇编程序里调用c函数。在这个感觉过可以在c语言中直接内联汇编完成这些。

2025-06-02 17:41:20 273

原创 《操作系统真相还原》——完善内核

在这里我们用汇编实现了一个打印字符的函数,并在c语言中调用这个函数。需要注意的是,我们在实现函数是遵循cdecl约定(1)调用者将所有参数从右向左入栈。(2)被调用者清理参数所占的栈空间。不错成功。

2025-06-02 12:37:53 514

原创 《操作系统真相还原》——进入内核

结构的类型中有64位,所以我们需要将编译链接出32位格式的。按书上的操作来,在现代操作平台编译链接默认生成。现在符合loader程序中设置的各种参数了。很显然程序头位置发生变化,因为定义。

2025-06-01 23:33:29 574

原创 《操作系统真相还原》——初探保护模式

在进入loader的时候打个断点,看看什么情况,好吧突然想起来,可能弄错镜像了。

2025-05-31 12:01:24 271

原创 《操作系统真相还原》——加载器

将上一章的中断输出,变为显存输出。

2025-05-30 20:15:28 333

原创 《操作系统真相还原》——大战MBR

在开机的一瞬间,也就是接电的一瞬间,CPU 的 cs:ip 寄存器被强制初始化为 0xF000:0xFFF0。由于开机的时候处于实模式,再重复一遍加深印象,在实模式下的段基址要乘以16,也就是左移4位,于是0xF000:0xFFF0 的等效地址将是 0xFFFF0。上面说过了,此地址便是 BIOS 的入口地址。认识到在实模式下20位总线,最大能访问1MB的空间,而此BIOS入口地址到最大只有16B,所以真正的代码在另外的地方。

2025-05-30 15:21:12 539

原创 《操作系统真相还原》第一章——环境配置

如果报错可能是因为缺少c和c++的编译器,还有各种依赖。bochs会在当前目录下寻找配置文件。接下来就是创建相应的镜像文件了。

2025-05-30 10:59:33 517

原创 看八股有感

个人感觉八股可以在短时间内打开我们的知识面,让我们知道在纷杂的技术体系中什么是目前岗位需要的技能,很显然的是欲速则不达,我们对技术的深度理解肯定不够,在这个竞争愈发激烈的行业中,我们需要不仅仅是为了面试而八股,要深入探究技术底层,拨开迷雾寻找真理。功利的来讲需要让面试官眼前一亮,快速对你感兴趣。

2025-05-22 20:23:03 269

原创 计算机中的小数

在jshell中运行0.3333333f * 3 == 1和0.33333333f * 3 == 1时,结果分别为false和true。这是由于浮点数在计算机中的表示和运算遵循IEEE 754标准,涉及符号位、指数和尾数。浮点数的精度有限,0.3333333f和0.33333333f在二进制表示中略有不同,导致乘法结果不同。0.33333333f * 3的尾数相乘后规格化并舍入,结果等于1.0f,而0.3333333f * 3的结果不等于1.0f。这展示了浮点数运算中的精度问题和舍入规则的影响。

2025-05-22 09:46:16 536

原创 ++i与i++在效率上的细微差别

可能将原值用中间量存起来以待使用,下面看相关程序的汇编代码(使用。笔者能力有限,如有失误,请多多见谅😊。在一些特定的使用中,

2025-05-18 12:37:09 338

原创 什么是TLS?

tls又名传输层安全协议 ,见名知义,这是一种安全协议,为互联网通信提供安全及数据完整性提供保障 ,其位置大约在于http和tcp之间 ,可以将其理解为ssl的后继。

2025-05-18 12:35:51 740

原创 redis 2.6.0 数据结构

在这个版本中,已经完全去除了虚拟内存的设计,将关注点放到优化数据结构来提高性能。正如上文所言我们需要不同的数据类型。

2025-04-19 20:20:09 298

原创 redis 1.3.6源码分析

函数开始分析,一些无关紧要的代码就没有显示出来,以后不再说明。,在阅读源码时,从架构层面分析,忽略一些细枝末节的处理。好的下面基本事件已经注册完成,我们可以看看调用。处,然后就可以愉快的阅读源码了。是重点,是客户端注册事件。首先我们要获取源码,使用。大约有一万行左右,从。主要的代码逻辑集中在。

2025-04-19 20:19:09 211

原创 redis 1.3.6源码分析

函数开始分析,一些无关紧要的代码就没有显示出来,以后不再说明。,在阅读源码时,从架构层面分析,忽略一些细枝末节的处理。好的下面基本事件已经注册完成,我们可以看看调用。处,然后就可以愉快的阅读源码了。是重点,是客户端注册事件。首先我们要获取源码,使用。大约有一万行左右,从。主要的代码逻辑集中在。

2025-04-18 20:46:38 370

原创 mit 5840 总结

使用日志进行调试的时候,要想明白自己要通过日志获取什么信息或者想要验证什么,在合适的位置进行打印相关信息,同时一次不要打印太多信息(人脑受不了)。在遇到一个问题时,如果程序长时间卡住,很有可能是程序中的锁的问题,或者管道的问题。加锁并不意味着并发安全,因为并发问题会刁钻的出现在你以为的顺序执行中。需要注意的时,实验是并发的,调试起来,使用日志输出比较好。

2025-04-11 19:32:56 233

原创 peer通信

peer通信

2025-03-21 20:22:45 134

原创 Bencode

种子文件编码方式,数据类型。

2025-03-18 21:42:23 152

原创 红黑树和b+树

1.这是一个正常的,没有碰到极端情况的二叉搜索树。如果数据是有序的或者在删除,插入操作下,那么可能会退化成一条链。严重影响性能。

2025-03-16 15:37:01 1854

原创 赞美Syscall

知道程序员在编写程序时直接和硬件打交道是一件非常麻烦的事,同时不受保障的程序直接运行在硬件上如果出错可能造成计算机宕机,于是可以编写一个应用程序驻留在计算机上管理硬件资源为上层应用提供系统调用(syscall),不允许上层应用随意访问硬件资源,这就是(内核的健壮性往往比其它应用程序要高)

2025-03-14 10:52:34 500

原创 Java内存模型

现代编程离不开并发,但并发效率提升的同时也带来了一些问题,比如程序奇怪的执行顺序,诡异的行为,Java 为了解决这个问题提出了一套内存模型 (JMM),同时我们需要注意的是,我们真正要了解的是什么,是 Java语言规范关于 JMM 定义的规则,还是 JVM 对于 JMM 的的具体实现,本文主要根据JSR 133讨论 Java 语言规范 关于 JMM 定义的规则。

2025-03-12 15:05:35 1403

原创 为什么TCP三次握手?

是我们需要,才有了三次握手首先我们需要明白TCP如何保证数据传输可靠的,依靠序列号和确认机制来保证但如何保证带有序列号的数据包在互联网中唯一呢,因为如果不唯一,TCP无法识别来自之前实例的重复数据段。引出了 通过一些机制保证了 的唯一性,我们就需要把这个 同步给对方。为什么说是四次呢?

2025-03-08 22:55:07 651

原创 事务和锁的那些事

事务对于数据库而言,是对数据的一系列操作,比如增删改查,但事务具有ACID的特性,原子性,持久性,一致性,隔离性,是为了保证数据库的可靠和数据的一致。需要注意的是我们借助各种方法来保证事务的特性,比如锁就是实现事务隔离性的手段。

2025-03-07 20:26:10 314

原创 分布式的锁

和在单机多线程中的锁的目的相同,就是在对共享资源进行操作时要保证正确性,在这里多线程成了多个客户端,需要一些共享的资源(可以被所有客户端看到的flag)如: 数据库,Redis, ZooKeeper等,结合其特性,来实现分布式锁。

2025-03-06 16:44:55 173

原创 select,poll,epoll

【代码】select,poll,epoll。

2025-03-03 23:25:02 437

原创 ThreadLocal的内存泄露

下面三种引用方式是后来引入的,允许开发者更灵活地控制对象的生命周期。具体实现在java.lang.ref中。其中 Reference.java是抽象基类和jvm紧密相连。Java中的对象实例存储在堆里,引用就是为了找到对象实例的指针。GC会根据对象实例不同的引用来进行垃圾回收。分析的代码均为JDK 8 ,后来的版本又引入了新的类型。

2025-03-02 16:36:22 493

原创 Redis键值过期自动回收

Redis 在处理过期键的回收时,为了保证不对正在运行的Redis程序的效率产生严重影响,实现了三种回收策略。Redis并不追求立即回收过期的键。

2025-03-01 17:51:55 592

原创 Java中的ThreadLocal

每个线程都有一个独属于自己的变量,并且可以通过简单的方式进行管理。

2025-03-01 17:50:56 651

空空如也

空空如也

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

TA关注的人

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