Mit6.S081:lab utilities
如何退出xv6(qemu):先一起按下ctrl+a,然后再点击一下x即可
Sleep123456789101112131415#include "kernel/types.h"#include "user/user.h"intmain (int argc ,char *argv[]){ if (argc != 2){ fprintf(2,"sleep:lack of arguement should input 2 you;but argc = %d",argc); } int num = (int)atoi(argv[1]); sleep(num); exit(0);}
Pingpong总体上没用什么难点,特别的就是需要创建两个管道,用于两个进程读写,避免自我阻塞问题
1234567891011121314151617181920212223242526272829303132333435363738394041424344#includ ...
Tag Plugin Plus
安装方式
安装插件,在博客根目录[Blogroot]下打开终端,运行以下指令:
1npm install hexo-butterfly-tag-plugins-plus --save
考虑到hexo自带的markdown渲染插件hexo-renderer-marked与外挂标签语法的兼容性较差,建议您将其替换成hexo-renderer-kramed
12npm uninstall hexo-renderer-marked --savenpm install hexo-renderer-kramed --save
添加配置信息,以下为写法示例
在站点配置文件_config.yml或者主题配置文件_config.butterfly.yml中添加
123456789101112131415# tag-plugins-plus# see https://akilar.top/posts/615e2dec/tag_plugins: enable: true # 开关 priority: 5 #过滤器优先权 issues: false #issues标签依赖注入开关 link: ...
可调用对象
std::function and bind可调用对象(Callable Object)
函数指针
具有operator()成员函数的类对象(仿函数)
可被转换为函数指针的类对象
类成员函数指针
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152void func(void) { std::cout<<"函数指针"<<std::endl;}struct Foo{ void operator()(void){ std::cout<<"仿函数"<<std::endl; }};struct Bar{ using fr_t = void(*)(void); static void func(void){ //... ...
FaRM
FaRM高性能分布式事务
Title: No compromises: distributed transactions with consistency, availability, and performance
FaRM Overview
FaRM = Fast + Remote + Memory
为何要学习FaRM
另一种对transactions+replication+sharding的实现:这仍然在研究领域,没有投入实际生产。
乐观并发控制OOC(stric serializability)
利用了了RDAM NICs的巨大性能潜力。
整体设计
FaRM全部通讯都在一个数据中心
与Spanner不同的是,Spanner全球性的广域的设计
configuration manager:使用ZooKeeper, 选择主从复制 primaries/backups
Shards采用主从复制(只有在恢复的时候会进行通信) P1 B1 P2 B2 …
只要至少有一个shard的副本就能恢复
f+1的副本就容忍f次的故障
事务代码充当两阶段提交的事务协调器 ...
Effect C++笔记
Effective C++
Effective学习笔记
让自己习惯C++条款01C++高效编程时情况而变,取决于你使用C++的那一部分
条款02:尽量以const,enum,inline替换#definePerfer consts enum and inlines to #define
总结:✦For simple constants, prefer const objects or enums to #defines.
✦For function-like macros, prefer inline functions to #defines.
条款03:尽可能使用constUse const whenever possible
const成员函数
优点
他们使class接口比较容易被理解,可以得知那个函数可以改动对象成员,那个不能
他们使用“操作const对象”成为可能。
constness
当两个成员函数如果只是常量性不同,就可以用const来重载
123456789101112131415161718class TextBlock {public: ...
Spanner
Spanner 全球化分布式数据库
Title: Google’s Globally-Distributed Database,Spanner is Google’s scalable, multi-version, globallydistributed, and synchronously-replicated database
论文中实现了广域的事务服务,也是在Google广泛使用的一种技术
R/W Transaction: 2PC + 2PL + Paxos Group
R/O Transaction: Snapshot isolation + Synchronized Clocks
ImplementationSpanner部署Spanner的部署叫做universe,可以让Spanne全球性的管理数据,谷歌中使用了三套Spanner部署分别用于:测试、研发、上线
如上图Spanner server的结构图中,Spanner由多个Zone(管理部署的单元、物理隔离的单元)组成。一个数据中心中可以由一个或者多个Zone
上图中的一个Zone有一个zo ...
Lab1:MapReduce
Lab1:MAPREDUCE一、基础框架
paper中的mapreduce概念模型
程序调用
coordinator(master)及worker的调用框架
lab1中的主要是把单进程的map-reduce分开执行并且使用coordinator作为master进行调用
1.工具链(静态库)
将map与reduce的方法放置于wc.go中,然后生成工具链
1go build -race -buildmode=plugin ../mrapps/wc.go
2.挂起coordinator例程
coordinator运行时挂起,打开监听socket,等待worker的请求,并作出响应(返回文件名)
1go run -race mrcoordinator.go pg-*.txt
第二个参数为pg-*.txt,为输入文件
mrcoordinator中调用mr/coordinator.go中的Makecoordinator并传入input文件名与reduce的任务数量
3.打开worker例程(可以打开多个)
mrworker调用mr/worker.go ,mrworker中获取工具链中的m ...
Lab:KVRaft
Lab3:KVRaft
写在前面:lab3 的内容是要在 lab2 的基础上实现一个高可用的 KV 存储服务,算是要将 raft 真正的用起来。相关协调服务可以参考OngaroPhD的作者的博士论文或者是ZooKeeper 论文笔记的协调服务,另外Chain Replicate 论文笔记的设计中同样满足了高性能读的服务
PartA:Key/value service without snapshots客户端:Client创建创建client自动生成ID号(使用nrand()函数生成)用于Session来记录lastRequest的回复,用LeaderID快速连接server,减少重试leader时间
123456789func MakeClerk(servers []*labrpc.ClientEnd) *Clerk { ck := new(Clerk) ck.servers = servers // You'll have to add code here. ck.LeaderId = 0 ck.ClientId = nrand() ...
Lab2:Raft
Lab 2: Raft — 实验过程记录这篇文章写的有点烂,我会在后续进行修改
ban
写在前面:Raft是基于共识算法而实现的一个对 fault-tolerant test-and-set service,在MapReduce 、GFS、Fault-Tolerate VM 中都存在一个主要的管理机器(Cooridator 、master、primary) ,集中的去管理、分配任务、复制、同步信息。
参考材料:
Raft Consensus Algorithm,这时raft的官网,其中有一个有趣的是raft visualization部分,在网页可以可视化的观察的raft执行过程。
Raft Q&A :: Jon Gjengset (thesquareplanet.com),MIT6.824关于raft的问答
raft论文,raft算法作者的研究生论文。
Lab 2A : Leader ElectionLeader Election(共识算法)实现implement1.Figure2 按照raft figure 2 的操作将其Raft结构体完善,添加相应的RPC ...