<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[brianleelxt的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/brianleelxt</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; brianleelxt]]></copyright><item><title><![CDATA[Raft 论文研读]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106869231</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106869231</guid><author>brianleelxt</author><pubDate>Sat, 20 Jun 2020 10:58:26 +0800</pubDate><description><![CDATA[Raft 论文研读
说明：本文为论文 《 In Search of an Understandable Consensus Algorithm (Extended Version) 》 的个人理解，难免有理解不到位之处，欢迎交流与指正 。
论文地址：Raft Paper

1. 复制状态机
复制状态机 (Replicated state machine) 方法在分布式系统中被用于解决 容错问题 ，这种方法中，一个集群中各服务器有相同状态的副本，并且在一些服务器宕机的情况下也可以正常运行 。

如上图所示，每]]></description><category></category></item><item><title><![CDATA[分布式系统相关论文总结系列（持续更新中）]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106727179</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106727179</guid><author>brianleelxt</author><pubDate>Sat, 13 Jun 2020 05:22:46 +0800</pubDate><description><![CDATA[分布式相关论文总结

MapReduce: Simplified Data Processing on Large Clusters
The Google File System
The Design of a Practical System for Fault-Tolerant Virtual Machines


]]></description><category></category></item><item><title><![CDATA[《The Design of a Practical System for Fault-Tolerant Virtual Machines》论文总结]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106708202</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106708202</guid><author>brianleelxt</author><pubDate>Fri, 12 Jun 2020 09:02:23 +0800</pubDate><description><![CDATA[VM-FT 论文总结
说明：本文为论文 《The Design of a Practical System for Fault-Tolerant Virtual Machines》 的个人总结，难免有理解不到位之处，欢迎交流与指正 。
论文地址：VM-FT 论文

本文的总结包括论文内容以及 MIT6.824 Lec4 中的授课内容，其中包含了论文中没有提及的一些细节 。


1. 前言
本论文主要介绍了一个用于提供 容错虚拟机 (fault-tolerant virtual machine) 的企业级商业]]></description><category></category></item><item><title><![CDATA[《The Google File System》论文总结]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106611160</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106611160</guid><author>brianleelxt</author><pubDate>Mon, 08 Jun 2020 05:39:51 +0800</pubDate><description><![CDATA[GFS 论文总结
说明：本文为论文 《The Google File System》 的个人总结，难免有理解不到位之处，欢迎交流与指正 。
论文地址：GFS Paper

阅读此论文的过程中，感觉内容繁多且分散，一个概念的相关内容在不同部分相交地出现 。所以本文尽量将同一概念的相关内容串联并总结在一起 。
本文以批注的形式添加个人理解 。


1. 前言
Google File System (GFS) 是由 Google 设计并实现的、一个面向大规模数据密集型应用的分布式文件系统，它不仅满足所有分布式文件]]></description><category></category></item><item><title><![CDATA[《MapReduce: Simplified Data Processing on Large Clusters》论文总结]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106486025</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106486025</guid><author>brianleelxt</author><pubDate>Tue, 02 Jun 2020 06:44:08 +0800</pubDate><description><![CDATA[MapReduce 论文解读
说明：本文为论文 《MapReduce: Simplified Data Processing on Large Clusters》 的个人理解，难免有理解不到位之处，欢迎交流与指正 。
论文地址：MapReduce Paper

1. MapReduce 编程模型
MapReduce 是 Google 提出的一种用于处理和生成大数据集的 编程模型 ，具象地可以理解成一个 框架 。
该框架含有两个由用户来实现的接口：map 和 reduce ，map 函数接收一个键值对，生成一]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记系列]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106218730</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106218730</guid><author>brianleelxt</author><pubDate>Tue, 19 May 2020 17:21:26 +0800</pubDate><description><![CDATA[本系列笔记主要是对于 《UNIX环境高级编程》(APUE) 各章节内容 概念性的总结 ，不涉及代码解读 。
目录为：
第一章 UNIX基础知识
第二章 UNIX标准及实现
第三章 文件I/O
第四章 文件和目录
第五章 标准I/O库
第六章 系统数据文件和信息
第七章 进程环境
第八章 进程控制
第九章 进程关系
第十章 信号
第十一章 线程
第十二章 线程控制
第十三章 守护进程
第十四章 高级I/O
第十五章 进程间通信
第十六章 网络IPC：套接字
第十七章 高级进程间通信
第十八章 终端I/O
第十]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第十七章 - 高级进程间通信]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106206957</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106206957</guid><author>brianleelxt</author><pubDate>Tue, 19 May 2020 09:05:40 +0800</pubDate><description><![CDATA[Github 地址

17 - 高级进程间通信
1. UNIX 域套接字
UNIX 域套接字 用于在同一台计算机上运行的进程之间的通信 ，它可以在同一计算机系统上运行的两个进程之间传送打开的文件描述符 。
UNIX 域套接字 仅仅 复制数据 ，它们并不执行协议处理，不需要添加或删除网络报头，无需计算校验和，不要产生顺序号，无需发送确认报文 。所以比 因特网域套接字 效率更高 。
UNIX 域套接字 提供流和数据报两种接口 。UNIX 域数据报服务 是可靠的，既不会丢失报文，也不会传递出错 。
UNIX 域套]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第十六章 - 网络IPC：套接字]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106190755</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106190755</guid><author>brianleelxt</author><pubDate>Mon, 18 May 2020 12:55:29 +0800</pubDate><description><![CDATA[Github 地址

16 - 网络IPC:套接字
1. 网络 IPC
经典进程间通信机制 （ IPC ）：管道、FIFO 、消息队列、信号量和共享存储，允许在同一台计算机上运行的进程之间通信 。
网络进程间通信 是不同计算机（通过网络连接）上的进程相互通信的机制 。（也可用于计算机内通信）
2. 套接字描述符
套接字 是通信端点的抽象，应用程序用 套接字描述符 访问套接字 。套接字描述符在 UNIX 系统中被当作是一种文件描述符 。
使用 socket 函数 创建 一个套接字：
#include &lt;]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第十五章 - 进程间通信]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106168396</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106168396</guid><author>brianleelxt</author><pubDate>Sun, 17 May 2020 01:33:24 +0800</pubDate><description><![CDATA[15 - 进程间通信
1. 进程间通信
进程间通信 (IPC) 是进程之间相互通信的技术：

前十种 IPC 形式通常限于同一台主机的两个进程之间的 IPC ，最后两行（ 套接字和 STREAMS ）是仅有的支持不同主机上两个进程之间的 IPC 的两种形式 。
2. 管道
2.1 管道概念
管道 是 UNIX 系统 IPC 的最古老形式 。
管道的两种 局限性：

有的系统仅提供半双工通道
管道只能在具有公共祖先的两个进程之间使用 。通常，一个管道由一个进程创建，在进程调用 fork 之后，这个管道就能在父]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第十四章 - 高级I/O]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106128671</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106128671</guid><author>brianleelxt</author><pubDate>Thu, 14 May 2020 21:10:25 +0800</pubDate><description><![CDATA[Github 地址

14 - 高级I/O
1. 非阻塞 IO
非阻塞 I/O 使我们可以发出 open 、read 和 write 这样的 I/O 操作，并使这些操作不会永远阻塞。如果这种操作不能完成，则调用立即出错返回，表示该操作如继续执行将阻塞 。
对于一个给定的描述符，有两种为其指定 非阻塞 I/O 的方法：

如果调用 open 获得描述符，则可指定 O_NONBLOCK 标志
对于已经打开的一个描述符，则可调用 fcntl ，由该函数打开 O_NONBLOCK 文件状态标志

2. 记录锁
记录]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第十三章 - 守护进程]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106074126</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106074126</guid><author>brianleelxt</author><pubDate>Tue, 12 May 2020 13:14:47 +0800</pubDate><description><![CDATA[Github 地址

13 - 守护进程
1. 守护进程
守护进程 (daemoon) 是生存期长的一种进程。常常在系统引导装入时启动，仅在系统关闭时才终止。它们是在后台运行的，没有控制终端。UNIX 有很多守护进程，它们执行 日常事务活动 。
2. 守护进程的特征
内合进程：父进程 ID 为 000 的各进程通常是内核进程，它们作为系统引导装入的一部分而启动 。
内核守护进程：对于需要在进程上下文执行工作但却不被用户层进程上下文调用的每一个内核组件，通常有它的内核守护进程 。
init 进程：是一个 系统]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第十二章 - 线程控制]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106060072</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106060072</guid><author>brianleelxt</author><pubDate>Mon, 11 May 2020 18:31:49 +0800</pubDate><description><![CDATA[Github 地址

12 - 线程控制
1. 线程限制
下图为与 线程操作 有关的一些 限制：
]
可以通过 sysconf 函数进行查询 。
2. 线程属性
可使用 pthread_attr_t 结构修改线程默认属性，并把这些属性与创建的线程联系起来。
初始化 和 反初始化：
#include &lt;pthread.h&gt;
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthead_attr_t *att]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第十一章 - 线程]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/106021200</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/106021200</guid><author>brianleelxt</author><pubDate>Sat, 09 May 2020 15:58:09 +0800</pubDate><description><![CDATA[Github 地址

11 - 线程
1. 线程概念
典型的 UNIX进程 可以看成只有一个 控制线程 ：一个进程在某一时刻只能做一件事情。有了 多个控制线程 ，就可以把进程设计成在某一时刻能够做不止一件事，每个线程处理各自独立的任务。
每个线程都包含有表示执行环境所必需的信息：

进程中表示线程的 线程 ID
一组寄存器值
栈
调度优先级和策略
信号屏蔽字
errno 变量
线程私有数据

一个进程所有信息对该进程的所有线程都是共享的：

可执行程序的代码
程序的全局内存和堆内存
栈
文件描述符

线程的]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第十章 - 信号]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/105994071</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/105994071</guid><author>brianleelxt</author><pubDate>Fri, 08 May 2020 13:20:29 +0800</pubDate><description><![CDATA[Github 地址

10 - 信号
1. 信号
信号是 软中断 ，信号提供了一种处理异步事件的方法。
当造成信号的事件发生时，为进程 产生 一个信号（或向进程 发送 一个信号）。事件 可以是硬件异常（如除以 000）、软件条件（如alarm定时器超时）、终端产生的信号或调用 kill 函数。
每个信号都有一个名字，以 333 个字符 SIG 开头，定义在头文件 &lt;signal.h&gt; ...]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第九章 - 进程关系]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/105970771</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/105970771</guid><author>brianleelxt</author><pubDate>Thu, 07 May 2020 13:25:53 +0800</pubDate><description><![CDATA[Github地址

9 - 进程关系
1. 进程组
每个进程除了有一个 进程 ID 外，还属于一个 进程组 。进程组是一个或多个进程的 集合 ，通常，它们是在同一作业中结合起来的，同一进程组中的各进程接受来自同一终端的各种信号。每一个进程组有一个唯一的 进程组 ID 。
函数 getpgrp 返回调用进程的进程组 ID：
#include &lt;unistd.h&gt;
pid_t getpgr...]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第八章 - 进程控制]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/105949089</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/105949089</guid><author>brianleelxt</author><pubDate>Wed, 06 May 2020 13:39:09 +0800</pubDate><description><![CDATA[Github地址

8 - 进程控制
1. 进程标识
每个进程都有一个非负整型表示的 唯一进程 ID 。进程 ID 是可复用的（延迟复用算法）。
ID 为 000 的进程通常是调度进程，常常被称为 交换进程 (swapper) 。该进程是内核的一部分，它并不执行任何磁盘上的程序，因此也被称为 系统进程 。
ID 为 111 通常是 init 进程，负责在自举内核后启动一个 UNIX 系统。init...]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第七章 - 进程环境]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/105931493</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/105931493</guid><author>brianleelxt</author><pubDate>Tue, 05 May 2020 13:32:02 +0800</pubDate><description><![CDATA[Github 地址

7 - 进程环境
1. main 函数
C 程序总是从 main 函数 开始执行：
int main(int argc, char *argv[]);

argcargcargc 为命令行参数的数目，argvargvargv 是指向参数各个指针所构成的数组。
内核使用一个 exec 函数 执行 C 程序，在调用 main 前先调用一个特殊的启动例程。可执行程序文件将此例程指定...]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第五章 - 标准I/O库]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/105917552</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/105917552</guid><author>brianleelxt</author><pubDate>Mon, 04 May 2020 14:53:38 +0800</pubDate><description><![CDATA[Github

5 - 标准I/O库
1. 标准 I/O 库作用

缓冲区分配
以优化的块长度执行 I/O 等
使用户不必担心如何选择使用正确的块长度

标准 I/O 最终都要调用第三章中的 I/O 例程 。
2. 流和 FIFE 对象
当用 标准 I/O 库打开或创建一个文件时，使一个 流 与一个文件相关联。（类比于文件 I/O 和文件描述符）
标准 I/O 文件流可用于单字节或多字节（“宽”）...]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第四章 - 文件和目录]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/105890301</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/105890301</guid><author>brianleelxt</author><pubDate>Sat, 02 May 2020 14:38:46 +0800</pubDate><description><![CDATA[Github地址

4 - 文件和目录
1. 函数 stat、fstat、fstatat 和 lstat
#inlcude &lt;sys/stat.h&gt;
int stat(const char *restrict pathname, struct stat *restrict buf);
int fstat(int fd, struct stat *buf);
int lstat(cons...]]></description><category></category></item><item><title><![CDATA[《UNIX环境高级编程》(APUE) 笔记第三章 - 文件I/O]]></title><link>https://blog.youkuaiyun.com/brianleelxt/article/details/105867779</link><guid>https://blog.youkuaiyun.com/brianleelxt/article/details/105867779</guid><author>brianleelxt</author><pubDate>Thu, 30 Apr 2020 19:01:30 +0800</pubDate><description><![CDATA[Github地址

3 - 文件I/O
1. 文件描述符
对于内核而言，所有打开的文件都通过 文件描述符 (file descriptor) 引用。当打开一个现有文件或创建一个新文件时，内核向进程返回一个文件描述符。当读、写一个文件时，使用 open 或 creat 返回的文件描述符标识该文件，将其作为参数传送给 read 或者 write 。
UNIX系统shell把 文件描述符 000 与进程...]]></description><category></category></item></channel></rss>