自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (7)
  • 收藏
  • 关注

原创 etcd源码分析之Follower抢主流程

2020-04-11 17:06:39 266

原创 etcd源码分析之put流程及部分channel的作用

引用一张关系图说明etcd各模块的关系下面绘制了etcdctl put key value的时序图来解析代码流程

2020-04-11 17:03:12 417

原创 etcd源码分析之心跳包发送

2020-04-11 16:55:57 662

原创 etcd消息通信各消息类型汇总

2020-04-09 23:06:59 635

原创 etcd源码分析之Foller抢主过程

2020-04-09 23:05:19 193

原创 docker源码分析之docker load

2020-04-09 23:00:50 511

原创 python中参数*和**的使用方法

python中的参数传递,python传递的形参有这两种样式,*和**一、*的这种用法是传递一个元组,python中的元组是一个括弧包含的数据,如(1,2,3,4)eg1:test(*args):    print args[0],args[1],args,argument=(1,2,3,4,5,6,7,8)test(*argument)这时候的输出为:1,2,(1,2,3,4,5,6,7,8),...

2018-04-10 22:38:15 2638

原创 ansible简介,语法介绍,yaml语法介绍

1. Playbook简介Ansible 的任务配置文件被称之为“playbook”,我们可以称之为“剧本”。每一出剧本(playbook)中都包含一系列的任务,这每个任务在ansible中又被称为一出“戏剧”(play)。一个剧本(playbook)中包含多出戏剧(play),这很容易理解。Playbook采用一种可读性很高的且容易被人类阅读的语法的YAML语法编写,YAML: "YAML Ai...

2018-04-01 21:06:58 1281

原创 ansible入门指南,登录其他宿主机,使用playbook创建文件

自己玩了一下ansible,在项目里面只看别人在写ansible playbook,自己并没有动手做过,这里开始自己尝试这里采用的连接方式是ssh,每次都是使用主机地址、用户名、和密码登录宿主机,还有一种方式是使用公钥\私钥的方式,这个后续再介绍准备工作:在VirtualBox上开启两个宿主机,我使用的是桥接网络,因为要安装一些东西,他们的IP为192.168.3.10和192.168.3.11在...

2018-04-01 20:57:19 3746

原创 VirtualBox - 自动调整屏幕大小,设置虚机自适应显示器

在VirtualBox中安装了Ubuntu后,Ubuntu的屏幕调整不太好,操作起来非常不方便,需要安装Vbox的增强功能。我使用的VirtualBox是5.0.24版本,具体操作如下:1, 在  设备--》 安装增强功能这时会自动加载VBOXADDITIONS的虚拟光盘2, 运行这个文件,需要管理员权限,下面是运行结果3.运行结束后reboot虚机,这样屏幕分辨率会随着屏幕大小自动调整,非常方便...

2018-03-13 23:33:54 38043 5

原创 python装饰器,一种更容易理解的方式

装饰器的策略可以这样来概括,它是对原有函数封闭性的保持,又对原有函数进行扩展;就是说对你原有的代码不做修改,保证其功能模块不发生改变,在原有函数的基础上,再加一层,对原有函数进行扩展;假如说有这样一件事情:def printout(num):    print "This is a Test"上面是输出一个字符串,但是我们现在想在print之前进行一次判断,最简单的做法是:def printout...

2018-03-11 22:44:20 265

原创 python实现单粒模式,模块方法/装饰器方法/__new__方法

我们首先理解一下什么叫做单例模式。就是说,系统环境里面有一个类,无论在系统的什么地方,只要想实例化,就只能得到一个实例,实例化后对实例的任何操作,也只和第一个实例相关。另外一个层面,单例模式同样避免了重复实例化的内存浪费,如果使用得当,能够大大节约系统资源。 下面就说一下python里面实现实例的几种方法,里面有几个和我之前讲过的知识点相关,这里mark一下:使用模块使用魔法方法 __new__使...

2018-03-11 16:17:44 257

