11 2012 档案

(转)虚函数和虚拟继承的内存模型
摘要:转自:http://blog.csdn.net/llingy/article/details/5868337(1)单一的一般继承 (带成员变量、虚函数、虚函数覆盖) 1)虚函数表在最前面的位置。 2)成员变量根据其继承和声明顺序依次放在后面。 3)在单一的继承中,被 overwrite 的虚函数在虚函数表中得到了更新 。(2)多重继承 (带成员变量、虚函数、虚函数覆盖) 1) 每个父类都有自己的虚表。 2) 子类的成员函数被放到了第一个父类的表中。 3) 内存布局中,其父类布局依次按声明顺序排列。 4) 每个父类的虚表中的 f()函数都被 overwrite成了子类的 f() 。这... 阅读全文

posted @ 2012-11-22 22:09 i活着 阅读(485) 评论(0) 推荐(0)

(转)An Introduction to GCC 学习笔记
摘要:2009/02/25 01:27An Introduction to GCC 学习笔记:作者:吴学军 内容摘要 注:转载时请注明出处和作者(吴学军 )来源于GNU文档学习手册前三章:要点1。强烈推荐使用-Wall选项;注:Warning 的显示格式: ?le:line-number:message2。编译选项-o 文件名:直接产生可执行文件-c 文件名:只编译为.o的库文件,不链接 (.c => .o )在将多个.o连接为一个可执行文件时,仅使用-o指定可执行文件名即可,不需要使用-Wall选项,因为链接是一个明确的过程(unambiguous),只有successed或者fail两种结 阅读全文

posted @ 2012-11-20 15:38 i活着 阅读(519) 评论(0) 推荐(0)

(转)Linux的僵尸进程及其解决方法
摘要:转自:http://www.lupaworld.com/article-216737-1.html1. 产生原因: 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。通过ps命令查看其带有defunct的标志。僵尸进程是一个早已死亡的进程,但在进程表 (processs table)中仍占了一个位置(slot)。 但是如果该进程的父进程已经 先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个进程的 子进程,如果是的话,就由Init.. 阅读全文

posted @ 2012-11-20 15:36 i活着 阅读(345) 评论(0) 推荐(0)

(转)linux2.6 CFS调度算法分析
摘要:转自:http://www.cppblog.com/mysileng/archive/2012/10/16/193380.html1.概述 CFS(completely fair schedule)是最终被内核采纳的调度器。它从RSDL/SD中吸取了完全公平的思想,不再跟踪进程的睡眠时间,也不再企图区分交互式进程。它将所有的进程都统一对待,这就是公平的含义。CFS的算法和实现都相当简单,众多的测试表明其性能也非常优越。 CFS 背后的主要想法是维护为任务提供处理器时间方面的平衡(公平性)。这意味着应给进程分配相当数量的处理器。分给某个任务的时间失去平衡时(意味着一个或多个任务相对于其他任务而言 阅读全文

posted @ 2012-11-20 15:35 i活着 阅读(1328) 评论(1) 推荐(0)

(转)Linux 调度器发展简述
摘要:转自:http://www.ibm.com/developerworks/cn/linux/l-cn-scheduler/引言进程调度是操作系统的核心功能。调度器只是是调度过程中的一部分,进程调度是非常复杂的过程,需要多个系统协同工作完成。本文所关注的仅为调度器,它的主要工作是在所有 RUNNING 进程中选择最合适的一个。作为一个通用操作系统,Linux 调度器将进程分为三类:交互式进程此类进程有大量的人机交互,因此进程不断地处于睡眠状态,等待用户输入。典型的应用比如编辑器 vi。此类进程对系统响应时间要求比较高,否则用户会感觉系统反应迟缓。批处理进程此类进程不需要人机交互,在后台运行,需要 阅读全文

posted @ 2012-11-20 15:33 i活着 阅读(369) 评论(0) 推荐(0)

(转)linux进程调度浅析
摘要:转自:http://hi.baidu.com/_kouu/item/38c81042455c97d2c1a592d9操作系统要实现多进程,进程调度必不可少。有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了实际环境,这些结论是比较片面的。 而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对TASK_RUNNING状态的进程进行调度(参见《linux进程状态浅析》)。如果进程不可执行(正在睡眠或其他),那么它跟进程调度没多大关系。所以,如果你的系统负载非常低,盼星星盼月 阅读全文

posted @ 2012-11-20 15:32 i活着 阅读(284) 评论(0) 推荐(0)

