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

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


了解详情 >

MIT6.824 lab 2 记录与bug总结

MIT6.824 lab 2 记录与bug总结两个主要问题:乱序RPC和”Figure 8问题”(小论文Figure 8, 大论文Figure 3.7) 两阶段写中间有gap,你以为的原子也许不那么原子不那么livenss 论文Figure 8中描述的问题Figure8问题:leader的日志被另一个leader的日志覆盖 根源: 两阶段写, 而中间gap时没”互斥” 举个例子: 123...

宏内核, 微内核, 多内核

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

读写锁与RCU

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

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

MIT6.824 lab 3B bug总结记录 到目前lab3为止,可以导致状态变更的,有潜在是不一致风险的事件有:状态变更,日志追加,日志恢复 这些事件在我看来是类似操作系统中”中断”的存在,但我目前还无法用我的语言来抽象概括,大概是要防止mock的序列被破坏吧,总之需要多加小心 bug总结概括:引入”Snapshot中断”后,对整个raft集群状态的控制大失败。TODO:抽象 lab2...

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┌──────┐ ┌──────┐ ┌──────┐│ ...