
Linux
文章平均质量分 84
xianjian_x
kxapiss@163.com
展开
-
线程终止资源清理方式
Posix线程终止的两种情况线程终止时的清理线程终止的同步及其返回值关于pthread_exit 和return1.Posix线程终止的两种情况。 包括正常终止和非正常终止。线程主动调用pthread_exit 或者从线程函数中return都将使线程正常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下 pthread_cancel ,或者由于自身运行出错(比如访问非法地址)而转载 2015-08-18 18:21:02 · 3205 阅读 · 0 评论 -
gcc 优化细节
GCC优化概述GCC有很多优化选项,一般包括O1,O2, O3,Os,Og等。一般很容易通过在线手册找到对应gcc版本的上述优化选项的细节。除了开启一些选项之外,GCC的优化也设置一些parmas。例如gcc-4.6.1的优化选项细节可以从下面的网站获得:http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Optimize-Optio转载 2015-08-07 19:06:15 · 4298 阅读 · 0 评论 -
一个 pthread_cancel 引起的线程死锁
这篇文章主要从一个 Linux 下一个 pthread_cancel 函数引起的多线程死锁小例子出发来说明 Linux 系统对 POSIX 线程取消点的实现方式,以及如何避免因此产生的线程死锁。一个 pthread_cancel 引起的线程死锁小例子取消点Cancellation Point取消类型Cancellation TypeLinux 的取消点实现对示例函数进入死锁的解释如何避免因转载 2015-08-28 16:27:23 · 2506 阅读 · 0 评论 -
一个Linux下C线程池的实现
什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。 下面是Linux系统下用C语言创建的一个线程池。线程池会维护一个任务链表(每个CThread_worker结构就是一个任务)。转载 2014-03-03 11:28:36 · 1580 阅读 · 0 评论 -
Linux 64位系统下 inet_ntoa 报段错误问题
Linux 64位系统下inet_ntoa函数报段错误, 测试环境: Redhat 5.4 enterprise 代码如下#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>int main(int argc, char *argv[]){ struct sockaddr_in addr; add转载 2016-09-21 14:06:08 · 1383 阅读 · 0 评论 -
基于arm的C++反汇编 基本数据类型
基本数据类型Cpp中的引用常量常量的定义基本数据类型 反汇编一个基本的知识点就是掌握数据类型,包括整形和浮点类型在内存中是如何存放的,这里要知道原码,反码,补码,以及IEEE浮点标准,这部分与处理器架构无关,《C++反汇编与逆向分析技术揭秘》 第二章已经有详细讲解,这里略过。 在此推荐下我曾经写过的一个进制转换的工具 来学习数据类型 。 Cpp中的引用原创 2016-05-20 17:42:22 · 2306 阅读 · 1 评论 -
基于arm的C++反汇编 qemu-arm环境搭建
看雪高手写了在windows 上基于x86架构的 C++ 反汇编分析,但是没有人弄过在linux下基于arm架构的C++反汇编教程,这里尝试分析下,可以看到不管在win下还是linux下,不管基于x86还是基于arm 都遵循同样的C++标准,内存布局都是一样的。 首先第一步搭建环境,为了方便这里不再从头编译而是使用网络上现成的二进制工具,参考Architectures/ARM/HowToQemu1原创 2016-05-20 13:35:55 · 2156 阅读 · 0 评论 -
基于arm的C++反汇编 结构体和类
在C++中,结构体和类都具有构造函数、析构函数和成员函数,两者只有一个区別:结构体的访问控制默认为public,而类的默认访问控制是private。对于C++中的结构体而言, public, private、protected的访问控制都是在编译期进行检査,当越权访问时,编译过程中会检査出此类错误并给予提示。编译成功后,程序在执行的过程中不会在访问控制方面做任 何检査和限制。因此,在反汇编中,C++原创 2016-05-25 21:26:01 · 1968 阅读 · 0 评论 -
基于arm的C++反汇编 数组和指针的寻址
数组在函数内数组作为参数数组作为返回值下标寻址和指针寻址下标值为整型常量的寻址下标值为整型变量的寻址下标值为整型表达式的寻址数组越界多维数组存放指针类型数据的数组指向数组的指针变量 虽然数组和指针都是针对地址操作,但它们有许多不同之处。数组是相同数据类型的数 据集合,以线性方式连续存储在内存中;而指针只是一个保存地址值的4字节变量。在使用中,数组名是一个地址常量值,保存数组首元原创 2016-05-24 10:37:22 · 6470 阅读 · 0 评论 -
基于arm的C++反汇编 函数的工作原理
栈帧的形成和关闭各种调用方式的考擦使用 fp或sp寻址函数的参数 与返回值arm指令中立即数存放位置gdbserver 调试环境栈帧的形成和关闭栈在内存中是一块特殊的存储空同, 它的存储原则是“先进后出”, 即最先被存储的数据最后被释放, 汇编过程通常使用 push 指令与 POP指令对栈空间执行数据压入和数据弹出操作。栈结构在内存中占用一段连续的存储空间, 通过sp与 fp这两个栈指针寄原创 2016-05-23 19:04:14 · 7547 阅读 · 0 评论 -
Linux framebuffer显示bmp图片
帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。 framebuffer是LCD对应的一种HAL(硬件抽象层),提供抽象的,统一的接口操作,用户不必关心硬件层是怎么实施的。这些都是由Framebuffer设备驱动来完成的。 帧缓冲设备对应的设备文件为/dev/fb*,如果系统有多个显示卡,原创 2015-11-23 12:35:13 · 12643 阅读 · 3 评论 -
linux 常用命令 整理
grep 命令过滤不需要内容 -v不显示错误信息忽略大小写mount 命令列出已经挂载的文件系统信息挂载分区1 .grep 命令过滤不需要内容 -v grep 最常用的就是过滤需要的内容,但有时候想过滤自己不需要的内容可以用 -v 选项: 比如说用 |xargs grep contenta 过滤得到了很多内容,但是也有很多是自己不需要的(不需要的包含了contentb) 可以再原创 2015-10-08 17:17:01 · 1290 阅读 · 0 评论 -
git 使用(ssh key创建和github使用)
git 配置,创建密钥,并与远端repo协作。原创 2013-02-01 18:18:18 · 44683 阅读 · 2 评论 -
cgroup--cgroup 测试
cgroups全称control groups,在RHEL6的2.6.32内核中已经包括了cgroup的patch。这里强烈建议安装RHEL6(CentOS6)来使用cgroups,如果没有的话,只能升级内核了 ( > 2.6.26版本) 安装cgroupsapt-get install cgroup-bin 改变配置:vi /etc/cgconfig.conf原创 2013-09-30 15:46:54 · 3500 阅读 · 0 评论 -
cgroup--blkio子系统测试-1(throttle测试)
1 限制块设备读速率:首先内核配置必须要满足如下要求:- Enable Block IO controller CONFIG_BLK_CGROUP=y- Enable throttling in block layer CONFIG_BLK_DEV_THROTTLING=y这个可以从/boot 目录下的 config-xxx 文件确定。原创 2013-09-30 15:36:45 · 7885 阅读 · 6 评论 -
cgroup--device测试
The devices subsystem allows or denies access to devices by tasks in a cgroup.devices.allow specifies devices to which tasks in a cgroup have access. Each entry has four fields:type,major, min原创 2013-09-30 15:26:15 · 2206 阅读 · 1 评论 -
cgroup--freezer测试
The freezer subsystem suspends or resumes tasks in a cgroup. freezer.state freezer.state has three possible values: FROZEN — tasks in the cgroup are suspended.原创 2013-09-30 15:21:59 · 3542 阅读 · 0 评论 -
cgroup--内存 限制内存测试
进入内存目录:root@ubuntu:/sys/fs/cgroup# cd memory/root@ubuntu:/sys/fs/cgroup/memory#设置内存上限:root@ubuntu:/sys/fs/cgroup/memory/test# echo 400M > memory.limit_in_bytes root@ubuntu:/sys/fs/cgroup/m原创 2013-09-30 15:17:38 · 6290 阅读 · 2 评论 -
cgroup--cpu spuset 子系统功能测试
1. 测试目的 目前最新的稳定版Linux内核(3.2.6)中cgroup的功能和特性都已经比较丰富和完善,用户空间的工具也有了。Cgroup中对于CPU资源的控制主要集中cpu和cpuset这两个子系统,其中cpu子系统主要用来控制进程调度,设置进程占用CPU资源的比重;cpuset则主要是控制进程能够使用哪些CPU和内存节点(NUMA)。测试的目的主要是对 cg原创 2013-09-30 15:41:53 · 5950 阅读 · 0 评论 -
cgroup--blkio子系统测试-2(配合fio 做weight测试)
前面测试了 blkio 的throttle部分,本文测试 blkio 的 weight,也就是每个进程能使用的IOPS的能力的比例,必须通过CFQ调度器来实现。fio是一个测试 IOPS 的好工具,因此这里用fio 配合 cgroup 测试存储设备IOPS的分配。要使用blkio的weight限制需要注意几个事情:1. 必须走directio, 如果buffered io因原创 2013-09-30 15:29:07 · 5045 阅读 · 1 评论 -
gcc编译器各种warning 解决方式
gcc 各种 warning 的解决方式原创 2013-05-06 16:24:31 · 12582 阅读 · 0 评论 -
PCI热插拔
1在guest linux加载驱动模块: 一般pci热插拔需要两个内核模块: acpiphp.ko 和 pci_hotplug.ko pci_hotplug.ko 已经被编译进内核文件中,不需要再手动加载。(可以通过/boot/目录下的config 文件来判断是否已经编译进内核)打开 /etc/modules 文件,在里面输入 acpiphp.即可在再次启动的时候加载 ac翻译 2014-07-26 09:39:56 · 5913 阅读 · 0 评论 -
在64位linux下编译32位程序
一般情况下我们最好是在一个平台上编译本平台的二进制程序,比如在32位平台上编译32位程序而在64位平台上编译64位程序。 现在64位的系统(这里主要指x86_64系统,包括AMD64和Intel的EM64T)已经开始广泛的使用起来了,甚至于你现在要是想买32位的Xeon根本就没有。64位的系统在性能和处理能力上相对32位系统也都有很大的提高。所以现在很多用户已经选择使用64位的系统了。原创 2014-07-22 17:25:39 · 36816 阅读 · 2 评论 -
Linux CPU affinity
一.CPU affinity linux中将某个进程或者线程绑定到特定的一个或者多个cpu上执行。 二.为什么需要CPU affinity cache性能的提升,多个进程不断交替地在某个cpu上执行,导致缓存无效。 多线程程序运行于某个cpu,每个线程轮流占据cpu资源,共享cache,导致cache性能下降。 专有程序的实时性,当把专有进程原创 2013-01-25 20:25:02 · 4283 阅读 · 5 评论