(转)详解C中volatile关键字
摘要:转自:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/24/1764231.htmlvolatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数 据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。 下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;void test(){do1();while(flag==0);d 阅读全文

posted @ 2012-11-20 15:31 i活着 阅读(192) 评论(0) 推荐(0)

(转)C内存对齐
摘要:转自:http://hi.baidu.com/yuzjgfsuhpbamqq/item/fdb3044e8c68343efa8960351.内存对齐:计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数k则被称为该数据类型的对齐模数(alignment modulus)2.不同编译器默认的最大对齐字节数是不一样的,比如vc==8,gcc==4,可以通过#progma pack (n)来修改,分析程序的时候要注意编译器的区别3.一个结构体里面,按照alignment modulus最大的数据成员来进行对齐,超过编译器规定最大的对齐字节 阅读全文

posted @ 2012-11-20 15:30 i活着 阅读(213) 评论(0) 推荐(0)

(转)spinlock与linux内核调度的关系
摘要:一、自旋锁(spinlock)简介 自旋锁在同一时刻只能被最多一个内核任务持有,所以一个时刻只有一个线程允许存在于临界区中。这点可以应用在多处理机器、或运行在单处理器上的抢占式内核中需要的锁定服务。 二、信号量简介 这里也介绍下信号量的概念,因为它的用法和自旋锁有相似的地方。Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。 三、自旋锁和信号量对比 在很多地方自旋锁和信号量可以选择任何一个使用,但也. 阅读全文

posted @ 2012-11-19 21:05 i活着 阅读(1803) 评论(0) 推荐(0)

(转)Linux进程调度时机
摘要:转自:http://oss.org.cn/kernel-book/ch05/5.3.2.htm调度程序虽然特别重要,但它不过是一个存在于内核空间中的函数而已,并不神秘。Linux的调度程序是一个叫Schedule()的函数,这个函数被调用的频率很高,由它来决定是否要进行进程的切换,如果要切换的话,切换到哪个进程等等。我们先来看在什么情况下要执行调度程序,我们把这种情况叫做调度时机。Linux调度时机主要有:1、进程状态转换的时刻:进程终止、进程睡眠;2、当前进程的时间片用完时(current->counter=0);3、设备驱动程序4、进程从中断、异常及系统调用返回到用户态时;时机1,进 阅读全文

posted @ 2012-11-12 14:48 i活着 阅读(749) 评论(0) 推荐(0)

(转)X Windows与GNOME,KDE的关系
摘要:转自:http://sunyqlinux.blog.51cto.com/542006/126612关于linux图形界面的基本知识 很多LINUX初学者分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系.常常混淆概念,我想以比较易于理解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限可能存在错误,请高手指正. 一,linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的. 图形界面并不是linux的一部分,linux只是一个基于命令行的操作系统,linu... 阅读全文

posted @ 2012-11-12 14:47 i活着 阅读(631) 评论(0) 推荐(0)

(转)exit abort return 区别
摘要:函数名称:exit头文件:<stdlib.h>函数原型:void exit(int state)函数用途:程序中止执行,返回调用过程输入参数:state 0-正常中止,非0-非正常中止1,exit 用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由 atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建 的临时文件。2,exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程,而re 阅读全文

posted @ 2012-11-12 14:45 i活着 阅读(1243) 评论(0) 推荐(0)

(转)学习Linux编程开发必读书籍
摘要:假设你是计算机科班出身,计算机系的基本课程如数据结构、操作系统、体系结构、编译原理、计算机网络你全修过我想大概可以分为4个阶段,水平从低到高从安装使用=>linux常用命令=>linux系统编程=>内核开发阅读内核源码其中学习linux常用命令时就要学会自己编译内核,优化系统,调整参数安装和常用命令书太多了,找本稍微详细点的就ok,其间需要学会正则表达式系统编程推荐《高级unix环境编程》,黑话叫APUE还有《unix网络编程》这时候大概还需要看资料理解elf文件格式,连接器和加载器,cmu的一本教材中文名为《深入理解计算机系统》比较好内核开发阅读内核源码阶段,从写驱动入手逐 阅读全文

posted @ 2012-11-06 12:52 i活着 阅读(482) 评论(0) 推荐(0)

(转)C++强大背后
摘要:在31年前(1979年),一名刚获得博士学位的研究员,为了开发一个软件项目发明了一门新编程语言,该研究员名为Bjarne Stroustrup, 该门语言则命名为——C with classes,四年后改称为C++。C++是一门通用编程语言,支持多种编程范式,包括过程式、面向对象(object-oriented programming, OP)、泛型(generic programming, GP),后来为泛型而设计的模版,被发现及证明是图灵完备的,因此使C++亦可支持模版元编程范式(template metaprogramming, TMP)。C++继承了C的特色,既为高级语言,又含低级语言 阅读全文

posted @ 2012-11-05 21:50 i活着 阅读(183) 评论(0) 推荐(0)

(转)linux书籍推荐
摘要:转自:http://www.cnblogs.com/wwang/archive/2011/01/27/1944406.html入门类 一直认为,在一个系统上学习开发之前,首先需要熟悉这个系统的使用。鉴于天朝的国情,绝大部分人第一个接触的操作系统就是Windows,因此对于这绝大部分人来说,如果要学习Linux开发,学会使用这个系统都是必不可少的一个环节。 现在的Linux初学者是幸福的,随着Linux桌面环境越来越易用,入门一个新的系统是非常容易的事情。虽然命令行对于提高工作效率更加有效,但我们完全可以把熟悉命令的过程放到日常使用中进行。无论学习什么知识,在实践中学习都是高效而且有趣的。在这. 阅读全文

posted @ 2012-11-05 21:36 i活着 阅读(256) 评论(0) 推荐(0)

(转)中断和中断处理程序
摘要:1. 中断 Linux内核要对连接到计算机上的所有硬件设备进行管理,首先要能和它们互相通信。从所周知,处理器的速度跟外围硬件设备的速度往往不在一个数量级上。所以,需要一种机制,如果轮询(polling)是一种解决办法,可以让内核定期对设备的状态进行查询,然后做出相应的处理,但这让内核做了不少无用功。 更好的办法是由我们来提供一种机制,让硬件在需要的时候再向内核发出信号。这就是中断机制。中断本质上是一种特殊的电信号,由硬件设备生成,并直接送入中 断控制器的输入引脚上,再由中断控制器向处理器发送相应的信号,处理器一经检测到此信号,便中断自己当前工作转而处理中断,最后由OS来负责处理新到来的数据。中 阅读全文

posted @ 2012-11-05 15:58 i活着 阅读(418) 评论(0) 推荐(0)

(转)linux进程的地址空间,核心栈,用户栈,内核线程
摘要:转自:http://blog.csdn.net/wuzh1230/article/details/7183763地址空间:32位linux系统上,进程的地址空间为4G,包括1G的内核地址空间,和3G的用户地址空间。内核栈:系统栈(也叫核心栈、内核栈)是内存中属于操作系统空间的一块区域,其主要用途为: (1)保存中断现场,对于嵌套中断,被中断程序的现场信息依次压入系统栈,中断返回时逆序弹出; (2)保存操作系统子程序间相互调用的参数、返回值、返回点以及子程序(函数)的局部变量。 用户栈是用户进程空间中的一块区域,用于保存用户进程的子程序间相互调用的参数、返回值、返回点以及子程序(函数)的局... 阅读全文

posted @ 2012-11-05 15:29 i活着 阅读(1499) 评论(0) 推荐(0)

(转)Linux Futex的设计与实现
摘要:Linux中的线程同步机制(一) -- Futex引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序",那futex是什么?和glibc又有什么关系呢?1. 什么是FutexFutex 是Fast Userspace muTexes的缩写,由Hubertus Franke, Matthew Kirkwood, Ingo Molnar and Rusty Russell共同设计完成。几位都是linux领域的专家,其中可能Ingo Molnar大家更 阅读全文

posted @ 2012-11-03 16:11 i活着 阅读(3136) 评论(0) 推荐(1)

(转)用户态与核心态
摘要:1. 用户态和内核态的概念区别究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子:1)例子void testfork(){if(0 = = fork()){printf(“create new process success!\n”);}printf(“testfork ok\n”);}这段代码很简单,从功能的角度来看,就是实际执行了一个fork(),生成一个新的进程,从逻辑的角度看,就是判断了如果fork()返回的是0则打印相 关语句,然后函数最后再打印 阅读全文

posted @ 2012-11-02 19:20 i活着 阅读(415) 评论(0) 推荐(0)

(转)Linux进程、线程模型
摘要:一.定义关于进程、轻量级进程、线程、用户线程、内核线程的定义,这个很容易找到,但是看完之后你可以说你懂了,但实际上你真的明白了么?在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合和资源 集合。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。线程有自己的私有数据:程 序计数器,栈空间以及寄存器。传统进程的缺点现实中有很多需要并发处理的任务,如数据库的服务器端、网络服务器、大容量计算等。一个任务是一个进程,传统的UNIX进程是单线程(执行流)的, 单 阅读全文

posted @ 2012-11-02 19:15 i活着 阅读(639) 评论(0) 推荐(0)

导航