基础知识
文章平均质量分 59
iteye_661
这个作者很懒,什么都没留下…
展开
-
关于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 · 353 阅读 · 0 评论 -
满二叉树及完全二叉树的定义
满二叉树:除了叶节点,每个父亲节点都有两个子树的,满满的二叉树完全二叉树:所有节点集中在树左边的二叉树,就是说除了叶节点,每个节点都只有左节点或者有两个节点,而没有只有右节点情况 深度为K,有N个结点的二叉树当且仅当其每一个结点都与深度为K的满二叉树中编号从1-N的结点一一对应时,成为完全二叉树。举例说明,深度假设为3. 满二叉树是这样的. (见图1)这6个节点,按先横后竖的方法把这个二叉树的...原创 2012-09-25 10:39:02 · 337 阅读 · 0 评论 -
LINUX进程, 线程
http://shaohui.me/archives/256 N久之前, 某两人为了linux的调度基本单元是进程还是线程争得面红耳赤, 当然, 且不论为了一个技术问题不顾体面其用心何在, 单纯从技术角度讲, 这是个挺好的问题. 单纯的下一个结论几乎总是错误的, 所谓的对与错也只不过是在特定的时段和特定的场景下符合规律的一种状态, 一旦时过境迁, 对的东西往往变成了错误的, 而...原创 2012-09-08 12:55:25 · 95 阅读 · 0 评论 -
linux线程浅析
http://hi.baidu.com/_kouu/item/282b80a933ccc3a829ce9dd9关于linux线程在许多经典的操作系统教科书中, 总是把进程定义为程序的执行实例, 它并不执行什么, 只是维护应用程序所需的各种资源. 而线程则是真正的执行实体. 为了让进程完成一定的工作, 进程必须至少包含一个线程. 如图1.进程所维护的是程序所包含的资源(静态资源), 如: 地...原创 2012-09-08 12:32:16 · 95 阅读 · 0 评论 -
Linux进程-进程的创建
今天学习了Linux的进程创建的基本原理,是基于0.11版本核心的。下面对其作一下简单的总结。一、Linux进程在内存中的相关资源 很容易理解,Linux进程的创建过程就是内存中进程相关资源产生的过程,那么Linux进程在内存中有哪些相关资源呢? 1)task数组中的一项:一个指针指向进程的task_struct 2)一页内存:task_struct(Linux进程控制块)和内核态堆栈...原创 2012-09-07 23:07:03 · 164 阅读 · 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 · 2688 阅读 · 0 评论 -
内存分段机制
转:http://book.51cto.com/art/200812/103305.htm在内存分段系统中,一个程序的逻辑地址通过分段机制自动地映射(变换)到中间层的4GB(232B)线性地址空间中。程序每次对内存的引用都是对内存段中内存的引用。当程序引用一个内存地址时,通过把相应的段基址加到程序员看得见的逻辑地址上就形成了一个对应的线性地址。此时若没有启用分页机制,则该线性地址就被送到...原创 2012-09-03 09:24:13 · 237 阅读 · 0 评论 -
Linux内核学习之分段机制
转:http://www.linuxidc.com/linux/2008-10/16740.htmX86分段机制 这里讲的分段指的保护模式(protected mode)下的段机制。与保护模式相对的一个概念是实模式(real mode),实模式的地址由“段基址:偏移量”组成,段基址是个16位的寄存器(CS,DS等),这样显然限制了系统的寻址空间。保护模式的地址由“段选择子+偏移...原创 2012-09-03 09:21:33 · 142 阅读 · 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 · 372 阅读 · 0 评论 -
分页和分段内存的区别
转:http://www.cnhonkerarmy.com/forum.php?mod=viewthread&tid=118503今天看了一下linux0.01的内核开发。虽然仅有8000行的代码。但涉及的知识面还是有点多。但万事开头难嘛。现在和大家分享一下在网上看到的一篇内存分页和分段的区别。感觉看了这篇文章能对这方面有个较为直观的印象了。一. 分页存储管理1.基本思想用户程序的地址...原创 2012-09-01 01:44:33 · 1647 阅读 · 0 评论 -
流水线、超流水线、超标量技术对比
http://blog.csdn.net/do2jiang/article/details/4545889流水线 流水线技术是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术。程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未执行完时,提前启动后续指令的另一些操作步骤。这样显然可加速一段程序的运行过程。 市场上推出的各种不同...原创 2012-08-25 08:20:25 · 419 阅读 · 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 · 561 阅读 · 0 评论 -
for(;;) 和 while(TRUE)效率比较
个人认为for(;;),效率更高。原因for循环中什么都没有执行,所以耗费的内存空间要小一些。while循环中还要每次都执行true语句,要耗费一定的内存。编译后的代码:编译前 编译后 while (1); mov eax,1 test eax,eax ...原创 2012-06-12 10:12:17 · 633 阅读 · 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 · 74 阅读 · 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 · 83 阅读 · 0 评论 -
睡眠和休眠有什么区别?
到底用睡眠和休眠,还是直接关机的问题,争论颇多,大家各有各的观点和立场。在此对这个问题,简要分析一下可能涉及到的几个方面。在大部分情况下使用睡眠和休眠就可以了,重启和关机是在极少数情况下使用的,比如安装了新软件要求重启,或者系统出现了严重故障。下面从几个方面来说这个问题,这里默认了一个前提,就是你的主板支持s3待机。究竟哪些主板支持?我家有台老爷机,2001年买的,它都支持,我想不必再多...原创 2012-12-08 01:01:39 · 424 阅读 · 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 · 379 阅读 · 0 评论 -
Thread-Specific Data 注:相当于线程内的全局变量,可减少线程内调用其他函数的变量数 ...
Linux多线程编程中引入了Thread-Specific Data(线程相关的数据)的概念 为什么需要"线程相关的数据"呢?怎样使用"线程相关的数据"呢? 1. 为什么需要Thread-Specific Data "线程相关的数据" 例子:实现同时运行两个线程,对于每个线程,在该线程调用的每个函数中打印线程的名字,以及它正在调用的函数的名字. 不使用"线程相关的数据"的两种实现方...原创 2012-11-18 01:20:27 · 126 阅读 · 0 评论 -
简单的RPC编程实践——HelloWorld的实现
近期课程的作业需要用到RPC编程,除了课堂上学到的知识,还得亲自动手。打算先写个简单的HelloWorld练习一下,顺便复习一下学到的知识。 RPC意为远程过程调用协议(Remote Procedure Call Protocol)。编制好单机应用程序,然后划分为两个或多个程序片,加入通信协议使得每片可以在单独的计算机上运行。从一个程序片调用另一个程序片的过程称为远程过程调用,即RPC...原创 2012-11-13 01:39:59 · 136 阅读 · 0 评论 -
L4操作系统(L4/Fiasco介绍)
我们学习操作系统课程的时候,一直在讲微内核,说什么“微内核是现代操作系统的主流”(时间太久,记不清了,如果说错了,不要拍我)。可是事实上,真正进入工业级别应用的微内核操作系统并不多,Microsoft的系统虽然宣称是微内核,但是应该不是,因为从来没有见过一个人可以把XP或者2000系统裁减到50M以内(95/98可以做小,这个可以从网络搜索到相关资料,但是它们是DOS的封装,这里不谈)。...原创 2012-11-11 01:36:48 · 439 阅读 · 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 · 343 阅读 · 0 评论 -
Linux模块编程
Linux模块简介 首先这个module不同于microkernel的module,microkernel的module是一个个的daemon进程,工作于用户 空间,Linux的module只是一个内核的目标代码,内核通过执行运行时的连接,来把它整合到kernel中去,所以说Linux的module机制 并没有改变Linux内核为monolithic OS本质,其module也是工作...原创 2012-11-10 12:38:58 · 113 阅读 · 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 · 602 阅读 · 0 评论 -
内存基础知识——内存中的Bank
也许有的朋友在购买内存后发现:为什么明明在商家那里可以使用,而在自己的电脑里就不能使用了呢?其实这里面就涉及到内存Bank的问题,今天将为大家深入分析出现这种情况的原因。内存Bank分为物理Bank和逻辑Bank。1.物理Bank 传统内存系统为了保证CPU的正常工作,必须一次传输完CPU在一个传输周期内所需要的数据。而CPU在一个传输周期能接收的数据容量就是CPU数据总线的位...原创 2012-08-20 01:18:07 · 1127 阅读 · 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 · 92 阅读 · 0 评论 -
红黑树介绍与分析
最近觉得C++生疏了,拿出侯捷的《STL源码剖析》翻了翻,看到C++ set,map底层实现机制,其中采用的就是红黑树数据结构,另外Linux内核对内存管理和进程调度都用到了红黑树,看来它不能让人小视。自己从网上和书上重新看了下红黑树,把个人的理解放到博客上,跟大家讨论,也作为自己的重新梳理的方式。红黑树(Red-Black Tree)它是在1972 年由Rudolf Bayer 发明...原创 2011-12-31 19:31:58 · 79 阅读 · 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 · 163 阅读 · 0 评论 -
STL关联容器set,multiset,map,multimap
关联容器associative container:被插入的元素并没有一个固定的位置。这不仅是指操作者可能更改其中元素的位置,还有可能——每当新插入一个元素时,容器都会自动的按照某种排序规则将新来的元素放置在合适的位置。也即,这种容器内元素的排列顺序由容器自己的排序规则决定,操作者无能为力。 ==============================================...原创 2011-12-30 23:49:32 · 78 阅读 · 0 评论 -
deque内部实现原理
deque的元素数据采用分块的线性结构进行存储,如图所示。deque分成若干线性存储块,称为deque块。块的大小一般为512个字节,元素的数据类型所占用的字节数,决定了每个deque块可容纳的元素个数。所有的deque块使用一个Map块进行管理,每个Map数据项记录各个deque块的首地址。Map是deque的中心部件,将先于deque块,依照deque元素的个数计算出deque块数,...原创 2011-12-30 23:33:13 · 250 阅读 · 0 评论 -
STL序列容器vector,deque,list
vector 表示一段连续的内存块每个元素被顺序存储在这段内存中,是一个在堆上建立的一维数组,因为在堆上,所以对其进行erase( ),resieze()等操作;还有一点就是,vector不用担心越界当空间不够用的时候,系统会自动按照一定的比例(对capacity()大小)进行扩充。 vector最大的优点莫过于是检索(用operator[])速度在这三个容器中是最快的,还有就是在ve...原创 2011-12-30 23:08:14 · 103 阅读 · 0 评论 -
vector.resize 与 vector.reserve的区别
reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。再者,两个函数的形式是有区别的,reserve...原创 2011-12-30 22:12:07 · 80 阅读 · 0 评论 -
使用指针的好处
一、什么是指针其实指针就像是其它变量一样,所不同的是一般的变量包含的是实际的真实的数据,而指针包含的是一个指向内存中某个位置的地址。二、指针的定义int *pNumber;这样就定义了int类型的指针。指针变量名称以p为首字符,这是程序员通常在定义指针时的一个习惯,以提高便程序的阅读性,表示这是个指针。另外,虽然int* pNumber和int *pNumber是相同的,但是使用后一种的编...原创 2011-12-30 15:16:58 · 2359 阅读 · 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 · 83 阅读 · 0 评论 -
时间复杂度的计算
算法复杂度是在《数据结构》这门课程的第一章里出现的,因为它稍微涉及到一些数学问题,所以很多同学感觉很难,加上这个概念也不是那么具体,更让许多同学复习起来无从下手,下面我们就这个问题给各位考生进行分析。首先了解一下几个概念。一个是时间复杂度,一个是渐近时间复杂度。前者是某个算法的时间耗费,它是该算法所求解问题规模n的函数,而后者是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。 当我们评价一...原创 2011-12-28 18:50:24 · 75 阅读 · 0 评论 -
漫游红黑树之插入篇
<1>. 红黑树简介 红黑树是一种平衡的二叉查找树,是一种计算机科学中常用的数据结构,最典型的应用是实现数据的关联,例如map等数据结构的实现。1972年,鲁道夫贝尔最先发明,但是他称之为“对称二叉B树”,真正的称之为“红黑树”是在1978年Leo J. Guibas 和 Robert Sedgewick的一篇论文开始的。这么算起来,红黑树已经存在了将近30年,时至今日,仍...原创 2011-12-31 19:43:32 · 113 阅读 · 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 · 475 阅读 · 0 评论 -
内存条的BANK是指什么
一.内存芯片的逻辑BANK 在芯片的内部,内存的数据是以位(bit)为单位写入一张大的矩阵中,每个单元我们称为CELL,只要指定一个行(Row),再指定一个列(Column),就可以准确地定位到某个CELL,这就是内存芯片寻址的基本原理。这个阵列我们就称为内存芯片的BANK,也称之为逻辑BANK(Logical BANK)。由于工艺上的原因,这个阵列不可能做得太大,所以一般...原创 2012-08-20 01:17:45 · 341 阅读 · 0 评论 -
x86寄存器说明
x86寄存器说明ebp和esp是32位的SP,BP esp是堆栈指针 ebp是基址指针 ESP与SP的关系就象AX与AL,AH的关系.32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(...原创 2012-08-15 22:06:26 · 81 阅读 · 0 评论 -
寄存器eax的由来
为什么累加寄存器要叫eax呢?Extended accumulator register,就是扩展累加寄存器的意思。其实是有一段历史的 a, 8位累加器。8080。b 基址,c 计数,d数据 ax,16位累加器,由ah,al 组成。x就是h加l,没特别意义,8086。bx=bh+bl,cx=ch+cl,dx=dh+dl eax,32位累加器,80386 rax,64位累加器。X86-64...原创 2012-08-15 21:35:29 · 2077 阅读 · 0 评论 -
内存对齐的规则以及作用
http://www.cppblog.com/snailcong/archive/2009/03/16/76705.html首先由一个程序引入话题: 1 //环境:vc6 + windows sp2 2 //程序1 3 #include <iostream> 4 5 using namespace std; 6 7 struct st1 8 { 9 ch...原创 2012-08-13 00:15:05 · 93 阅读 · 0 评论