基础知识
文章平均质量分 59
iteye_661
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
for(;;) 和 while(TRUE)效率比较
个人认为for(;;),效率更高。原因for循环中什么都没有执行,所以耗费的内存空间要小一些。while循环中还要每次都执行true语句,要耗费一定的内存。编译后的代码:编译前 编译后 while (1); mov eax,1 test eax,eax ...原创 2012-06-12 10:12:17 · 705 阅读 · 0 评论 -
流水线、超流水线、超标量技术对比
http://blog.youkuaiyun.com/do2jiang/article/details/4545889流水线 流水线技术是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术。程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未执行完时,提前启动后续指令的另一些操作步骤。这样显然可加速一段程序的运行过程。 市场上推出的各种不同...原创 2012-08-25 08:20:25 · 528 阅读 · 0 评论 -
分页和分段内存的区别
转:http://www.cnhonkerarmy.com/forum.php?mod=viewthread&tid=118503今天看了一下linux0.01的内核开发。虽然仅有8000行的代码。但涉及的知识面还是有点多。但万事开头难嘛。现在和大家分享一下在网上看到的一篇内存分页和分段的区别。感觉看了这篇文章能对这方面有个较为直观的印象了。一. 分页存储管理1.基本思想用户程序的地址...原创 2012-09-01 01:44:33 · 1833 阅读 · 0 评论 -
GDT与LDT的关系
转:http://hi.baidu.com/bluewithcg/item/7a667f09e7c9ccce91571823GDT是个装系统XX描述符的容器(XX可以是代码段、数据段、TSS段、LDT段等),其在内存中是一片连续的内存,以8字节分隔开,逻辑上称为存储系统描述符的数据结构。 LDT也是一个装XX描述符的容器(XX通常为某个任务的数据段、代码段、乱七八糟段),不同于G...原创 2012-09-02 17:13:20 · 467 阅读 · 0 评论 -
Linux内核学习之分段机制
转:http://www.linuxidc.com/linux/2008-10/16740.htmX86分段机制 这里讲的分段指的保护模式(protected mode)下的段机制。与保护模式相对的一个概念是实模式(real mode),实模式的地址由“段基址:偏移量”组成,段基址是个16位的寄存器(CS,DS等),这样显然限制了系统的寻址空间。保护模式的地址由“段选择子+偏移...原创 2012-09-03 09:21:33 · 215 阅读 · 0 评论 -
内存分段机制
转:http://book.51cto.com/art/200812/103305.htm在内存分段系统中,一个程序的逻辑地址通过分段机制自动地映射(变换)到中间层的4GB(232B)线性地址空间中。程序每次对内存的引用都是对内存段中内存的引用。当程序引用一个内存地址时,通过把相应的段基址加到程序员看得见的逻辑地址上就形成了一个对应的线性地址。此时若没有启用分页机制,则该线性地址就被送到...原创 2012-09-03 09:24:13 · 329 阅读 · 0 评论 -
Byte位元组单位-KB KiB MB MiB GB GiB区别
一般而言大部份都只知道KB、MB、GB、TB…等, 倒是沒聽過KiB、MiB…等, 現在搞懂, 原來分為以1000位元組或用1024位元組來計算之.這就是為什麼我們平時買硬碟或隨身碟的容量與實際真實的容量不同, 像是我了8GB的隨身碟, 實際為8,304,717,824位元組(byte), 但實際顯示確只有7.73GB, 為什麼呢? 因為電腦是用1024位元組來計算, 以83047178...原创 2012-09-04 16:48:01 · 2946 阅读 · 0 评论 -
Linux进程-进程的创建
今天学习了Linux的进程创建的基本原理,是基于0.11版本核心的。下面对其作一下简单的总结。一、Linux进程在内存中的相关资源 很容易理解,Linux进程的创建过程就是内存中进程相关资源产生的过程,那么Linux进程在内存中有哪些相关资源呢? 1)task数组中的一项:一个指针指向进程的task_struct 2)一页内存:task_struct(Linux进程控制块)和内核态堆栈...原创 2012-09-07 23:07:03 · 232 阅读 · 0 评论 -
linux线程浅析
http://hi.baidu.com/_kouu/item/282b80a933ccc3a829ce9dd9关于linux线程在许多经典的操作系统教科书中, 总是把进程定义为程序的执行实例, 它并不执行什么, 只是维护应用程序所需的各种资源. 而线程则是真正的执行实体. 为了让进程完成一定的工作, 进程必须至少包含一个线程. 如图1.进程所维护的是程序所包含的资源(静态资源), 如: 地...原创 2012-09-08 12:32:16 · 143 阅读 · 0 评论 -
LINUX进程, 线程
http://shaohui.me/archives/256 N久之前, 某两人为了linux的调度基本单元是进程还是线程争得面红耳赤, 当然, 且不论为了一个技术问题不顾体面其用心何在, 单纯从技术角度讲, 这是个挺好的问题. 单纯的下一个结论几乎总是错误的, 所谓的对与错也只不过是在特定的时段和特定的场景下符合规律的一种状态, 一旦时过境迁, 对的东西往往变成了错误的, 而...原创 2012-09-08 12:55:25 · 152 阅读 · 0 评论 -
满二叉树及完全二叉树的定义
满二叉树:除了叶节点,每个父亲节点都有两个子树的,满满的二叉树完全二叉树:所有节点集中在树左边的二叉树,就是说除了叶节点,每个节点都只有左节点或者有两个节点,而没有只有右节点情况 深度为K,有N个结点的二叉树当且仅当其每一个结点都与深度为K的满二叉树中编号从1-N的结点一一对应时,成为完全二叉树。举例说明,深度假设为3. 满二叉树是这样的. (见图1)这6个节点,按先横后竖的方法把这个二叉树的...原创 2012-09-25 10:39:02 · 408 阅读 · 0 评论 -
主存与Cache的地址映像
在线课件:http://210.44.176.183/jsjxy/jsjzcyl/%E6%95%99%E5%AD%A6%E8%AF%BE%E4%BB%B6/Chap03/3.5.2.htm与主存容量相比,Cache的容量很小,它所保存的信息仅是主存信息的一个子集,且cache与主存的信息交换是以块为单位。为了把信息放到Cache中,必须事先规定好主存与cache之间的地址映像方式,即某一个Ca...原创 2012-10-02 20:14:46 · 702 阅读 · 0 评论 -
这场官司让BSD错过了机会,让linux在应用广泛度上超越了它
70年代末,在Unix发展到了版本6之后,AT&T认识到了Unix的价值,成立了Unix系 统实验 室(Unix System Lab,USL)来继续发展Unix。因此AT&T一方面继续发展内部使 用的Unix 版本7,一方面由USL开发对外正式发行的Unix版本,同时AT&T也宣布对Unix产品拥有 所有 权。几乎在同时,加州大学伯克利分校计算机系统研究小组(CSRG)使...原创 2012-11-10 00:50:14 · 755 阅读 · 0 评论 -
Linux模块编程
Linux模块简介 首先这个module不同于microkernel的module,microkernel的module是一个个的daemon进程,工作于用户 空间,Linux的module只是一个内核的目标代码,内核通过执行运行时的连接,来把它整合到kernel中去,所以说Linux的module机制 并没有改变Linux内核为monolithic OS本质,其module也是工作...原创 2012-11-10 12:38:58 · 176 阅读 · 0 评论 -
微内核(microkernel)相关
from : http://www.yandong.org/archives/191介绍WIKI上的解释是:在计算机科学中,微内核是一个近乎最小的软件集合,但具有能够提供实现操作系统所需的机制。 In computer science, a microkernel is the near-minimum amount of software that can provid...原创 2012-11-10 22:50:36 · 423 阅读 · 0 评论 -
L4操作系统(L4/Fiasco介绍)
我们学习操作系统课程的时候,一直在讲微内核,说什么“微内核是现代操作系统的主流”(时间太久,记不清了,如果说错了,不要拍我)。可是事实上,真正进入工业级别应用的微内核操作系统并不多,Microsoft的系统虽然宣称是微内核,但是应该不是,因为从来没有见过一个人可以把XP或者2000系统裁减到50M以内(95/98可以做小,这个可以从网络搜索到相关资料,但是它们是DOS的封装,这里不谈)。...原创 2012-11-11 01:36:48 · 605 阅读 · 0 评论 -
简单的RPC编程实践——HelloWorld的实现
近期课程的作业需要用到RPC编程,除了课堂上学到的知识,还得亲自动手。打算先写个简单的HelloWorld练习一下,顺便复习一下学到的知识。 RPC意为远程过程调用协议(Remote Procedure Call Protocol)。编制好单机应用程序,然后划分为两个或多个程序片,加入通信协议使得每片可以在单独的计算机上运行。从一个程序片调用另一个程序片的过程称为远程过程调用,即RPC...原创 2012-11-13 01:39:59 · 182 阅读 · 0 评论 -
Thread-Specific Data 注:相当于线程内的全局变量,可减少线程内调用其他函数的变量数 ...
Linux多线程编程中引入了Thread-Specific Data(线程相关的数据)的概念 为什么需要"线程相关的数据"呢?怎样使用"线程相关的数据"呢? 1. 为什么需要Thread-Specific Data "线程相关的数据" 例子:实现同时运行两个线程,对于每个线程,在该线程调用的每个函数中打印线程的名字,以及它正在调用的函数的名字. 不使用"线程相关的数据"的两种实现方...原创 2012-11-18 01:20:27 · 184 阅读 · 0 评论 -
MMU结构以及工作原理
MMU的大名,早就听说了,可是一直不知道它是怎么工作的,前几月貌似看的模模糊糊,现在快年关了,来做个了结。在文中我会大量引用英文,并且不做翻译,因为俺觉得我的英文水平会误解别人。O(∩_∩)O哈哈~ One of the key services provided by an MMU is the ability to manage tasks as indepen-dent pro...原创 2012-11-25 00:15:56 · 473 阅读 · 0 评论 -
睡眠和休眠有什么区别?
到底用睡眠和休眠,还是直接关机的问题,争论颇多,大家各有各的观点和立场。在此对这个问题,简要分析一下可能涉及到的几个方面。在大部分情况下使用睡眠和休眠就可以了,重启和关机是在极少数情况下使用的,比如安装了新软件要求重启,或者系统出现了严重故障。下面从几个方面来说这个问题,这里默认了一个前提,就是你的主板支持s3待机。究竟哪些主板支持?我家有台老爷机,2001年买的,它都支持,我想不必再多...原创 2012-12-08 01:01:39 · 630 阅读 · 0 评论 -
gcc编译c++程序
原来一直以为gcc是c的linux下的编译器,g++是c++的linux下的编译器,今天偶尔看到一个说明文档,大体内容是gcc已经不单纯的可以编译C语言,它支持C, C++, Objective-C, Fortran, Java, Ada的编译,如果不指名编译语言,默认由后缀名决定。感觉好神奇,就亲自想用gcc来编译一个c++的helloworld。步骤如下: 1.用vim直接打开h...原创 2012-06-29 18:18:52 · 130 阅读 · 0 评论 -
C/C++中typedef struct和struct的用法
由于对typedef理解不够,因此从网上摘录了一些资料,整理如下: C/C++中typedef struct和struct的用法 struct _x1 { ...}x1; 和 typedef struct _x2{ ...} x2; 有什么不同? 其实, 前者是定义了类_x1和_x1的对象实例x1, 后者是定义了类_x2和_x...原创 2012-06-29 18:30:58 · 112 阅读 · 0 评论 -
关于2的补码
from : http://www.ruanyifeng.com/blog/2009/08/twos_complement.html问一个基本的问题。负数在计算机中如何表示?举例来说,+8在计算机中表示为二进制的1000,那么-8怎么表示呢?很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,在8位机中,规定每个字节的最高位...原创 2013-04-16 11:40:37 · 447 阅读 · 0 评论 -
为什么1字节是8位
因为计算机用二进制,所以希望基本存储单位的是2的n次方。 2^1 = 2 可以表示 4 个符号 2^2 = 4 可以表示 16 个符号 2^3 = 8 可以表示 256 个符号 2^4 = 16 可以表示 65536个符号 考虑需要表示英文字符和数字以及一些符号的数量,大家认为用几位来表示比较合适? 早期(其实...原创 2012-08-08 21:34:36 · 572 阅读 · 0 评论 -
时间复杂度的计算
算法复杂度是在《数据结构》这门课程的第一章里出现的,因为它稍微涉及到一些数学问题,所以很多同学感觉很难,加上这个概念也不是那么具体,更让许多同学复习起来无从下手,下面我们就这个问题给各位考生进行分析。首先了解一下几个概念。一个是时间复杂度,一个是渐近时间复杂度。前者是某个算法的时间耗费,它是该算法所求解问题规模n的函数,而后者是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。 当我们评价一...原创 2011-12-28 18:50:24 · 120 阅读 · 0 评论 -
链表反转的两种实现方法
#include <iostream>using namespace std;//元结点struct Node{ int data; Node *next;};//链表反转(循环方法)Node *Reverse(Node *head){ Node *prev = NULL; Node *cur = NU...原创 2011-12-29 19:41:50 · 125 阅读 · 0 评论 -
使用指针的好处
一、什么是指针其实指针就像是其它变量一样,所不同的是一般的变量包含的是实际的真实的数据,而指针包含的是一个指向内存中某个位置的地址。二、指针的定义int *pNumber;这样就定义了int类型的指针。指针变量名称以p为首字符,这是程序员通常在定义指针时的一个习惯,以提高便程序的阅读性,表示这是个指针。另外,虽然int* pNumber和int *pNumber是相同的,但是使用后一种的编...原创 2011-12-30 15:16:58 · 2506 阅读 · 0 评论 -
vector.resize 与 vector.reserve的区别
reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。再者,两个函数的形式是有区别的,reserve...原创 2011-12-30 22:12:07 · 130 阅读 · 0 评论 -
STL序列容器vector,deque,list
vector 表示一段连续的内存块每个元素被顺序存储在这段内存中,是一个在堆上建立的一维数组,因为在堆上,所以对其进行erase( ),resieze()等操作;还有一点就是,vector不用担心越界当空间不够用的时候,系统会自动按照一定的比例(对capacity()大小)进行扩充。 vector最大的优点莫过于是检索(用operator[])速度在这三个容器中是最快的,还有就是在ve...原创 2011-12-30 23:08:14 · 166 阅读 · 0 评论 -
deque内部实现原理
deque的元素数据采用分块的线性结构进行存储,如图所示。deque分成若干线性存储块,称为deque块。块的大小一般为512个字节,元素的数据类型所占用的字节数,决定了每个deque块可容纳的元素个数。所有的deque块使用一个Map块进行管理,每个Map数据项记录各个deque块的首地址。Map是deque的中心部件,将先于deque块,依照deque元素的个数计算出deque块数,...原创 2011-12-30 23:33:13 · 324 阅读 · 0 评论 -
STL关联容器set,multiset,map,multimap
关联容器associative container:被插入的元素并没有一个固定的位置。这不仅是指操作者可能更改其中元素的位置,还有可能——每当新插入一个元素时,容器都会自动的按照某种排序规则将新来的元素放置在合适的位置。也即,这种容器内元素的排列顺序由容器自己的排序规则决定,操作者无能为力。 ==============================================...原创 2011-12-30 23:49:32 · 120 阅读 · 0 评论 -
AVL树的旋转平衡
AVL树的旋转平衡练习实例:1依据字典序,按照AVL树插入算法依次插入{head,he,tea,teach,twin,hot,toss}。关键:插入twin时,属于"\"型;插入hot时,属于">"型。2按AVL插入算法依次插入{55, 31, 11, 37, 46, 73, 63}。关键:插入11时,属于“/”型;插入46时,属于"<"型;插入73时,属于"\...原创 2011-12-31 14:41:16 · 229 阅读 · 0 评论 -
红黑树介绍与分析
最近觉得C++生疏了,拿出侯捷的《STL源码剖析》翻了翻,看到C++ set,map底层实现机制,其中采用的就是红黑树数据结构,另外Linux内核对内存管理和进程调度都用到了红黑树,看来它不能让人小视。自己从网上和书上重新看了下红黑树,把个人的理解放到博客上,跟大家讨论,也作为自己的重新梳理的方式。红黑树(Red-Black Tree)它是在1972 年由Rudolf Bayer 发明...原创 2011-12-31 19:31:58 · 140 阅读 · 0 评论 -
示例,红黑树插入和删除过程
依次插入如下序列,最后再依次删除如下序列,图片为自动生成。12 1 9 2 0 11 7 19 4 15 18 5 14 13 10 16 6 3 8 17 删除过程...原创 2011-12-31 19:32:51 · 139 阅读 · 0 评论 -
漫游红黑树之插入篇
<1>. 红黑树简介 红黑树是一种平衡的二叉查找树,是一种计算机科学中常用的数据结构,最典型的应用是实现数据的关联,例如map等数据结构的实现。1972年,鲁道夫贝尔最先发明,但是他称之为“对称二叉B树”,真正的称之为“红黑树”是在1978年Leo J. Guibas 和 Robert Sedgewick的一篇论文开始的。这么算起来,红黑树已经存在了将近30年,时至今日,仍...原创 2011-12-31 19:43:32 · 170 阅读 · 0 评论 -
TCP三次握手/四次挥手详解
1、建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。(3) 客户必须再次回应服务段一个ACK报文,这是报文段3。2、连接终止协议(四次挥手) ...原创 2011-12-27 18:25:16 · 80 阅读 · 0 评论 -
大端(Big Endian)与小端(Little Endian)详解
【大端(Big Endian)与小端(Little Endian)简介】Byte Endian是指字节在内存中的组织,所以也称它为Byte Ordering,或Byte Order。 对于数据中跨越多个字节的对象, 我们必须为它建立这样的约定:(1) 它的地址是多少?(2) 它的字节在内存中是如何组织的? 针对第一个问题,有这样的解释: 对于跨越多个字节的对象,一般它所...原创 2012-08-08 21:42:03 · 114 阅读 · 0 评论 -
大端小端区别、Union和Struct的内存分配
嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。也就是说Big-endian模式符合人的习惯,而Little-endian更加方便计算机操作。例如,16bit宽的数0x1234在Little-endi...原创 2012-08-08 21:43:00 · 123 阅读 · 0 评论 -
位、字节、字、字长”的含义
位(bit,简写为b):是电子计算机中最小的数据单位。每一位的状态只能是0或1。字节(Byte,简写为B):8个二进制位构成1个“字节(Byte)”,它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,换句话说,1个汉字占据2个字节的存储空间。字:“字”由若干个字节构成。如果是一台16位机,那么,它的1个字就由2个字节构成。字是计算机进行数据处理和运算的单位。字...原创 2012-08-08 21:46:29 · 1342 阅读 · 0 评论 -
内部总线、系统总线、外部总线
内部总线:在CPU内部,寄存器之间和算术逻辑部件ALU与控制部件之间传输数据所用的总线称为片内总线(即芯片内部的总线)。 1.I2C总线 (Inter-IC)总线:10多年前由Philips公司推出,是近年来在微电子通信控制领域广泛采用的一种新型总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同...原创 2012-08-09 00:36:33 · 1338 阅读 · 0 评论
分享