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

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


了解详情 >

MIT6.824 lab 3A 记录与bug总结

MIT6.824 lab 3A 记录与bug总结debug真的很搞心态,不过对理解很有帮助(我觉得,当然看别经验贴可能效率会更高)。anyway如果一次都没跌倒过,我也许永远都注意不到这些bug呢 所以这里 严重剧透警告, 严重剧透警告 , 严重剧透警告 欢迎批评指正,欢迎讨论补充,欢迎分享自己遇到的corner case 3Afuck the lab 出问题时不要害怕再次重头阅读你写的代...

Are You Sure You Want to Use MMAP in Your Database Management System?论文笔记

TODO review Are You Sure You Want to Use MMAP in Your Database Management System?论文笔记Abstract 我要重启window时它居然自动更新了 mmap看起来好用,是因为其让一些操作”透明”,而这个”透明”将导致很多严重的问题。就是说OS偷偷执行的, 通用的服务带来不可控性。即使熟悉OS的各种操作仍然可以把...

虚拟化概述

summary “总是从简单的分层抽象开始,逐渐打破分层,然后融合” 虚拟化 = fake interface, thanks to layered 加速法 硬件打配和 bypass VMM 考虑拷贝开销:共享内存,减少拷贝 要隔离那再建”转换表” 抽象: 新接口 虚拟: 旧接口 用户态也是可以访问硬件的哦,注意操作系统的抽象, 这时在理解”OS是服务提供者” 如, mov, 访存等 扩...

A fork() in the road论文笔记

Abstract fork()对于现代程序员来说是一个糟糕的抽象 别再使用fork()了,可以使用更现代的posix_spawn() 是时代的错误,与现代系统格格不入 不是线程安全的 不可扩展(unscalable) 不再简易 万恶之源: fork管得太多了 fork即同时插手了进程和它的地址空间 a. 这就导致从IO buffer到kernel bypass网络的一些实现变得tri...

lex和yacc使用

Abstract 使用lex工具做词法分析 使用yacc做语法分析 Lex Usage编译运行 flex <file.l>默认生成lex.yy.c文件 gcc -lfl lex.yy.c lex源程序三段式: 12345声明部分%%规则部分%%用户自定义函数 1234567891011121314%{ 辅助性C声明%}辅助定义正规式<名> &...

MSI缓存一致性协议

Abstract single cache line问题 现代CPU一般都会有三级缓存L1, L2, L3。L1缓存的每个CPU独立的,L2L3是CPU间共享的。cache的存在读时可以提高读取速度,写时可以防止直接写到内存(write back, write through) 12345678910111213141516┌──────┐ ┌──────┐ ┌──────┐│ ...

no-scalable lock及其解决方案

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

多态Tree Easy Pieces

Preface多态Tree Easy Pieces: 强制类型转换 公共前缀 this指针偏移 这里讨论的cpp的多态是指父类虚函数的执行是由指针具体指向的对象而定。下面将围绕如下例子说明: 1234567891011121314151617181920212223242526272829class Shape {public: virtual void area(){...

零拷贝

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

使用container名再容器之间互ping

使用container名再容器之间互ping创建两个容器: 12docker run -it --name node0 ubuntudocker run -it --name node1 ubuntu 使用docker inspect查看node0的ip 1docker inspect node0 | grep IPAddr 容器内按照ping攻击apt install iputils-...