自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 资源 (1)
  • 收藏
  • 关注

原创 关于memory barrier/memory ordering的笔记和总结(3)

Linux中的memory barrier                       基本的memory ordering特征原则:内核按照最relax的memory ordering(DEC Alpha)来设计,其内存模型的特点如下:对不同地址的普通内存操作会发生乱序(对同一地址的读写,由cache一致性保证)注:和ARM的内存模型不同的是:

2016-01-19 22:36:52 2203 1

原创 关于memory barrier/memory ordering 的笔记和总结(2)

Memory orderingMemory ordering用来描述系统中的processor对内存的操作如何对其它processor可见(可见的定义见前面的描述)。同时需要说明的是,大多数文献都采用reorder这个表达方式,是从执行等价的角度来描述的:比如P1上执行两个写操作WRITE(A)和WRITE(B),如果对于观察者P2来说P1|WRI

2016-01-19 22:35:35 4869 3

原创 关于memory barrier/memory ordering的笔记和总结(1)

本文是ARM和INTEL官方手册、LINUX内核文档的笔记。             谁需要关心memory ordering以下情况下,不需要关心memoryordering:如果不涉及内存的并发访问;代码完全利用信号量、自旋锁等内核原语或者高级语言提供互斥手段完成并发访问控制。典型的需要关心memoryordering

2016-01-19 22:28:36 2722 1

原创 内核的static-key机制

内核的static-key

2015-10-18 22:33:15 4341

原创 skbuff_head_cache去哪里了

在定位linux网络系统内存使用相关问题的时候,/proc/slabinfo下的"skbuff_head_cache"和"skbuff_fclone_cache"是常用的工具,但是有时候你会发现在/proc/slabinfo没有这两个条目,本文记录了其原因以及如何确认对应的sk_buffer结构的大致数量。         如何找到对应的slabinfo找不到"skbu

2015-09-01 22:33:43 3340

原创 Linux中断机制之三:中断的执行

在内核代码中,对X86平台中断执行的基本过程是: 1、 通过IDT中的中断描述符,调用common_interrupt; 2、 通过common_interrupt,调用do_IRQ,完成vector到irq_desc的转换,进入Generic interrupt layer(调用处理函数generic_handle_irq_desc); 3、 调用在中断初始化的时候,按照中断特性(le

2015-04-18 21:25:14 3597

原创 Linux中断机制之二:初始化

相关概念和关键数据结构1、 irq号:在当前系统中全局唯一,对应内核数据结构struct irq_desc,每个外设的中断有一个irq号(体系结构预留的中断,是没有对应的irq_desc结构和irq号的),该irq在该中断的生命周期内都不会改变,且和该中断的中断处理函数关联;内核使用一个bitmap allocated_irqs来标识当前系统已经分配的irq;irq号的管理与底层中断设备和配置无关

2015-04-18 21:13:52 5271

原创 Linux中断机制之一:硬件处理

最近解决一个关于Linux中断的问题,把相关机制整理了一遍,记录在此。不同的外部设备、不同的体系结构、不同的OS其中断实现机制都有差别,本文对应的OS为linux3.4版本,外部设备为PCI设备、系统为X86。概览中断让外设能够通知CPU他需要获得服务(让CPU执行指定的中断服务例程ISR)。为了达到这个目的,首先要为中断执行做好准备,完成初始化相关的操作。包括: 1、 初始化中断控制器等相关器

2015-04-18 20:44:23 6272

原创 网络协议攻击之一:基于IP分片的off path 攻击

注:本文是阅读相关文献的笔记这里描述的攻击模式都是offpath模式,攻击者只能伪造报文,没有直接截获或则修改报文的权限,可以发现,即使只能伪造,也能够达到截获的目的。IP分片的特征每个IP分片的目的IP、源IP、传输层协议类型、IP-ID组成一个四元组:接收端根据这个四元组识别出同一个报文的分片,并组装为一个完整的报文。按照协议要求,一个完

2015-01-02 10:44:54 3450

原创 TCP的URG标志和内核实现之三:接收的实现

大致的处理过程TCP的接收流程:在tcp_v4_do_rcv中的相关处理(网卡收到报文触发)中,会首先通过tcp_check_urg设置tcp_sock的urg_data为TCP_URG_NOTYET(urgent point指向的可能不是本报文,而是后续报文或者前面收到的乱序报文),并保存最新的urgent data的sequence和对于的1 BYTE urgent data到tcp_

2014-12-21 22:37:49 1849

原创 TCP的URG标志和内核实现之二:发送的实现

int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t size){ struct iovec *iov; struct tcp_sock *tp = tcp_sk(sk); struct sk_buff *skb; int iovlen, flags, err, copied;

2014-12-20 21:07:56 1725

原创 TCP的URG标志和内核实现之一:协议

定义urgent数据的目的:urgent机制,是用于通知应用层需要接收urgent data,在urgent data接收完成后,通知应用层urgent data数据接收完毕。相关协议文本RFC793 RFC1122 RFC6093哪些数据是urgent data?协议规定在TCP抱头的URG位有效的时候,通过TCP报头中的urgent pointer来标识urgent dat

2014-12-18 21:57:41 3221 1

原创 如何获取内核指定线程的调用栈

方法一:可以通过/proc/线程ID/stack来获取指定线程当前的调用栈,但是该方案存在限制:可能不能准确获取出问题的时候该线程的调用栈方法二:通过内核接口save_stack_trace_tsk和%pS,在程序检测到异常的时候打印出对应的调用栈用于问题定位,具体的方法(从内核/proc文件系统处理打印调用栈的proc_pid_stack中简单修改而来):static int kprin

2014-11-30 17:12:35 2725 1

原创 linux内核地址有效性判断方法

如果只是需要大致地判断范围,可以参考内核\linux-3.4.104\Documentation\x86\x86_64\mm.txt中的对各个段的分配的描述。但是如果需要更加精确地判断,就需要根据内核页表,一级一级地查找,查看是否存在对应的物理地址(内核态的地址不存在SWAP的问题),下面是内核代码段(针对X86-64,有修改)int kern_addr_valid(unsigned lo

2014-11-30 16:23:48 3740

原创 内核模块踩内存问题定位利器- hardware breakpoint

static void sample_hbp_handler(struct perf_event *bp,struct perf_sample_data *data,struct pt_regs *regs){printk(KERN_INFO "%s value is changed\n", ksym_name);dump_stack();printk(KERN_I

2014-11-23 20:26:22 8132

Is Parallel Programming Hard, And, If So, What Can You.pd

Is Parallel Programming Hard, And, If So, What Can You.pdf

2014-12-01

空空如也

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

TA关注的人

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