原创 python的取值技巧

python中常用的数据类型是字典,字典的取值就是通过当前对象然后加上对于的key值就得到了对应的value;x={"key1":"value1"}python对字典的取值有以下三种:1.  y = x["key1"]这样得到的值y为value1,但是这样有一个坏处,假如取一个不存在的key就会抛出异常,如x["error"],这时候就会抛出AttributeError2.  y

2018-01-25 22:54:23 3932

原创 python的字典去重

字典的key值判断或者去除重复的key和value,下面介绍list和set两种方法:x={"a":"1","b":"2","c":"3","a":"1","b":"2","c":"3"}或者x={"a":"1","b":"2","c":"3","a":"11","b":"22","c":"33"}都是一样的;首先看list方法:y=list(x)就是["a","b","c"],这样得

2018-01-25 22:45:13 26321

原创 python动态绑定的特性

python作为一种脚本语言,无需编译,解释执行,在使用python的过程中运用了动态绑定的这一特性,故此总结一下;先看一段代码:dynamic.pyclass People(object):    def test(self):        print "this is a function in class"def test():    print "this is a test funct

2018-01-17 22:19:14 387

原创 MySql关键字汇总

select ... from   查找distinct    合并相同的项limit /limit ... offset   限制输出order by  排序order by ... desc   排序,降序where/ where ... between ... and ...   条件判断输出where ... and   多条件,同时符合where ... or

2017-12-24 09:53:03 2404

原创 python自定义模块和模块引入

到现在才知道怎么把自己写的模块加入到查找路径中,方便在使用过程中解释器能索引到自定义的模块进入python环境中,首先引入sys模块:import sys然后使用sys.path查询现有python解释器所查找的模块路径书写自己的模块放置到一个文件夹下然后使用sys.path.append("my_model_path"),my_model_path就是自定义模块所存放的路径这

2017-12-17 20:18:43 2113

原创 RabbitMQ消息通信,生产者发送消息给指定的消费者的消息队列

上一篇文章描述了,通过使用广播式的通信方式,让生产者把消息广播给每一个消费者,本节我们介绍另外一个方式,生产者可以指定消费者,把消息发送给它:client.py#!/usr/bin/env pythonimport pikaimport sysconnection = pika.BlockingConnection(pika.ConnectionParameters(host='l

2017-11-10 21:37:25 12777

原创 RabbitMQ消息通信,一个生产者和多个消费者,广播式消息通信

上一则我们说到了一个对多个的RabbitMQ消息队列通信的实现方法,生产者发送的消息只能被一个消费者接收并处理,上则请阅读:http://blog.csdn.net/u012631731/article/details/78450389本则说的是广播式的消息通信方法实现,所有的消费者都可以收到生产者发送的消息还是直接上代码吧,有描述直接在代码里面注释:client.py#!

2017-11-05 21:50:44 13970

原创 RabbitMQ消息通信,一个生产者和多个消费者

上一则文章讲解了RabbitMQ的安装和简单一对一消息通信实现方法,具体可参考上一篇文章:http://blog.csdn.net/u012631731/article/details/72887588这则文章讲述一个生产者和多个消费者的消息通信。直接上源码,在源码里面进行注释讲述吧client.py#!/usr/bin/env pythonimport pikaimp

2017-11-05 17:06:20 19356 1

原创 使用virtualenv搭建Python下的Flask开发环境,ubu测试有效

Flask 依赖两个外部库:Werkzeug 和 Jinja2 。不过使用virtualenv就可以搞定这一切。下面重点介绍一下环境搭建的步骤:如果你在 Mac OS X 或 Linux 下,下面两条命令可能会适用:$ sudo easy_install virtualenv或更好的:$ sudo pip install virtualenv上述的命令会在你的系统中安装 v

2017-11-01 23:06:56 355

原创 使用python下的Flask应用

Flask是一个使用 Python 编写的轻量级 Web 应用框架。在学习过程中进行一些总结:1.一个最小的Flask应用 flask_test1.py:from flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world():    return 'Hello World!'i

