《深入理解Linux内核》条目式笔记 _2
摘要:下面25条描述主要从整体上介绍内存的相关概念,如各种地址格式, 及分段、分页机制。26. 虚拟内存(virtual memory)是硬件内存管理单元(MMU)和应用程序内存请求的一个逻辑层。具有如下作用:a. 支持多个进程并发执行;b. 可以运行内存需求量大于物理内存上限的应用程序;c.进程可以执行只有部分代码在内存中的应用程序;d. 所有进程可以共享一个库或者应用程序的内存镜像(memory image);e. 应用程序可以再定址(relocatable),可以放置在物理内存的任意位置;f. 程序员可以编写机器无关代码,无需考虑物理内存组织的问题。27. 虚拟地址空间(virtual ad.
阅读全文
posted @
2012-03-27 10:59
virHappy
阅读(602)
推荐(0) 编辑
keepalived配置文件解析系列之(三)配置文件解析过程
摘要:keepalived配置文件解析系列之(三)配置文件解析过程virHappy(zhuozch@163.com) 如(一)所言, keepalived在配置文件解析方面拥有非常灵活的方式, 采用关键字分层(每层的关键字数量不限,且关键字的层次也不限制)的方法进行组织一个配置文件, 且支持平行或者嵌套地include多个其它配置文件语句和正则表达式记法的配置文件名。文(二)中介绍了keepalived关键字的存储和相关的操作,下面将具体分析怎么样解析配置文件。一、入口点及全局流程 位于parser.c文件中的init_data(char *conf_file, vector (*init_ke..
阅读全文
posted @
2012-03-21 18:44
virHappy
阅读(2274)
推荐(3) 编辑
keepalived配置文件解析系列之(二)keyword存储的设计与实现
摘要:keepalived配置文件解析系列之(二)keyword存储的设计与实现virHappy(zhuozch@163.com) 与关键字相关的数据结构和操作主要在lib/parser.c文件中,下面介绍其中的核心内容。一、 关键字相关数据结构 作为关键字, 首先需要有一个名字name来区分, 当解析配置文件时遇到该关键字要进行什么操作则由函数handler来表达, 最后单独的一个关键字是作为整个层次关键字中的一员, 需要有相应的成员去关联下一级别的关键字,这个任务由 sub指针完成。具体的关键字定义如下:1 /* ketword definition */2 struct keyword {..
阅读全文
posted @
2012-03-19 20:44
virHappy
阅读(2247)
推荐(1) 编辑
《深入理解Linux内核》条目式笔记 _1
摘要:最近开始看ULK(深入理解Linux内核, Understanding the Linux Kernel, 3rd), 以条目式(entry)的方式记下相关内容以备忘:1. 在arch和include目录下各有23个和硬件对应的文件夹2. UNIX是以文件系统为中心进行设计的。3. UNIX文件的类型不:常规文件,目录,符号链接,块设备文件,字符设备文件,管道和命名管道,套接字。4. UNIX严格区分文件的内容和文件的控制信息。一般地,控制信息存储在inode结点里面,一个文件对应一个inode结点。5. 根据POSIX标准, inode结点至少要提供以下信息:文件类型,文件关联的硬链接的..
阅读全文
posted @
2012-03-19 14:15
virHappy
阅读(959)
推荐(0) 编辑
keepalived配置文件解析系列之(一)keepalived简介及配置文件介绍
摘要:一、 keepalived简介 为后端服务器提供健康检查(keepalived)和为负载均衡器提供失败切换(fail over)从某种意义上构成了服务器负载均衡(SLB, server load balance)的 一部分。以LVS(Linux Virtual Server, 可参考项目主页http://www.linuxvirtualserver.org/)为代表的软件负载均衡服务器,以高性价比的方式解决了众多企业的需求。 而LVS + keepalived是常见的一种部署方式。 健康检查和失败切换是keepalived(可参考项目主页http://www.linuxvirtualser..
阅读全文
posted @
2012-03-18 17:55
virHappy
阅读(4947)
推荐(1) 编辑
C语言中的位域(bit-field)概念
摘要:一、位域简介 接触过Linux内核网络协议栈的人,大概都见过位域的表达方式。 如下是摘自Linux内核代码(include/linux/tcp.h)中关于tcp头部的定义: 1 struct tcphdr { 2 __be16 source; 3 __be16 dest; 4 __be32 seq; 5 __be32 ack_seq; 6 #if defined(__LITTLE_ENDIAN_BITFIELD) 7 __u16 res1:4, 8 doff:4, 9 fin:1,10 ...
阅读全文
posted @
2012-03-13 19:45
virHappy
阅读(10075)
推荐(0) 编辑
popen和变长参数库函数(va_xxx)用法举例及命令执行失败情况探讨
摘要:在python里可以通过os.popen()和os.system()执行shell命令,C代码里自然也有相应的接口。如下一段代码: 1 /* 2 ** sample program by virHappy 3 */ 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 #include <string.h> 8 #include <stdarg.h> 9 10 #define MAX_BUF_LEN 819211 12 /*13 ** conbine some string together accrodi
阅读全文
posted @
2012-03-12 19:15
virHappy
阅读(1587)
推荐(0) 编辑