Masutangu

也許我這一生 始終在追逐那顆九號球

Linux 内核系列-文件系统和 IO

本系列文章为阅读《现代操作系统》和《Linux 内核设计与实现》所整理的读书笔记,源代码取自 Linux-kernel 2.6.34 版本并有做简化。 概念 如果能把文件看成是一种地址空间,那么就离理解文件不远了。(文件类似虚拟地址空间,相应的磁盘地址对应内存物理地址,通过 inode 来管理映射关系,类似页表的作用)。 文件系统的实现 文件系统存放在磁盘上。多数磁盘划分为一个或多个...

Linux 内核系列-内存管理

本系列文章为阅读《现代操作系统》和《Linux 内核设计与实现》所整理的读书笔记,源代码取自 Linux-kernel 2.6.34 版本并有做简化。 概念 操作系统存储管理方案的演进: 无存储抽象 早期计算机并没有存储抽象,程序直接访问物理内存地址。使用这种模型,想要同时运行多个程序非常困难。 存储抽象:地址空间 地址空间的概念 要保证多个应用程序同时处于内存并且互不影响,则...

Linux 内核系列-进程调度

本系列文章为阅读《现代操作系统》《UNIX 环境高级编程》和《Linux 内核设计与实现》所整理的读书笔记,源代码取自 Linux-kernel 2.6.34 版本并有做简化。 概念 许多适用于进程调度的处理方法同样适用于线程调度。当内核管理线程的时候,调度经常是按照线程级别的,与线程所属的进程基本没有关联。 调度需要考虑 CPU 的利用率,因为进程切换的代价比较高,进程需要从用户态切...

Linux 内核系列-进程通信和同步

本系列文章为阅读《现代操作系统》《UNIX 环境高级编程》和《Linux 内核设计与实现》所整理的读书笔记,源代码取自 Linux-kernel 2.6.34 版本并有做简化。 概念 竞争条件 多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时许,称为竞争条件。 忙等待的互斥 几种实现互斥的方案: 屏蔽中断 1 在单处理器系统中,最简单的方法是使每...

Linux 内核系列-进程

本系列文章为阅读《现代操作系统》《UNIX 环境高级编程》和《Linux 内核设计与实现》所整理的读书笔记,源代码取自 Linux-kernel 2.6.34 版本并有做简化。 概念 进程即处于运行中的程序,除了程序的代码外,还包括打开的文件、挂起的信号、进程状态、内存地址空间以及用以存储全局变量的数据段等。 执行线程,简称线程,是在进程中活动的对象。每个线程都拥有独立的程序计数器、进...

Libuv 源码阅读

花了几天时间读了下 libuv 的源码,整理成这篇文章。<a href = #section_1>第一节</a>是读官方教程做的笔记,主要是供自己备忘用,读者可以跳过。<a href = #section_2>第二节</a>解读 libuv 的源码,重点在 libuv 队列的实现和如何用线程池实现异步文件 IO。 概念 handles 和 ...

浅读 Libco

今天花了一天时间,学习了下微信的开源协程库 libco的代码,写下来做个纪录,有部分细节代码(包括 coctx_swap.S 那段汇编)我还没读懂,以后再补充进来。 协程的原理 协程的概念和优点这里不再赘述。我们先介绍下实现协程的原理,再来看看相应的代码。 协程的切换,其实就是由我们手动来管理指令执行的上下文。一般每一个协程有自己的 context_buff 来保存自己的运行上下文(寄存...

Protobuf 编码原理

最近项目组有在用 protobuf,于是抽空读了些 protobuf 的相关资料。本文总结 protobuf 的编码原理,重点在于其如何实现版本兼容。文中样例及说明都参考了 protobuf 的官方文档。 编码方法的介绍 要了解 protobuf 的编码方式,首先介绍下 Varint 和 ZigZag 这两种编码。 Varint Varint 编码的优势在于值越小的数字,占用的字节更少。...

简单异步应用框架的实现

两年前刚进公司的时候,第一次接触了异步框架,那时还处于懵懵懂懂的状态。最近换了组,接触到另外一种实现的异步框架,这次有了一定的积累后,对异步框架的设计也有了更多的理解。刚好最近自己基于 libuv 造了个简单的轮子 saf (Simple Async Framework),趁此机会和大家聊聊异步框架的设计思想和实现。 异步框架设计思想 服务器模型 先来看看传统的服务器模型,如下图: ...

工作两年记

转眼间,我也已经工作了快两年了。两年,在互联网行业,是一个尴尬的时间点。一方面,你不再是一个新人,意味着你的潜力已经渐渐被挖掘得差不多了。另一方面,你又还没完全成长,你会承担一些责任,但也许还没办法掌控全局,做到游刃有余。 回想起刚入职,由于自己完全没有工程经验,心里相当忐忑。机缘巧合,leader 给我分配的第一个任务是爬虫。Python 对于新手来说相当的友好,我很快就上手并能够做出一...