文章分类 -  LINUX

摘要:如何在linux下检测内存泄漏洪琨(hcode@21cn.com), C++程序员简介:本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨。其中包括 C++ 中的 new 和 delete 的基本原理,内存检测子系统的实现原理和具体方法,以及内存泄漏检测的高级话题。作为内存检测子系统实现的一部分,提供了一个具有更好的使用特性的互斥体(Mutex)类。发布日期:2003 年 7 月 26 日级别:初级访问情况 :17939 次浏览评论:2(查看|添加评论- 登录)平均分 (38个评分)为本文评分1.开发背景在 windows 下使用 VC 编程时,我们通常需要 DEBU 阅读全文
posted @ 2013-06-03 10:57 tangr206 阅读(801) 评论(0) 推荐(0)
摘要:select, poll和epoll的区别落鹤生 发布于 2011-02-15 19:01点击:331次来自:百度博客poll()系统调用是System V的多元I/O解决方案。它解决了select()的几个不足,尽管select()仍然经常使用(多数还是出于习惯,或者打着可移植的名义)TAG:epollpollselectselect()系统调用提供一个机制来实现同步多元I/O:#include<sys/time.h>#include<sys/types.h>#include<unistd.h>intselect(intn,fd_set*readfds,f 阅读全文
posted @ 2013-06-03 08:17 tangr206 阅读(165) 评论(0) 推荐(0)
摘要:林 昊翔(linhaoxiang@hotmail.com), Linux 内核爱好者秦 君(qinjun@cn.ibm.com), 软件工程师, IBM简介:排队自旋锁(FIFO Ticket Spinlock)是 Linux 内核 2.6.25 版本中引入的一种新型自旋锁,它解决了传统自旋锁由于无序竞争导致的“公平性”问题。本文详细介绍了排队自旋锁的设计原理和具体实现,并与 Windows 操作系统采用的类似技术进行比较。最后讨论可能的扩展排队自旋锁的一些想法。发布日期:2008 年 6 月 05 日级别:中级访问情况 :11802 次浏览评论:0(查看|添加评论- 登录)平均分 (20个评 阅读全文
posted @ 2013-05-30 16:32 tangr206 阅读(605) 评论(0) 推荐(0)
摘要:(2012-7-02 08:07:59)标签:linux内核,多线程分类:系统底层1.缘起随着SMP(Symmetrical Multi-Processing)架构的流行和epoll类系统调用对非阻塞fd监视的支持,高性能服务器端的开发已经能够实现CPU计算和IO的分离。为了充分发挥CPU的计算能力,服务器端的设计必须要尽量减少线程切换。引起线程切换最重要的原因之一就是对mutex和semaphor等锁的使用。本文从计算机体系架构、操作系统的支持和mutex的实现彻底分析Linux用户空间mutex的实现,分析的源码版本是glib-2.3.4和kernel-2.6.8。2.体系结构和指令的支. 阅读全文
posted @ 2013-05-29 20:43 tangr206 阅读(1033) 评论(0) 推荐(0)
摘要:2012-04-25 21:45:32分类:LINUX转载自:http://blog.csdn.net/wbd880419/article/details/6675271sem就是一个睡眠锁.如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。信号量一般在用进程上下文中.它是为了防止多进程同时访问一个共享资源(临界区).spin_lock叫自旋锁.就是当试图请求一个已经被持有的自旋锁.这个任务就会一直进行 忙循环——旋转——等待,直到锁 阅读全文
posted @ 2013-05-29 20:40 tangr206 阅读(246) 评论(0) 推荐(0)
摘要:杨燚(yang.yi@bmrtech.com), 计算机科学硕士简介:本文详细地介绍了 Linux 2.6 内核中新的锁机制 RCU(Read-Copy Update) 的实现机制,使用要求与典型应用。发布日期:2005 年 7 月 01 日级别:初级访问情况 :30765 次浏览评论:3(查看|添加评论- 登录)平均分 (69个评分)为本文评分一、 引言众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的 阅读全文
posted @ 2013-05-29 20:34 tangr206 阅读(147) 评论(0) 推荐(0)
摘要:M. Tim Jones, 顾问工程师, Emulex简介:在学习 Linux® 的过程中,您也许接触过并发(concurrency)、临界段(critical section)和锁定,但是如何在内核中使用这些概念呢?本文讨论了 2.6 版内核中可用的锁定机制,包括原子运算符(atomic operator)、自旋锁(spinlock)、读/写锁(reader/writer lock)和内核信号量(kernel semaphore)。 本文还探讨了每种机制最适合应用到哪些地方,以构建安全高效的内核代码。发布日期:2007 年 11 月 19 日级别:中级访问情况 :19172 次浏览 阅读全文
posted @ 2013-05-29 20:05 tangr206 阅读(328) 评论(0) 推荐(0)
摘要:Linux 多线程应用中如何编写安全的信号处理函数周 婷(zhouting@cn.ibm.com), 软件工程师, IBM 中国软件开发技术实验室刘 坚(liujsh@cn.ibm.com), 软件工程师, EMC唐 桂峰(tangguif@cn.ibm.com), 资深软件工程师, IBM简介:关于代码的可重入性,设计开发人员一般只考虑到线程安全,异步信号处理函数的安全却往往被忽略。本文首先介绍如何编写安全的异步信号处理函数;然后举例说明在多线程应用中如何构建模型让异步信号在指定的线程中以同步的方式处理。发布日期:2009 年 6 月 18 日级别:中级访问情况 :17222 次浏览评论:0 阅读全文
posted @ 2013-05-29 19:29 tangr206 阅读(160) 评论(0) 推荐(0)
摘要:Epoll在LT和ET模式下的读写方式发布时间:July 10, 2012分类:Linux《VPS下CentOS装机记录》《MooC的一些设计思路》在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block,perror输出: Resource temporarily unavailable总结:这个错误表示资源暂时不够,能read时,读缓冲区没有数据,或者write时,写缓冲区满 阅读全文
posted @ 2013-05-28 17:16 tangr206 阅读(557) 评论(0) 推荐(0)
摘要:本文介绍malloc和free函数的内容。 在C中,对内存的管理是相当重要。下面开始介绍这两个函数: 一、malloc()和free()的基本概念以及基本用法:1、函数原型及说明:void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,应该有多种,比如说空间不足就是一种。void free(void *FirstByte):该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。2、函数的用法:其实这两个函数用起来... 阅读全文
posted @ 2013-05-27 20:59 tangr206 阅读(210) 评论(0) 推荐(0)
摘要:分类:Linux/Shell2013-03-15 23:411284人阅读评论(0)收藏举报lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。例如:传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表,对系统监测和排 阅读全文
posted @ 2013-05-27 13:36 tangr206 阅读(1003) 评论(0) 推荐(0)
摘要:分类:Linux2008-09-06 15:04533人阅读评论(0)收藏举报linuxlinux内核化工nullthread工具当使用top等工具查看系统运行情况的时候,会知道当前(准确地说是过去的几秒钟内)处理器的利用率有多少。用户态占了多少,核心态占了多少,idle占了多少。我们通常把idle就视为系统空闲,但是这个"空闲"到底代表什么意思?接下来我们探讨一下。1. idle是什么 简单的说idle是一个进程,其pid号为0。其前身是系统创建的第一个进程,也是唯一一个没有通过fork()产生的进程。在smp系统中,每个处理器单元有独立的一个运行队列,而每个运行队列上又 阅读全文
posted @ 2013-05-27 13:14 tangr206 阅读(280) 评论(0) 推荐(0)
摘要:分类:Linux2008-09-06 14:521026人阅读评论(0)收藏举报linux数据结构编译器solarisdb2null前几次我们分析了Linux系统中用户进程的4G虚存大致分为了几个部分,介绍了3G用户空间中数据段,代码段等静态区域的虚存管理,重点分析了栈的使用。这次我们来分析一下虚存使用中另一个重要部分--堆。前面的介绍中,我们知道编译器,操作系统担负着大量栈分配管理的工作。不论是静态分配的栈空间还是用户动态分配的栈空间,在函数返回的时候就自动释放了。堆的使用比之栈而言更为灵活,允许程序员动态的分配并释放,但也意味着,堆的使用需要程序员更为小心。4.5 堆的内存管理在学习&qu 阅读全文
posted @ 2013-05-27 11:21 tangr206 阅读(246) 评论(0) 推荐(0)
摘要:分类:Linux2008-09-06 14:51745人阅读评论(0)收藏举报linux汇编编译器linux内核数据结构c上次我们分析了用户进程在虚存中的大致分布,这次我们就来分析一下,用户进程的4G虚存是怎么管理的,其对应的物理内存又是怎么维护的。4. 用户进程的内存管理机制4.1 虚拟内存和物理内存前几次我们分析了什么是物理内存,什么是虚拟内存,也反复强调了虚存不同于物理内存。虽然用户程序看到的是虚拟内存,但真正运行的时候还是必须运行在物理内存上的,这就涉及到一个虚拟内存分配和物理内存分配之间关系的问题。后面我们会详细展开了讲,但这里要先让大家明确一个概念,就是物理内存的延迟分配。因为物理 阅读全文
posted @ 2013-05-27 11:03 tangr206 阅读(486) 评论(0) 推荐(0)
摘要:分类:Linux2008-09-06 14:50711人阅读评论(0)收藏举报linuxlinux内核windowsgcc编译器bbs上次我们讲到了硬件平台和操作系统对物理内存的管理机制,经过这两层处理,应用程序中只要好好利用自己独占的4G虚拟内存就行了。这次我们来讨论一下这应用程序是如何分配这4G内存的,当然这都离不开编译器,操作系统的帮助。PS: 在这之前,再强调一下,这里所说的虚拟内存是逻辑概念。和Windows平台上设置的那个虚拟内存不一样,那个相当于交换分区。3. 用户进程的虚存布局首先Linux把每个用户进程可访问的4G虚存空间分成两个大的部分。其中0x0~0xBFFFFFFF的3 阅读全文
posted @ 2013-05-27 10:57 tangr206 阅读(317) 评论(0) 推荐(0)
摘要:分类:Linux2008-09-06 14:48864人阅读评论(1)收藏举报linuxdescriptor平台程序开发tablerandom前几次我们分析了程序是如何在Linux上被加载运行的。这次我们尽量简洁的分析一下在Linux中,程序是如何使用内存,而系统又是怎样管理内存的。内存访问和管理是一个跨越应用程序,操作系统,硬件平台的一个复杂的过程。虽然过程很复杂,我们还是尝试着去理解一下。1. IA-32架构中的内存管理机制我们从硬件开始吧,内存归根结底是硬件,内存(Random Access Memory)在加电的情况下,在地址总线上放上要读取/写入的地址,然后就可以在控制信号的帮助下, 阅读全文
posted @ 2013-05-27 10:54 tangr206 阅读(312) 评论(0) 推荐(0)
摘要:分类:Linux2008-09-06 14:26443人阅读评论(0)收藏举报linuxshell编译器gccstruct平台 main()函数,想必大家都不陌生了,从刚开始写程序的时候,大家便开始写main(),我们都知道main是程序的入口。那main作为一个函数,又是谁调用的它,它是怎么被调用的,返回给谁,返回的又是什么?这次我们来探讨一下这个问题。1. main()函数的形式先来说说main函数的定义,较早开始写C程序的肯定都用过这样的定义void main(){},其实翻翻C/C++标准,从来没有定义过void main()。在C标准中main的定义只有两种: int main(vo 阅读全文
posted @ 2013-05-27 09:57 tangr206 阅读(209) 评论(0) 推荐(0)
摘要:分类:Linux2008-09-06 14:21527人阅读评论(0)收藏举报linuxstructsignalsecurityjobsthread进程终止过程:进程终止的系统调用sys_exit()通过函数do_exit()实现。do_exit()调用static inline void __exit_mm(struct task_struct * tsk){struct mm_struct * mm = tsk->mm;mm_release();}释放一部分资源。然后调用static void exit_notify(void){/* Let father know we died* 阅读全文
posted @ 2013-05-25 20:24 tangr206 阅读(395) 评论(0) 推荐(0)
摘要:分类:Linux2008-09-06 14:13469人阅读评论(0)收藏举报linuxshellpaththreadsearchstruct上次讲了如何从源文件得到可执行文件。这次聊聊可执行文件是如何在shell中被"执行"的。本文中尽可能少用一些源码,免得太过于无聊,主要讲清这个过程,感兴趣的可以去查看相应的源码了解更多的信息。1.父进程的行为: 复制,等待执行应用程序的方式有很多,从shell中执行是一种常见的情况。交互式shell是一个进程(所有的进程都由pid号为1的init进程fork得到,关于这个话题涉及到Linux启动和初始化,以及idle进程等,有空再说) 阅读全文
posted @ 2013-05-25 20:22 tangr206 阅读(309) 评论(0) 推荐(0)
摘要:Linux中文手册Linux官方手册中文翻译定期与Linux官方手册同步翻译欢迎所有同仁参与翻译:易美翻译开头字母A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z标题摘要a64la64l, l64a - 在 long (长整形)与 base-64 之间进行相互转换abort强行终止一个进程,以一个非常粗野的方式来完成这个工作。abortabort - 异常终止进程absabs, labs, llabs, imaxabs - 计算一个整数的绝对值acceptaccept - 通过套接口接受一个连接accessaccess - 对一个文件检测当 阅读全文
posted @ 2013-05-25 18:06 tangr206 阅读(720) 评论(0) 推荐(0)