Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

Linux socket设置mark的必要性

Linux socket设置mark的必要性

Linux的Netfilter钩子点的位置会导致一些奇怪的问题,比如本机发出的包无法使用基于mark的策略路由,这是因为mark一般是在Netfilter中进行的,而Linux的路由处在OUTPUT钩子点之前,因此这是一个顺序倒置的问题,如何来解决呢?只能在路由之前打上mark,而我们知道,对于外部进入的包,mark是在PREROUTING进行的,因此对于外部进入的包,策略路由是好使的,对于本机发出的包,路由之前只能是socket层了,那为何不能在传输层做...
窥视Linux内核的行为的一些方法

窥视Linux内核的行为的一些方法

想了解Linux内核的行为,需要一定的偷窥经验,大致可以分为以下几个:1.使用printk直接在内核代码或者模块代码的你想偷窥的地方printk一些信息。这种方式需要你会编译内核代码以及编译内核模块,以及将其正确安装进内核并启动之。虽然需要这么多知识,然而这种方式是比较土的。除非万不得已,一定有比这更加简单的方法。2.查看dmesg这种方式取决于内核会输出哪些信息。dmesg显示的信息一般都是比较重要的信息。3.精通procfsprocfs中含有大量有用并...
Ubuntu下使用GDB断点Go程序

Ubuntu下使用GDB断点Go程序

大家好,今天为大家带来Ubuntu下,使用GDB断点调试Go程序。由于之前没有接触过GDB调试,而Go语言本身内置也没有什么调试工具,不像Eralng,有Debugger可以使用,我从网上搜索了下,也没有相关的中文教程,所以这边自己研究了下,给新手带来一篇关于GDB简单调试Go程序的文章。(关于GDB的文章还是不少的) 首先,编写测试代码,如下:package mainimport ( "fmt")func main() { fmt.Printf("%s...
Linux Slab分配器(一)--概述

Linux Slab分配器(一)--概述

slab分配器是Linux内存管理中非常重要和复杂的一部分,其工作是针对一些经常分配并释放的对象,如进程描述符等,这些对象的大小一般比较小,如果直接采用伙伴系统来进行分配和释放,不仅会造成大量的内碎片,而且处理速度也太慢。而slab分配器是基于对象进行管理的,相同类型的对象归为一类(如进程描述符就是一类),每当要申请这样一个对象,slab分配器就从一个slab列表中分配一个这样大小的单元出去,而当要释放时,将其重新保存在该列表中,而不是直接返回给伙伴系统。...
Linux Slab分配器(二)--初始化

Linux Slab分配器(二)--初始化

在前文中介绍了slab所涉及到的数据结构, slab分配器的初始化工作都是围绕这些数据结构来展开的,主要是针对以下两个问题:1.创建kmem_cache高速缓存用来存储所有的cache描述符2.创建array_cache和kmem_list3高速缓存用来存储slab数据结构中的这两个关键结构这里明显有点自相矛盾,那就是slab管理器尚未建立起来,又如何靠slab分配高速缓存来给这些结构分配空间呢?解决第一个问题的方法是直接静态定义一个名为cache_cac...
Android开发之Animation 4种动画效果

Android开发之Animation 4种动画效果

Animation是Android的动画效果的组件,可以实现绚丽的翻页、ListView和GridView的展示。 这blog简单介绍一下4种动画效果方式:1. AlphaAnimation 控制渐变透明的动画效果 如图:2. ScaleAnimation 控制尺寸伸缩的动画效果 如图:3. TranslateAnimation控制画面平移的动画效果 如图:4. RotateAnimation控制画面角度变化的动画效果 如图:具体的使用方法,直接上代码。注...
Linux网络内核数据帧的接收过程:数据链路层(概念篇)

Linux网络内核数据帧的接收过程:数据链路层(概念篇)

处理链路层(L2)的函数是由中断事件驱动的。硬件会使用中断事件通知CPU,该帧已经可用了。接收中断事件的CPU会执行do_IRQ函数。IRQ编号引发正确的中断处理函数被启用。此处理函数通常是设备驱动程序在设备驱动程序初始化期间所注册的函数。IRQ函数处理函数会在中断模式下执行,即后续的中断事件都会暂时被关闭。中断处理函数会执行一些立即性的任务,然后把其他任务安排到下半部函数中以便在稍后执行,明确地讲,中断处理函数会1、 把帧拷贝到sk_buff数据结构中。...
《深入Linux内核架构》笔记:(N)UMA模型中的内存组织

《深入Linux内核架构》笔记:(N)UMA模型中的内存组织

1.概述 在Linux中,内核对一致和非一致内存访问系统使用相同的数据结构,因此针对各种不同形式的内存布局,各个算法几乎没有什么差别。在UMA系统上,只使用一个NUMA结点来管理整个系统内存。 首先内在划分为结点。每个结点关联到系统中的一个处理器,在内核中表示为pg_data_t的结构。深入Linux内核架构 pdf版下载见 http://www.linuxidc.com/Linux/2012-06/62984.htm 各个结点又划分为内存域,是内存的进一...
C#多线程通信之委托(事件)

C#多线程通信之委托(事件)

在研究C# 线程之间通信时,发现传统的方法大概有三种①全局变量,由于同一进程下的多个进程之间共享数据空间,所以使用全局变量是最简单的方法,但要记住使用volatile进行限制。②线程之间发送消息(这个随后文章中会讨论到)。③CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步,这个主要是实现线程直接同步的一种方法。本文介绍的一种方法是这三种之外的一种方法,本文中实例是通过创建一个线程类,通过委托事件把值传送...
Android 动态库死机调试方法

Android 动态库死机调试方法

这两种方法都不是我发明了,都是网上一些高手公共出来的调试方法,无奈找不到出处的地方了,所以就在此总结一下,以方便Android下的调试:简要说明:android系统中调试Java非常容易,一般遇到错误都在logcat中打印出错时函数的调用关系,而C库中出错时只看到一些二进制信息,使用gdbserver调试环境搭建又比较复杂。方法一:下在介绍一个简单的调试库的方法,当然需要有so库的源代码举例a) 错误信息如下,它表示了出错时的函数调用关系(下面调上面的)I...
Android- NDK编译APK中native死机调试

Android- NDK编译APK中native死机调试

以前在服务器编译Android源码在盒子上运行死机,可通过文章: android 动态库死机调试方法 ,我们这里说的是利用eclipse+NDK编译apk的native代码如何调试 http://www.linuxidc.com/Linux/2012-06/63026.htm众所周知,调试android java程序可以直接在eclipse上进行单步调试,但是调试android jni函数却无法进行单步跟踪而只能加打印进行调试,这样子效率将会大大降低。而程...
Ubuntu 11.10 下移植 madplay 到 mini2440

Ubuntu 11.10 下移植 madplay 到 mini2440

今天为了学习移植madplay 花了半天时间,多亏了有丰富的网络资源才让我在一个又一个问题中得到解决的方法。逛街回来后,马上在Ubuntu 11.10 下进行madplay 对mini2440的移植,由于有了早上移植madplay的经验之后,晚上的移植工作做得还是比较顺手。1、解压源代码包# cd tarball# for f in $(ls *.tar.gz); do tar -zxvf $f –C ../src-arm; done2、编译madplay...
<< 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 >>