linux
文章平均质量分 70
yang_chen_shi_wo
这个作者很懒,什么都没留下…
展开
-
VxWorks的环形缓冲区和linux的环形缓冲区的区别
在VxWorks中,环形缓冲区使用一个数组实现,其大小比我们预申请的大小大1,这个字节永远都是空出来的,也就是缓冲区不会满。当只有一个字节的时候就写不下了。所以在写操作的时候,不会存在写指针和读指针相等的问题。也就是写操作和读操作不会冲突。读操作是正常的读,无论是读还是写,我们要注意读写指针越界要取余的情况,也就是当越界的时候要分片段写。VxWorks中的环形缓冲区不像linux那样,li原创 2015-06-17 09:30:26 · 2425 阅读 · 0 评论 -
unix/linux下线程私有数据实现原理及使用方法
原文地址:点击打开链接复习以前做过的爬虫系统,在做防止死链时用到了线程的私有数据,那时候仅仅是会用,至于底层是怎么实现的以及为什么一个键可以对应不同线程的指还一知半解,今天又详细的看了下相关的资料,以做总结。 在维护每个线程的私有数据的时候,我们可能会想到分配一个保存线程数据的数组,用线程的ID作为数组的索引来实现访问,但是有一个问题是系统生成的线程ID不能保证是一个小而转载 2015-08-19 17:56:23 · 342 阅读 · 0 评论 -
线程私有数据
原文地址:http://blog.chinaunix.net/uid-8917757-id-2450452.html1.为什么需要线程私有数据:原因一:有时候需要维护基于每个线程的数据,用线程ID作为索引。因为线程ID不能保证是小而连续的整数,所以不能简单的分配一个线程数据数组,用线程ID作为数组的索引。即使线程ID确实是小而连续的整数,可能还希望有一些额外的保护,以防止某个线程的数据和其转载 2015-08-19 16:57:38 · 420 阅读 · 0 评论 -
《UNIX环境高级编程》笔记--线程的取消选项
原文地址:点击打开链接有两个线程并没有包含在pthread_attr_t机构中,他们是可取消状态和可取消类型,这两个属性影响着线程在响应pthread_cancel函数调用时所呈现的行为。可取消状态属性可以是PTHREAD_CANCEL_ENABLE和PTHREAD_CANCEL_DISABLE,线程可以通过调用pthread_setcancelstate修改它的可转载 2015-08-19 18:48:33 · 392 阅读 · 0 评论 -
gdb调试命令
原文地址:http://blog.chinaunix.net/uid-9525959-id-2001805.html本文介绍使用gdb调试程序的常用命令。 主要内容: [简介] [举例] [其他] [简介] ============= GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在转载 2015-08-19 15:05:44 · 346 阅读 · 0 评论 -
linux进程间同步和共享内存
进程之间上锁:文件记录锁(用于同步进程对文件的访问,这个锁可以设置为阻塞的,进而也可以用作进程间同步手段),进程间通信的信号量,线程间通信的互斥锁变量放在所有进程的共享内存区,设置属性为shared。线程的互斥锁变量时间最快,然后是信号量,文件记录锁最慢。虽然记录锁要比信号量锁慢,但如果只需要锁一个资源(例如共享存储段)并且不需要信号量锁的花哨功能,则宁可使用记录锁。因为简单,且进程终止时系统会处原创 2015-08-20 14:43:36 · 1296 阅读 · 0 评论 -
Netfilter
原文地址:点击打开链接一、概述1. Netfilter/IPTables框架简介 Netfilter/IPTables是继2.0.x的IPfwadm、2.2.x的IPchains之后,新一代的Linux防火墙机制。Netfilter采用模块化设计,具有良好的可扩充性。其重要工具模块IPTables连接到Netfilter的架构中,并允许使用者对数据报进行过转载 2015-08-20 15:34:24 · 374 阅读 · 0 评论 -
《UNIX环境高级编程》笔记--XSI IPC
原文地址:点击打开链接1.XSI IPC有三种IPC我们称作XSI IPC,即消息队列,信号量和共享存储器,他们之间有很多相似之处。1.1.标识符和键每个内核中的IPC结构(消息队列,信号量或共享存储段)都用一个非负整数的标识符加以引用。标识符是IPC对象的内部名,为使多个合作进程能够在同一IPC对象上回合。需要提供一个外部名方案。为此使用了键(key),每个IPC对象都与转载 2015-08-19 22:10:31 · 468 阅读 · 0 评论 -
linux内存管理算法 :伙伴算法和slab
伙伴分配器的一个极简实现原文地址:http://coolshell.cn/articles/10427.html提起buddy system相信很多人不会陌生,它是一种经典的内存分配算法,大名鼎鼎的Linux底层的内存管理用的就是它。这里不探讨内核这么复杂实现,而仅仅是将该算法抽象提取出来,同时给出一份及其简洁的源码实现,以便定制扩展。伙伴分配的实质就是一种特殊的“转载 2015-07-23 16:26:46 · 6648 阅读 · 1 评论 -
linux异步IO浅析(转)
原文:http://hi.baidu.com/_kouu/blog/item/e225f67b337841f42f73b341.html知 道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上。预先知道这些数 据的位置,所以预先发起异步IO读请求。等到真正需要用到这些数据的时候,再等待异步IO完成。使用了异转载 2015-12-12 11:27:28 · 596 阅读 · 0 评论 -
Linux 内核 虚拟地址 物理地址 转换
内核从3G开始的那一段是连续映射而且这种固定映射最大到896M的地址范围,也即从0xc0000000-0xf7ffffff的虚拟地址采用固定映射,称为内核逻辑地址.剩下的1G-896=128M范围的虚拟地址可以映射到任意物理地址.称为内核虚拟地址.当实际内存大于1G时(实际上是> 896M时),用这块地址空间做映射.实际的计算机体系结构有硬件的制约,这限制了页框可以使用的方式。尤其转载 2015-12-12 15:10:02 · 4321 阅读 · 0 评论 -
Unix环境编程常用头文件
1.1. primitive system data types(包含很多类型重定义,如pid_t、int8_t等)1.2. //与套接字相关的函数声明和结构体定义,如socket()、bind()、connect()及struct sockaddr的定义等 int setsockopt(int s,int level,int opt转载 2015-11-29 20:06:55 · 1690 阅读 · 0 评论 -
Linux IPC接口学习
UNIX/Linux进程间通信IPC系列(一)总论UNIX/Linux进程间通信IPC系列(二)管道转载 2015-12-07 17:47:44 · 705 阅读 · 0 评论 -
SIGPIPE导致进程终止
当服务器close一个连接时,若client端接着发数据。根据TCP 协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。若不想客户端退出可以把SIGPIPE设转载 2016-04-25 18:11:09 · 377 阅读 · 0 评论 -
makefile学习
jj原创 2016-04-11 11:46:04 · 300 阅读 · 0 评论 -
异步I/O
本节将探索 Linux 的异步 I/O 模型,从而帮助我们理解如何在应用程序中使用这种技术。在传统的 I/O 模型中,有一个使用惟一句柄标识的 I/O 通道。在 UNIX® 中,这些句柄是文件描述符(这对等同于文件、管道、套接字等等)。在阻塞 I/O 中,我们发起了一次传输操作,当传输操作完成或发生错误时,系统调用就会返回。在异步非阻塞 I/O 中,我们可以同时发起多个传输操作。这需要转载 2016-04-29 14:02:15 · 278 阅读 · 0 评论 -
Posix timers clock_gettime 分析
原文地址:点击打开链接int clock_getres(clockid_t clk_id, struct timespec *res)这个函数就是根据 clk_id 返回相应的 time:CLOCK_REALTIME real_time clock 系统绝对时间CLOCK_MONOTONIC 单调时间关于这个函数更详细的介绍请参考 man 手册转载 2016-08-22 10:44:33 · 2388 阅读 · 1 评论 -
Linux 时间
首先要说明的是我的系统是fedora,其他系统可能不完全相同。1,时间保存在硬件实时钟(RTC)中,RTC由主板电池供电,即使关断电源也不会造成时间丢失。2,系统启动时从RTC获取时间,这个步骤在rc.sysinit中做:a,首先从/etc/sysconfig/clock中获取RTC相关参数UTC/ARC/SRM。UTC为true表示RTC保存的时间是UTC时间,false表示保存的是转载 2016-08-22 10:36:18 · 479 阅读 · 0 评论 -
linux下检查内存泄露的工具--mtrace
原文地址:http://blog.csdn.net/sunnydogzhou/article/details/6532436最令linux程序员头疼的莫过于内存泄露了,即使你是在优秀的程序员,你也不能保证所以的malloc操作都有对应的free,那必要的工具就是必不可少的了。在一般的linux发行版中,有一个自带的工具可以很方便的替你完成这些事,这个工具就是mtrace。转载 2015-08-19 11:10:07 · 712 阅读 · 1 评论 -
select、poll、epoll之间的区别总结[整理]
原文地址:http://www.cnblogs.com/Anker/p/3265058.htmlselect,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就转载 2015-08-03 09:38:07 · 239 阅读 · 0 评论 -
DMA
转载来源:http://blog.csdn.net/absurdDMA控制器硬件结构DMA允许外围设备和主内存之间直接传输 I/O 数据, DMA 依赖于系统。每一种体系结构DMA传输不同,编程接口也不同。数据传输可以以两种方式触发:一种软件请求数据,另一种由硬件异步传输。在第一种情况下,调用的步骤可以概括如下(以read为例):(1)在进程转载 2015-06-15 21:23:28 · 486 阅读 · 0 评论 -
无锁环形缓冲区的详细解释
由以下博客的分析可以知道,内核的kfifo使用了很多技巧以实现其高效性。比如,通过限定写入的数据不能溢出和内存屏障实现在单进程写单进程读的情况下不使用锁。因为锁是使用在共享资源可能存在冲突的情况下。还用设置buffer缓冲区的大小为2的幂次方,以简化求模运算。通过使用unsigned int为kfifo的下标,可以不用考虑每次下标超过size时对下表进行取模运算赋值,这里使用到了无符号整数的溢出回转载 2015-05-31 08:23:23 · 8311 阅读 · 1 评论 -
linux新的API signalfd、timerfd、eventfd使用说明
三种新的fd加入linux内核的的版本:signalfd:2.6.22timerfd:2.6.25eventfd:2.6.22三种fd的意义:signalfd:传统的处理信号的方式是注册信号处理函数;由于信号是异步发生的,要解决数据的并发访问,可重入问题。signalfd可以将信号抽象为一个文件描述符,当有信号发生时可以对其read,这样可以将信号的监听放到se转载 2015-06-22 08:13:24 · 400 阅读 · 0 评论 -
linux命令学习
1.find命令在某一目录下执行 find -name 文件名,就会在这个目录下找到所有的相关文件。也可以指定文件夹,这样就会在指定的文件夹下找文件 find 路径名 -name 文件名可以使用-a -o ! (与或非)这三个参数将-name参数串起来。2.cp命令cp 源 目的原创 2015-06-26 09:17:41 · 304 阅读 · 0 评论 -
glibc中malloc的详细解释
原文地址:http://blog.csdn.net/eroswang/article/details/4130972应用程序是从0x8048000开始,那是由linker定的,具体数值在一linker脚本定的,具 体在哪忘了,只在linux上是这样,到其它的平台上,可能就是另外一个值了,这只是个约定。0x804a008到0x8048000之间是程序 的.text,.data,.bss等内容。转载 2015-05-08 09:23:40 · 493 阅读 · 0 评论 -
进程的存储管理详细解释
linux 进程地址空间的一步步探究 原文博客地址:http://blog.chinaunix.net/uid-26833883-id-3193585.html我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空转载 2015-06-07 09:37:11 · 984 阅读 · 0 评论 -
为什么需要内存屏障
Author:Echo Chen(陈斌)Email:chenb19870707@gmail.comBlog:Blog.csdn.net/chen19870707Date:September 30th, 2014 来自一篇墙外的文章,要了解如何使用memory barrier,最好的方法是明白它为什么存在。CPU硬件设计为了提高转载 2015-05-31 08:20:40 · 420 阅读 · 0 评论 -
阻塞IO,非阻塞IO,同步IO,异步IO详细讲解
原文地址:http://blog.csdn.net/historyasamirror/article/details/5778378当你发现自己最受欢迎的一篇blog其实大错特错时,这绝对不是一件让人愉悦的事。《 IO - 同步,异步,阻塞,非阻塞 》是我在开始学习epoll和libevent的时候写的,主要的思路来自于文中的那篇link 。写完之后发现很多人都很喜欢,我还是非常开转载 2015-06-11 09:31:59 · 288 阅读 · 0 评论 -
线程函数 pthread_detach()
在任何一个时间点上,线程石可结合的(joinable)或者是可分离的(detached)。一个可结合的线程能够被其他线程回收资源和杀死。在被其他线程回收之前,他的存储器资源(例如栈)是没有释放的。相反,一个分离的线程是不能被其他线程回收或杀死的。他的存储器资源在他终止时由系统自动释放。默认情况下系统被创建为可结合的,为了避免内存泄露,每个可结合线程都应该要么被其他线程显示回收,要么通过调用pt原创 2015-06-11 14:15:01 · 341 阅读 · 0 评论 -
进程休眠函数
由于sleep函数可能被信号打断,所以其可能没有睡够,当没有睡够时,其返回剩余的时间转载 2015-06-10 20:46:41 · 551 阅读 · 0 评论 -
C语言头文件、库文件的查找路径
原文地址:http://blog.chinaunix.net/uid-25544300-id-3310491.html在程序设计中,文件包含是很有用的。一个大的程序可以分为多个模块,由多个程序员分别编程。有 些公 用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使用。这样,可避免在每个文件开头都去书写那些公用量,从而节省时间转载 2015-06-08 18:11:57 · 12599 阅读 · 2 评论 -
回收子进程函数waitpid详解
这里我们可以看出:当已经有SIGCHLD信号时,我们调用waitpid是可以立即返回的。所以经常在SIGCHLD处理程序中调用waitpid函数,这样就可以期望他总能立即返回,但是如果在执行SIGCHLD处理程序期间又有子进程终止,因为unix不对信号排队,如果多于一个子进程终止,则会导致信号丢失,在这种情况下,如果只调用一次waitpid就会导致僵死进程的产生,可以采取while(waitpid原创 2015-06-10 20:34:27 · 2595 阅读 · 0 评论 -
高效定时器:时间轮和时间堆
游戏后台之高效定时器-时间轮原文地址:http://blog.csdn.net/soft2967/article/details/9274691高性能定时器定时器的结构有多种,比如链表式,最小堆,时间轮的 ,在不同应用场景下使用哪种需要考虑效率和复杂度这次我么那先先讲讲时间轮定时器,在linux内核里这种结构的定时器大量使用。1.升序链表定时器 时间轮定时器转载 2015-06-12 09:47:06 · 8418 阅读 · 0 评论 -
段错误与总线错误
总线错误:引起原因: 几乎总是由于对未对齐的读或写引起的。它之所以称为总线错误是因为对未对齐的内存访问时,被阻塞的组件就是地址总线。对齐(alignment)数据项只能存储在地址是数据项大小的整数倍的内存位置上,这样可以加速内存访问。如:访问一个8字节的double的数据时,地址只能是8的整数倍,所以存储一个double的地址只能是24,8008,但不能存储于地址1006因为它不能被8整除原创 2015-06-09 16:09:19 · 980 阅读 · 0 评论 -
IO多路复用总结:select pool epoll
IO多路复用之select总结1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TCP服务器既要处理监听套接口转载 2015-06-11 08:16:08 · 600 阅读 · 0 评论 -
epool详解
原文地址:http://blog.chinaunix.net/uid-24517549-id-4051156.html什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.转载 2015-08-16 10:07:32 · 1938 阅读 · 0 评论 -
异步信号安全(可重入性)与线程安全
异步信号安全(可重入性)与线程安全 求职不利,趁十一假期复习APUE v2线程和信号章节,两天时间看完。书中10.6和12.5两节分别是信号和线程的重入介绍。但是未对异步信号安全、线程安全、可重入概念做统一对比,难以彻悟。针对于此,写下本文。1. 三个概念,线程安全,可重入,信号安全 先简单提一下, 线程安全,主要是针对数据竞争来说的,就是说:如果数据不需要共转载 2015-08-05 14:47:15 · 411 阅读 · 0 评论 -
linux 定时器
原文地址:计时器的使用有时我们需要定时完成一些任务。简单的方法是使用 while 循环加 sleep。比如每隔 1 分钟检查链接情况的 heartbeat 任务等。清单 8,sleep 加循环while(condtion){ //do something sleep(interval);}这可以满足很多程序的定时需要,但假如您不希望程序“转载 2016-08-22 11:19:15 · 1489 阅读 · 0 评论