抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

如何实现一个高性能LRU

如何实现一个高性能LRU 本质是分桶降低map锁的影响范围,然后使用单独的一个worker线程逐一处理链表的更新操作。 一个基本的实现就是一个lru链表,然后元素访问的时候移动到链表头,超出容量就淘汰链尾元素。 然后再看看怎么从链表中找到目标元素,方便我们移动。一个办法就是使用map做索引。这样就实现了O(1)的整删改查。 123456789--- Item1 ...

拉片分析xv6和rcore中的trap和上下文切换机制

拉片分析xv6和rcore中的trap和上下文切换机制学trap感觉非常绕, 浅记一下。个人认为rcore的实现会比较好理解一点, 不过xv6的也值得学习一下, 所有这里把两个的实现都整理了一下。(未开虚拟内存版) 拉片分析: 进程第一次启动 -> 进程第一次返回用户态 -> 进程陷入内核态 -> 进程再返回用户态 rcore对应代码ch3, 未开启分页版, 开启分页后大...

宏内核, 微内核, 多内核

宏内核架构 linux 整个单分两层:内核与应用。 CPU负责提供权限模式,高权限就是内核模式。 所有内核功能实现在一起:文件系统, 内存管理, 设备驱动, 进程调度等。拥有最高权限 结构性缺陷: 安全性可靠性 模块间没有很强的隔离,单点错误 如频繁更新的驱动,他的bug就可能影响到其他模块 实时性支持不足 系统太复杂,无法做出最坏分析 过于庞大阻碍创新 2800行代码 微...

读写锁与RCU

读写锁实现本质上仍是通过写锁来互斥,只是读锁减小的锁影响的范围,读锁仅用于保证reader++的安全。 可以看到虽然看起来读者”不互斥”,但是内部读者还是存在锁竞争的。所以引入RCU 1234567891011121314151617181920212223242526struct rwlock { int reader; struct lock read_lock; struct...

no-scalable lock及其解决方案

Summary 有共享就得考虑哪里有瓶颈 no-scalable问题的本质就是”即共享又私下算账, 最后还要那私账说事” Abstract所谓no-scalable lock就是,并发程序为了实现一致性,需要使用锁对共享资源进行互斥访问。如果使用的是一个no-scalable的锁,那么就会观察到随着cpu核心数量的上升,并发程序的性能并不能得到有效的提高,甚至会有所下降。 要理解这个问题的...

零拷贝

Preface用户态拿到硬件数据再发送需要几步? 首先硬件是归操作系统管理的,所以要想获取到硬件数据得先进入内核态 其次内核态和用户态的地址空间是隔离的,所以需要内核态和用户态直接的数据拷贝 ok,理解了前置基础,let jump into it 最原始的操作理解了上面提到的基础只是那么应该能够想到。以网卡为例 用户读数据 因为网卡(硬件)归操作系统管理,网卡需要先将数据发给内核bu...

外核架构Exokernel和Unikernel

Abstract看到云服务这种”单一”功能的属性,unikernel应运而生。不同于传统虚拟机,unikernel为这样云环境做性能、运营、安全、开销等方面的优化。其核心思想就是既然云服务器的使用者仅需要单一的功能,那我们就提供一个功能比较单一的、编译时功能确定的、更轻量更安全的操作系统和配套设施(library)。lib就相当于现在(2021)我们说的”系统生态/软件”,用户可以根据lib...

垃圾回收机制原理与实现

前言 动态内存分配在堆上进行 堆用free list管理空闲块 堆的每次动态分配内存是从它现有的free list中取出一块(或块中的一部分,这取决于管理free list的策略) 堆的free list中没有适合的块时再尝试”堆扩容”,即堆一开始并不是就拥有整个内存来分配的 所谓garbage就是内存中永远无法使用到的部分。这往往是由于动态申请内存后没有及时释放导致的内存泄漏。 垃圾回收...

OS中一些反直觉的tips

AbstractPrefaceOverviewfork and print fork复制资源 print内有缓冲区 case 1如下程序会打印多少-: 123456789101112#include<stdio.h>#include<sys/types.h>#include<unistd.h>int main() { int i; for(i...

深入理解计算机系统脑图

PART1: 计算机系统漫游 组成设备 PART3: 程序的机器级表示 一个可执行程序 编译过程 预处理 编译 汇编 连接 编译细节 gcc -O[g|1|2] <file>优化等级 编译器优化可能会调整代码次序,源代码会严重变形,导致并发时不满足顺序一致性内存模型 数据格式 字节,字,双字,四字 数据类型的汇编代码表示 b, w, l, q 操作数指示符...