2017-11-01 22:34:59 415

转载 angular jit and aot

为什么需要编译Angular应用中包含的组件、HTML模板(比如:@Directive、@Component、@NgModule、@Pipe)很多都是JS VM无法解析的,所以在浏览器渲染应用之前,组件和模板必须要被Angular编译器转换为可以执行的JavaScript。angular2编译模式在 Angular 2 中有两种编译模式:JIT - Just-In-Time AOT -

2017-10-22 09:30:22 557

原创 openstack创建虚拟机流程,从界面任务发起,到nova等组件处理,到虚机创建完成

这个图是经典的记录了openstack创建虚拟机的详细流程,总共28个步骤。1.客户端使用自己的用户名密码请求认证。2.keystone通过查询在keystone的数据库user表中保存了user的相关信息,包括password加密后的hash值,并返回一个token_id(令牌),和serviceCatalog(一些服务的endpoint地址,cinder、glance-api后

2017-10-21 20:51:43 1952

原创 openstack的RPC消息通信,oslo.messagin实现

openstack的RPC消息通信,提供了同步call和异步cast的两种调用方法,对每一组消息通信建立一个消息通道。oslo.messaging是应用于python的库,为微服务直接或者server和client直接建立消息通信网络。环境搭建:1.linux操作系统运行环境2.安装pip,可以使用源码安装,地址为https://pypi.python.org/pypi/pip/,

2017-10-21 20:21:39 531

原创 Python下使用sqlalchemy关联MySQL数据库,建立主外键关联关系,实现相互约束和级联删除

主外键是关系型数据库提供的一直关联表的一种方法,这里的级联关系提供了至少两个功能。第一:Machine表中的id字段为其主键,Car表中的machine_id为外键,这样就对Car中的machine_id字段进行了约束,使得machine_id字段的值必须是Machine表中id中的其中一个;第二:提供了两个表数据的级联删除功能,relation中的cascade和ondelete等属性值

2017-09-06 21:28:45 1817

原创 python使用sqlalchemy中间件对MYSQL数据库进行创建、查询、删除操作

首先安装sqlalchemy,安装方法有两种:通过官网下载源码进行安装;使用pip install sqlachemly1.建立操作数据库接口模块api.py,描述:在接口模块中首先创建一个engine,这里关联的是mysql数据库,也可以是其他类型的数据库然后定义了几个访问数据库的接口函数,提供对数据库的添加、删除、查询操作from sqlalchemy import cre

2017-09-05 22:03:16 2774

原创 python下使用alembic管理MYSQL数据库

本文介绍一下,alembic管理mysql的使用方法,首先需要安装一下模块,这里以ubutun为例进行阐述:1.首先安装setuptools,这个是pip安装需要的依赖:apt-get install steuptools2.然后安装pip,建议下载源码包安装,比较方便,地址为https://pypi.python.org/pypi/pip/,解压后进入文件目录执行python step.

2017-08-20 15:45:51 2123

原创 mysql常用操作汇总(五)

数据结构:1.汇总函数:avg(), count(), max(), min(), sum()select avg(price), count(price), max(price), min(price), sum(price) from shopping;2.数据分组:mysql提供了数据分组的方法,group by对列数据进行分组统计select pri

2017-07-23 16:07:56 281

原创 mysql常用操作汇总(四)

数据拼接:1.select concat ( id, '(', name,')') from shopping;2.使用别名,生成新的key和value:select concat ( id, '(', name,')') as id_name from shopping;3.使用算术计算,返回新的key和计算结果:(支持的算术计算包含加(+)减(-)乘(*)除(/

2017-07-21 21:28:43 283

原创 mysql常用操作汇总(三)

使用where过滤数据select name,id,price from shopping where id='3';MYSQL支持的其他操作符:对于多个约束条件可以使用and或or进行连接,and和与相通,or与或相通:select name,id,price from shopping where id='4' and price='444';and

2017-07-20 21:25:50 239

原创 网页存储之localStorage和sessionStorage

localStorage和sessionStorage都可以作为网页存储数据的方法。它们都是key-value的键值对方式存储,它们的不同点在于,localStorage会一直存储在网页提供的数据库中,而sessionStorage在会话结束时(页面关闭时)数据就会被清空。分别在浏览器中执行:localStorage.setItem('hello', 'Lucy');session

2017-07-19 21:17:14 390

原创 myslq常用操作汇总(二)

排序检索数据按照某一列数据进行排序:select name,id from shopping order by id;按照多列数据进行排序: select name,id from shopping order by id,name;(这个排序是有一定的顺序,id在前就先按照id排序,如果id每一项都是唯一的,这个后面的排序规则就没用了)按照降序进行排序:select

2017-07-19 20:59:35 316

原创 mysql常用操作汇总(一)

登录:mysql -u root -p显示所有数据库:show databases;进入workerspace数据库:use workerspace;查询数据库下面的所有表:show tables;查询表结构:(下面三种方式都可以)desc shopping;describe shopping;select columns fro

2017-07-19 20:49:33 338

原创 display中block、inline、inlinke-block的区别和使用方法

display:blockblock元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度。block元素可以设置width,height属性。块级元素即使设置了宽度,仍然是独占一行。block元素可以设置margin和padding属性。display:inlineinline元素不会独占一行,多个相邻的行内元素会排列

2017-07-16 17:43:47 1104

原创 python中==和is的区别,a==b和a is b

在python的条件判断中有这两个表达式:a==b和a is b,现在咱们来分析一下他们的不同,以下咱们通过真实的例子来说明吧:上面这个事例说明,对于一个普通变量,数值相同,它在内存中所占据的位置也相同,python认为它们是同一个变量下面我们再来看一个例子:上面的例子说明了,对一个对象来说,它们分别占据了内容空间的一个位置,但是如果我们把a,b之间通过赋值操作呢,

2017-07-03 21:16:24 4919

原创 ajax消息通信,单文件上传和多文件上传的前后端实现

尝试了两种文件上传的方式,使用的是jquery的ajax请求发起上传,先介绍一下后端的实现:后端使用nodejs,使用的是express框架,定义的请求规则是post一个ajax请求到http://127.0.0.1:3200/uploadfile,代码中对跨域访问做了处理:router.all('/uploadfile', function (req, res) {    res.h

2017-06-28 22:36:28 2003

原创 nodejs中for循环和异步调用的那些坑

在nodejs中for循环中是不能嵌套使用异步调用的,就像下面的:我们定义一个post请求,用于接受前端发送来的文件,然后使用for循环对目录下的一些文件依次做一些异步调用事情(使用fs的stat)router.post('/uploadfile', function (req, res) {    upload(req, res, function (err) {

2017-06-26 22:24:44 10105 3

原创 教你如何使用webpack打包你的项目

webpack是前端开发中比较常用的打包工具之一,另外还有gulp,grunt。之前没有涉及过打包这块,这里介绍一下使用webpack打包的流程。

2017-06-25 14:37:06 85945 6

原创 jquery节点判断,筛选参数可以是类名,DOM元素

1.  hasClass()可以判断一个DOM节点是否包含某个类,如$("button").hasClass("myclass");真实的使用场景可以是这样的:$("button").click(function(){  if ( $(this).hasClass("protected") ){    //do somethings  }});2.  has

2017-06-21 22:30:32 899

Node.js实战

本书被分为三部分。 第一部分介绍了Node.js,教授了一些用它做开发所需要的基础技术。第1章阐述了Node的特 征,并给出了一些示例代码。第2章指导读者创建了一个示例程序。第3章阐述了Node.js开发的困 难之处,以及可以用来克服这些困难的技术,并给出了组织程序代码的办法。 第二部分在本书中所占比重最大,主要讨论Web程序开发。第4章讲了基于Node创建Web程 序的基础知识,第5章讨论了如何用Node存储程序数据。 然后第二部分继续深入Web相关框架。第6章介绍了Connect框架,阐述了它的好处和它的工 作机制 。第7章讲述了Connect框架内置的各种组件,以及如何用它们给Web程序添加功能。第8 章介绍了Express框架。第9章指导读者体验Express的高级用法。 涵盖了Web开发的基础知识后,第二部分又探索了两个相关的主题。第10章指导读者使用各 种Node测试框架,第11章讲了在Node Web程序中如何用模板将数据展示从逻辑中分离出来。 第三部分转而讨论了可以用Node完成的Web开发之外的事情。第12章讨论了如何把Node程序 部署到生产服务器上、如何维护在线时间,以及如何将性能提升到最优。第13章阐述了如何创建 非HTTP程序,如何用Socket.io框架创建实时程序,以及如何使用一些便利的Node内置API。第14 章讨论了Node社区的工作机制,以及如何用Node包管理器发布Node作品。

2018-01-22

Linux内核设计与实现(第三版中文高清带目录)

译者序 序言 前言 作者简介 第1章 Linux内核简介1 1.1 Unix的历史1 1.2 追寻Linus足迹:Linux简介2 1.3 操作系统和内核简介3 1.4 Linux内核和传统Unix内核的比较5 1.5 Linux内核版本7 1.6 Linux内核开发者社区8 1.7 小结8 第2章 从内核出发10 2.1 获取内核源码10 2.1.1 使用Git10 2.1.1 安装内核源代码10 2.1.3 使用补丁11 2.2 内核源码树11 2.3 编译内核12 2.3.1 配置内核12 2.3.2 减少编译的 垃圾信息14 2.3.3 衍生多个编译作业 14 2.3.4 安装新内核14 2.4 内核开发的特点15 2.4.1 无libc库抑或无标准头文件15 2.4.2 GNU C16 2.4.3 没有内存保护机制18 2.4.4 不要轻易在内核中使用浮点数18 2.4.5 容积小而固定的栈18 2.4.6 同步和并发18 2.4.7 可移植性的重要性19 2.5 小结19 第3章 进程管理20 3.1 进程20 3.2 进程描述符及任务结构 21 3.2.1 分配进程描述符22 3.2.2 进程描述符的存放23 3.2.3 进程状态23 3.2.4 设置当前进程状态25 3.2.5 进程上下文25 3.2.6 进程家族树25 3.3 进程创建26 3.3.1 写时拷贝27 3.3.2 fork()27 3.3.3 vfork()28 3.4 线程在Linux中的实现28 3.4.1 创建线程29 3.4.2 内核线程30 3.5 进程终结31 3.5.1 删除进程描述符32 3.5.2 孤儿进程造成的进退维谷32 3.6 小结34 第4章 进程调度35 4.1 多任务35 4.2 Linux 的进程调度36 4.3 策略36 4.3.1 I/O消耗型和处理器消耗型的进程36 4.3.2 进程优先级37 4.3.3 时间片38 4.3.4 调度策略的活动38 4.4 Linux调度算法39 4.4.1 调度器类39 4.4.2 Unix 系统中的进程调度40 4.4.3 公平调度41 4.5 Linux调度的实现42 4.5.1 时间记账42 4.5.2 进程选择44 4.5.3 调度器入口48 4.5.4 睡眠和唤醒49 4.6 抢占和上下文切换51 4.6.1 用户抢占53 4.6.2 内核抢占53 4.7 实时调度策略54 4.8 与调度相关的系统调用54 4.8.1 与调度策略和优先级相关的系统调用55 4.8.2 与处理器绑定有关的系统调用55 4.8.3 放弃处理器时间56 4.9 小结56 第5章 系统调用57 5.1 与内核通信57 5.2 API、POSIX和C库57 5.3 系统调用58 5.3.1 系统调用号59 5.3.2 系统调用的性能59 5.4 系统调用处理程序60 5.4.1 指定恰当的系统调用60 5.4.2 参数传递60 5.5 系统调用的实现61 5.5.1 实现系统调用61 5.5.2 参数验证62 5.6 系统调用上下文64 5.6.1 绑定一个系统调用的最后步骤65 5.6.2 从用户空间访问系统调用67 5.6.3 为什么不通过系统调用的方式实现68 5.7 小结68 第6章 内核数据结构69 6.1 链表69 6.1.1 单向链表和双向链表69 6.1.2 环形链表70 6.1.3 沿链表移动71 6.1.4 Linux 内核中的实现71 6.1.5 操作链表73 6.1.6 遍历链表75 6.2 队列78 6.2.1 kfifo79 6.2.2 创建队列79 6.2.3 推入队列数据79 6.2.4 摘取队列数据80 6.2.5 获取队列长度80 6.2.6 重置和撤销队列80 6.2.7 队列使用举例 81 6.3 映射 81 6.3.1 初始化一个idr82 6.3.2 分配一个新的UID82 6.3.3 查找UID83 6.3.4 删除UID84 6.3.5 撤销idr84 6.4 二叉树84 6.4.1 二叉搜索树84 6.4.2 自平衡二叉搜索树 85 6.5 数据结构以及选择 87 6.6 算法复杂度88 6.6.1 算法88 6.6.2 大o 符号88 6.6.3 大θ符号89 6.6.4 时间复杂度89 6.7 小结 90 第7章 中断和中断处理91 7.1 中断91 7.2 中断处理程序92 7.3 上半部与下半部的对比93 7.4 注册中断处理程序93 7.4.1 中断处理程序标志94 7.4.2 一个中断例子95 7.4.3 释放中断处理程序95 7.5 编写中断处理程序96 7.5.1 共享的中断处理程序97 7.5.2 中断处理程序实例97 7.6 中断上下文99 7.7 中断处理机制的实现100 7.8 /proc/interrupts102 7.9 中断控制103 7.9.1 禁止和激活中断103 7.9.2 禁止指定中断线105 7.9.3 中断系统的状态105 7.10 小结106 第8章 下半部和推后执行的工作107 8.1 下半部107 8.1.1 为什么要用下半部108 8.1.2 下半部的环境108 8.2 软中断110 8.2.1 软中断的实现111 8.2.2 使用软中断113 8.3 tasklet114 8.3.1 tasklet的实现114 8.3.2 使用tasklet116 8.3.3 老的BH机制119 8.4 工作队列120 8.4.1 工作队列的实现121 8.4.2 使用工作队列124 8.4.3 老的任务队列机制126 8.5 下半部机制的选择127 8.6 在下半部之间加锁128 8.7 禁止下半部128 8.8 小结129 第9章 内核同步介绍131 9.1 临界区和竞争条件131 9.1.1 为什么我们需要保护132 9.1.2 单个变量133 9.2 加锁134 9.2.1 造成并发执行的原因135 9.2.2 了解要保护些什么136 9.3 死锁137 9.4 争用和扩展性138 9.5 小结140 第10章 内核同步方法141 10.1 原子操作141 10.1.1 原子整数操作142 10.1.2 64位原子操作144 10.1.3 原子位操作145 10.2 自旋锁147 10.2.1 自旋锁方法148 10.2.2 其他针对自旋锁的操作149 10.2.3 自旋锁和下半部150 10.3 读-写自旋锁150 10.4 信号量152 10.4.1 计数信号量和二值信号量153 10.4.2 创建和初始化信号量154 10.4.3 使用信号量154 10.5 读-写信号量155 10.6 互斥体156 10.6.1 信号量和互斥体158 10.6.2 自旋锁和互斥体158 10.7 完成变量158 10.8 BLK:大内核锁159 10.9 顺序锁160 10.10 禁止抢占161 10.11 顺序和屏障162 10.12 小结165 第11章 定时器和时间管理166 11.1 内核中的时间概念166 11.2 节拍率:HZ167 11.2.1 理想的HZ值168 11.2.2 高HZ的优势169 11.2.3 高HZ的劣势169 11.3 jiffies170 11.3.1 jiffies的内部表示171 11.3.2 jiffies 的回绕172 11.3.3 用户空间和HZ173 11.4 硬时钟和定时器174 11.4.1 实时时钟174 11.4.2 系统定时器174 11.5 时钟中断处理程序174 11.6 实际时间176 11.7 定时器178 11.7.1 使用定时器178 11.7.2 定时器竞争条件180 11.7.3 实现定时器180 11.8 延迟执行181 11.8.1 忙等待181 11.8.2 短延迟182 11.8.3 schedule_timeout()183 11.9 小结185 第12章 内存管理186 12.1 页186 12.2 区187 12.3 获得页189 12.3.1 获得填充为0的页190 12.3.2 释放页191 12.4 kmalloc()191 12.4.1 gfp_mask标志192 12.4.2 kfree()195 12.5 vmalloc()196 12.6 slab层197 12.6.1 slab层的设计198 12.6.2 slab分配器的接口200 12.7 在栈上的静态分配203 12.7.1 单页内核栈203 12.7.2 在栈上光明正大地工作203 12.8 高端内存的映射204 12.8.1 永久映射204 12.8.2 临时映射204 12.9 每个CPU的分配20512.10 新的每个CPU接口206 12.10.1 编译时的每个CPU数据206 12.10.2 运行时的每个CPU数据207 12.11 使用每个CPU数据的原因208 12.12 分配函数的选择209 12.13 小结209 第13章 虚拟文件系统210 13.1 通用文件系统接口210 13.2 文件系统抽象层211 13.3 Unix文件系统212 13.4 VFS 对象及其数据结构213 13.5 超级块对象214 13.6 超级块操作215 13.7 索引节点对象217 13.8 索引节点操作219 13.9 目录项对象222 13.9.1 目录项状态222 13.9.2 目录项缓存223 13.10 目录项操作224 13.11 文件对象225 13.12 文件操作226 13.13 和文件系统相关的数据结构230 13.14 和进程相关的数据结构232 13.15 小结233 第14章 块I/O层234 14.1 剖析一个块设备234 14.2 缓冲区和缓冲区头235 14.3 bio结构体237 14.3.1 I/O向量238 14.3.2 新老方法对比239 14.4 请求队列240 14.5 I/O调度程序240 14.5.1 I/O调度程序的工作241 14.5.2 Linus 电梯241 14.5.3 最终期限I/O调度程序242 14.5.4 预测I/O调度程序244 14.5.5 完全公正的排队I/O调度程序244 14.5.6 空操作的I/O调度程序245 14.5.7 I/O调度程序的选择245 14.6 小结246 第15章 进程地址空间247 15.1 地址空间247 15.2 内存描述符248 15.2.1 分配内存描述符249 15.2.2 撤销内存描述符250 15.2.3 mm_struct 与内核线程250 15.3 虚拟内存区域251 15.3.1 VMA标志251 15.3.2 VMA 操作253 15.3.3 内存区域的树型结构和内存区域的链表结构254 15.3.4 实际使用中的内存区域254 15.4 操作内存区域255 15.4.1 find_vma()256 15.4.2 find_vma_prev()257 15.4.3 find_vma_intersection()257 15.5 mmap()和do_mmap():创建地址区间258 15.6 mummap()和do_mummap():删除地址区间259 15.7 页表260 15.8 小结261 第16章 页高速缓存和页回写262 16.1 缓存手段262 16.1.1 写缓存262 16.1.2 缓存回收263 16.2 Linux 页高速缓存264 16.2.1 address_space对象264 16.2.2 address_space 操作266 16.2.3 基树267 16.2.4 以前的页散列表268 16.3 缓冲区高速缓存268 16.4 flusher线程268 16.4.1 膝上型计算机模式270 16.4.2 历史上的bdflush、kupdated 和pdflush270 16.4.3 避免拥塞的方法:使用多线程271 16.5 小结271 第17章 设备与模块273 17.1 设备类型273 17.2 模块274 17.2.1 Hello,World274 17.2.2 构建模块275 17.2.3 安装模块277 17.2.4 产生模块依赖性277 17.2.5 载入模块278 17.2.6 管理配置选项279 17.2.7 模块参数280 17.2.8 导出符号表282 17.3 设备模型283 17.3.1 kobject283 17.3.2 ktype284 17.3.3 kset285 17.3.4 kobject、ktype和kset的相互关系285 17.3.5 管理和操作kobject286 17.3.6 引用计数287 17.4 sysfs288 17.4.1 sysfs中添加和删除kobject 290 17.4.2 向sysfs中添加文件291 17.4.3 内核事件层293 17.5 小结294 第18章 调试295 18.1 准备开始295 18.2 内核中的bug296 18.3 通过打印来调试296 18.3.1 健壮性296 18.3.2 日志等级297 18.3.3 记录缓冲区298 18.3.4 syslogd和klogd298 18.3.5 从printf()到printk()的转换298 18.4 oops298 18.4.1 ksymoops300 18.4.2 kallsyms300 18.5 内核调试配置选项301 18.6 引发bug并打印信息301 18.7 神奇的系统请求键302 18.8 内核调试器的传奇303 18.8.1 gdb303 18.8.2 kgdb304 18.9 探测系统304 18.9.1 用UID作为选择条件304 18.9.2 使用条件变量305 18.9.3 使用统计量305 18.9.4 重复频率限制305 18.10 用二分查找法找出引发罪恶的变更306 18.11 使用Git进行二分搜索307 18.12 当所有的努力都失败时:社区308 18.13 小结308 第19章 可移植性309 19.1 可移植操作系统309 19.2 Linux移植史310 19.3 字长和数据类型311 19.3.1 不透明类型313 19.3.2 指定数据类型314 19.3.3 长度明确的类型314 19.3.4 char型的符号问题315 19.4 数据对齐315 19.4.1 避免对齐引发的问题316 19.4.2 非标准类型的对齐316 19.4.3 结构体填补316 19.5 字节顺序318 19.6 时间319 19.7 页长度320 19.8 处理器排序320 19.9 SMP、内核抢占、高端内存321 19.10 小结321 第20章 补丁、开发和社区322 20.1 社区322 20.2 Linux编码风格322 20.2.1 缩进323 20.2.2 switch 语句323 20.2.3 空格324 20.2.4 花括号325 20.2.5 每行代码的长度326 20.2.6 命名规范326 20.2.7 函数326 20.2.8 注释326 20.2.9 typedef327 20.2.10 多用现成的东西328 20.2.11 在源码中减少使用ifdef328 20.2.12 结构初始化328 20.2.13 代码的事后修正329 20.3 管理系统329 20.4 提交错误报告329 20.5 补丁330 20.5.1 创建补丁330 20.5.2 用Git创建补丁331 20.5.3 提交补丁331 20.6 小结332 参考资料33

2018-01-22

HTTP权威指南

HTTP权威指南,文档在压缩包里面,是学习http通信的不错书籍

2018-01-22

Python参考手册(第4版)

Python参考手册第4版.pdf 文档在压缩文件中,一起学习一起进步

2018-01-22

mysql必知必会

mysql必知必会是一本比较全面比较基础的学习mysql是数据库,压缩文件中包含pdf文件,一起学习一起进步

2018-01-22

TCP-IP详解卷1

TCP-IP详解卷1,压缩文件中是pdf的文档,欢迎一起学习一起分享

2018-01-22

算法:C语言实现第1-4部分基础知识、数据结构、排序及搜索

算法:C语言实现第1-4部分基础知识、数据结构、排序及搜索

2018-01-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除