- 博客(154)
- 资源 (9)
- 收藏
- 关注
原创 vim个人配置总结
ctags1.下载:http://sourceforge.net/projects/ctags/files/ctags/5.8/ctags-5.8.tar.gz/download2.编译:./configure -prefix /usr/local/ctags 其中-prefix指定安装目录 make、make install 3.使用:ctags -R .
2015-01-06 19:10:35
1096
原创 网络子系统87_veth实现
//使用veth//1.创建两块虚拟网卡veth1、veth2,然后点对点连接,此后两块网卡的数据会互相发送到对方$ ip link add veth1 type veth peer name veth2//2.创建网络命名空间t1$ ip netns add t1//3.将veth0加入t1,此时veth0便看不到了,因为被加入到其他命名空间中了$ ip link set vet
2014-08-14 17:59:28
5486
原创 cgroup子系统5_cpuset子系统
cpuset子系统为cgroup中的任务分配独立CPU(在多核系统)和内存节点。cpuset_cgroup的cpus_allowed和mems_allowed定义了该cpuset包含的cpu和内存节点,其中进程的task_struct->cpus_allowed与进程所属cpuset的cpus_allowed保持一致,在进程分配物理页框时(alloc_pages系函数),通过cpuset_
2014-08-13 17:05:26
1586
原创 cgroup子系统4_memory子系统
memory子系统设定cgroup中任务使用的内存限制,并自动生成那些任务使用的内存资源报告。memory子系统是通过linux的resource counter机制实现的,在进程进行内存分配、释放时对进程进行charge、uncharge操作。charge操作进行点:1.分配新页框时(请求调页、copy on write),在do_falut,do_anonymous_pag
2014-08-13 15:56:08
1826
原创 cgroup子系统3_freezer子系统
freezer子系统用于挂起和恢复cgroup中的进程。freezer有一个控制文件:freezer.state,将FROZEN写入该文件,可以将cgroup中的进程挂起,将THAWED写入该文件,可以将已挂起的进程恢复。通过遍历cgroup中的进程,对其freeze或者wake_up。freeze操作通过freeze框架实现,设置进程的TIF_SIGPENDING函数(伪信号),唤醒进程,
2014-08-12 20:43:50
2496
原创 cgroup子系统2_devices子系统
devices子系统用于控制cgroup中所有进程可以访问哪些设备,通过维护黑白名单,然后在inode_permission入口点,通过devcgroup_inode_permission函数检查进程是否可以访问该设备。参考博客:1.devices子系统
2014-08-12 20:16:31
2096
1
原创 cgroup子系统1_cpu子系统
cpu子系统用于控制cgroup中所有进程可以使用的cpu时间片,通过组调度(将task_group作为调度实体)来实现。参考博客:1.cpu子系统2.Linux内核之CFS调度和组调度
2014-08-12 19:39:33
1146
原创 graph driver-device mapper-04libdevmapper基本操作
// 创建thin pool// 调用路径:NewDeviceSet->initDevmapper->createPool1.1 func createPool(poolName string, dataFile, metadataFile *os.File, poolBlockSize uint32) error { //通过task封装与libdevmapper的交互 task, er
2014-07-25 14:34:59
1934
原创 graph driver-device mapper-03thin pool基本操作
// 在thin pool中创建一个新thin device// 调用路径:driver.Create()1.1 func (devices *DeviceSet) AddDevice(hash, baseHash string) error { //查找父device baseInfo, err := devices.lookupDevice(baseHash) if err != n
2014-07-25 12:47:22
2694
原创 graph driver-device mapper-02driver基本操作
// 清除thin pool1.1 func (d *Driver) Cleanup() error { // 停止thin pool err := d.DeviceSet.Shutdown() return err}// 当加载新镜像时,添加一个新thin device// id为containerid或imageid1.2 func (d *Driver) Create(i
2014-07-25 11:19:39
1404
原创 graph driver-device mapper-01driver初始化
// thin device数据结构type DevInfo struct { Hash string `json:"-"` DeviceId int `json:"device_id"` Size uint64 `json:"size"` TransactionId uint64 `json:"tran
2014-07-25 10:23:07
2949
原创 fork与exit、_exit的配合使用
#include "light.h"int main(int argc, char *argv[]){ printf("Hello world\n"); write(STDOUT_FILENO, "Ciao\n", 5); if (fork() == -1) errExit("fork"); /* Both child and parent c
2014-03-07 10:06:11
2325
原创 clock_nanosleep避免过度睡眠
/* * “oversleeping” problem is particularly marked for a process that uses a loop to re start * a sleep that is interrupted by a signal handler. If signals are delivered at a high rate * , th
2014-03-06 19:43:02
8274
1
原创 网络子系统86_inet协议族-l4向下(一)
// l4数据向下l3传递// 步骤:// 1.如果sock->sk_write_queue为空,初始化corking// 1.1 corking信息用于帮助ip层对数据进行分片1.1 int ip_append_data(struct sock *sk, struct flowi4 *fl4, int getfrag(void *from, char *to, int o
2014-02-28 22:13:47
1845
原创 网络子系统85_inet协议族-l3向上
// ip数据报向本地传递// 调用路径:ip_rcv->dst_input->...->ip_local_deliver1.1 int ip_local_deliver(struct sk_buff *skb){ //如果ip数据报被分片,则重组 if (ip_is_fragment(ip_hdr(skb))) { if (ip_defrag(skb, IP_DEFRAG_LOCA
2014-02-28 11:41:23
1558
原创 网络子系统84_sock事件通知进程
// socket初始化// 调用路径:inet_create->sock_init_data1.1 void sock_init_data(struct socket *sock, struct sock *sk){ ... //sock状态改变的回调函数,当sock的状态变迁(如从established到close_wait)就会调用这个函数 sk->sk_state_change
2014-02-28 11:02:07
2078
原创 网络子系统83_inet协议族-SOCK_RAW(四)
// raw sock数据就绪函数// raw sock在raw_recvmsg中阻塞,在raw_local_deliver通过sock->sk_data_ready通知输入数据就绪// 步骤:// 1.过滤感兴趣的事件// 2.唤醒阻塞进程,并将进程从wq上取下1.1 static int receiver_wake_function(wait_queue_t *wait, un
2014-02-28 10:00:43
1432
原创 网络子系统82_inet协议族-SOCK_RAW(三)
// 向raw sock传递skb// 步骤:// 1.根据协议号获取监听指定protocol的sock// 2.向raw sock传递skb1.1 int raw_local_deliver(struct sk_buff *skb, int protocol){ int hash; struct sock *raw_sk; //获取监听指定协议的raw sock hash
2014-02-27 21:36:40
1499
原创 网络子系统81_inet协议族-SOCK_RAW(二)
// struct sock->sk_prot字段// struct proto为插口层到传输层的接口4.1 struct proto raw_prot = { .name = "RAW", .owner = THIS_MODULE, .close = raw_close, .destroy = raw_destroy, .connect = i
2014-02-27 17:00:10
2036
原创 网络子系统80_inet协议族-SOCK_RAW(一)
// SOCK_RAW1.1 static struct inet_protosw inetsw_array[] ={ ... { .type = SOCK_RAW, .protocol = IPPROTO_IP, /* 通配符 */ .prot = &raw_prot, /* Networking protoco
2014-02-27 16:58:35
3056
原创 网络子系统79_inet协议族
// inet协议族默认支持的协议类型// 在inet_init中,通过inet_register_protosw注册到inetsw邻接表1.1 static struct inet_protosw inetsw_array[] ={ //流类型 { .type = SOCK_STREAM, .protocol = IPPROTO_TCP, .prot =
2014-02-27 10:36:09
1545
原创 网络子系统78_inet套接字创建
// inet协议族控制块// 1.在inet_init中,由sock_register(&inet_family_ops)注册给系统// 2.在sys_socket系统调用中,通过协议族号查找对应的协议控制块,然后由// 具体协议控制块的create函数创建套接字1.1 static const struct net_proto_family inet_family_ops
2014-02-27 10:07:40
1328
原创 网络子系统77_套接字接收
// accept系统调用// 步骤:// 1.由内核公共部分创建一个新套接字描述符,并分配其对应的文件描述符// 2.新套接字使用accept之上的套接字相同的套接字类型和操作// 3.交由具体协议完成accept// 4.如果accept调用者要求返回peer地址,通过新套接字获取地址,并复制到用户地址空间// 5.将新套接字的文件描述安装到调用者的进程控制块,返回新套接
2014-02-26 11:25:02
1352
原创 网络子系统76_套接字绑定
// 绑定套接字到地址// 步骤:// 1.根据用户空间的文件描述符查找socket描述符// 2.复制地址信息到内核空间// 3.由具体的协议族完成绑定1.1 SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen){ struct socket *sock; struct
2014-02-26 11:05:25
1109
原创 网络子系统75_套接字创建
// 创建套接字,系统调用sys_socket// 步骤:// 1.分配套接字描述符// 2.创建套接字对应的文件描述符// 参数: // 协议族: 对于TCP/IP协议族,该参数为AF_INET// 套接字类型:流套接字类型为SOCK_STREAM, 数据报套接字类型为SOCK_DGRAM// 通信协议: 单个协议系列中的不同传输协议,在internet通信域中,此
2014-02-26 10:44:45
1121
原创 内存子系统1_分配接口
1.页 struct page; 内核把物理页作为内存管理的基本单位;内存管理单元(MMU)把虚拟地址转换为物理地址,通常以页为单位进行处理。MMU以页大小为单位来管理系统中的也表。 内核struct page管理系统中所有的页.2.区 struct zone; Linux将内核空间地址划分为三个区:ZONE_DMA、ZONE_NORMAL和ZONE_HIG
2014-02-10 17:03:23
1240
原创 Linux驱动4_NETFILTER
#include #include #include #include #include #include #include #include #include #include // hook函数static unsigned int hook_func(unsigned int hooknum, struct sk_buff * sk
2014-01-14 17:30:28
1067
原创 Linux驱动3_总线设备(二)
#include #include #include "simple.h"// 在虚拟总线simple bus上边添加一个设备,并添加其驱动int probe (struct simple_device *dev){ printk(KERN_ALERT "simple_device probe.\n"); return 0;}// simple bus上的设备struct
2014-01-08 15:14:34
1041
原创 Linux驱动2_总线设备(一)
// 参考 Linux设备驱动程序(lld3)// 实现一个简单的虚拟总线 simple bus// simple_bus_type为总线类型// simple_bus为总线设备// // simple.c 实现#include "simple.h"// 增加设备引用计数static struct simple_device *simple_dev_get(struct
2014-01-07 22:05:12
1207
原创 调度子系统8_负载均衡(五)
// 计算group在给定domain中的imbalance// 调用路径:find_busiest_group->calculate_imbalance// 函数参数:// sds:sched domain的统计信息// this_cpu:当前正在运行load balance的cpu// imbalance:保存imbalance值// 函数任务:// 1.计算最忙grou
2013-12-23 22:02:14
1826
原创 调度子系统7_负载均衡(四)
// 寻找sched domain中最忙的group// 函数参数:// sd:待查找的sched domain// this_cpu:当前正在对其执行负载均衡的cpu// imbalance:为达到平衡需要移动的权重// idle:this_cpu当前的状态// sd_idle: sd空闲状态// cpus:可作为源cpu的集合// balance:指示this_c
2013-12-19 22:19:58
2505
原创 调度子系统6_负载均衡(三)
// 负载均衡// 在sched_domain中进行负载均衡,检查是否可以通过最繁忙的组中迁移一些进程到本cpu// 函数参数:// this_cpu, 其上执行负载均衡的cpu// this_rq, 其上执行负载均衡的rq// sd, 其上执行负载均衡的sched domain// idle, this_cpu的状态// CPU_SCHED_IDLE,this_cpu
2013-12-18 16:15:41
1612
原创 调度子系统4_负载均衡(一)
// 参考:http://blog.youkuaiyun.com/dog250/article/details/5303561// 负载均衡// 当rq->next_balance到时,触发负载均衡 // 调用路径:scheduler_tick->trigger_load_balance// 注:// nohz.cpu_mask中的cpu表示停用了周期时钟// 函数任务:// 1.如果进
2013-12-11 22:09:41
2364
原创 调度子系统3_周期调度器
// 周期调度器// 调用路径:update_process_times->scheduler_tick// 函数任务:// 1.更新rq的clock// 2.更新队列负载// 3.通知调度器类更新进程运行时间// 4.更新下一次load balance的时间戳// 5.触发load balance1.1 void scheduler_tick(void){ int
2013-12-11 17:18:32
1315
原创 调度子系统2_核心调度器
// 核心调度器// 当进程决定让出cpu时调用// 函数任务:// 1.禁止内核抢占// 2.获取本cpu的rq// 3.取消为当前进程运行的hrtimer// 4.获取队列锁// 5.更新队列时钟// 6.清除当前进程need resched标志// 7.如果当前进程为非运行状态,并且当前非内核抢占路径// 7.1 如果当前进程有信号待处理,设置当前进程
2013-12-10 20:04:09
1494
转载 最牛B的编码套路
转自:http://blog.youkuaiyun.com/happydeer/article/details/17023229同样感谢我家帅帅推荐的这篇文章,同与译者共勉^-^最近,我大量阅读了Steve Yegge的文章。其中有一篇叫“Practicing Programming”(练习编程),写成于2005年,读后令我惊讶不已:与你所相信的恰恰相反,单纯地每天埋头于工作并不能算是
2013-12-05 17:09:52
1073
原创 调度子系统1_调度子系统初始化
unsigned int sysctl_sched_rt_period = 1000000;int sysctl_sched_rt_runtime = 950000;// 参考:// SMP负载均衡// http://soft.chinabyte.com/os/22/12359522.shtml// linux组调度浅析// http://hi.baidu.com/_kouu
2013-11-29 19:55:09
2623
1
原创 时间子系统17_hard lockup机制
// 使能hard lockup探测// 调用路径:watchdog_enable->watchdog_nmi_enable// 函数任务:// 1.初始化hard lockup检测事件// 2.hard lockup阈值为10s// 2.向performance monitoring子系统注册hard lockup检测事件// 3.使能hard lockup检测事件//
2013-11-28 14:38:48
2995
IA32&64 Architecture Programmer’s Manual Vol1-3
2013-11-07
An Extended Set of Haar-like Features for Rapid Object Detection
2013-10-28
Rapid Object Detection using a Boosted Cascade of Simple Features
2013-10-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人