- 博客(34)
- 收藏
- 关注
原创 《操作系统真相还原》——中断
可以毫不夸张的说,操作系统离不开中断此时我们将中断处理程序放在了汇编文件中了,很显然我们不能很方便的编写中断处理程序,不如在汇编程序里调用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
原创 《操作系统真相还原》——大战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
原创 红黑树和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
原创 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
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