- 博客(72)
- 收藏
- 关注
转载 NP芯片重塑高端路由器“灵魂”
6月25日,广东地区出现了部分“网络瘫痪”的情况,期间,用户无法正常访问互联网,邮箱、QQ和MSN都无法登录,给用户的工作、生活造成较大影响。经过广东电信的查询和核实,发现造成“网络瘫痪”的主要原因是广东电信互联网路由器集群中的两台路由器出现运行异常,50%的出省电路受到影响,导致广东电信用户访问省外互联网不畅。而担任出省路由器角色的一般是高端路由器,负责城域网间的流量传输。频繁出现的网络
2009-10-25 15:35:00
4708
转载 路由器基础:路由器转发机制改变
兼容与扩容 行业纵向网的建设通常是分步实现的,从一级网到二级网,再到三级网,这个固有特点也决定了IP语音通信网络分步建设的模式。在分步建设的过程中,语音设备面临着前后兼容,向下扩容的问题。例如,在建设省到地市的二级语音网时,要从设备和体系角度考虑与一级语音网的兼容性,与原有窄带话音网的兼容,也要考虑与运营商IP语音网络的兼容,涉及到不同类型设备、不同厂商设备之间的兼容性问题;同
2009-10-25 15:23:00
1053
原创 c标准库(4)
assert.hassert用于抓住逻辑错误,而不是运行期间错误。当代码准备生成时,应该关闭断言处理,可以在每个翻译单元开始的附近包括以下语句:#define NDEBUGstddef.h定义了宏NULL,是通用的0指针常量。ptrdiff_t 指针相减的类型size_t sizeof的类型,无符号整型数,代表了在开发环境中能声明的最大数据对象的大小wchar_t
2007-06-07 10:02:00
1000
原创 c核心函数库(3)
1 char * fgets(char * s,int size,FILE * stream); 函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。 返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。 范例 #includema
2007-05-24 20:29:00
1046
原创 c语言核心函数库(2)
1 定义函数 int getchar(void); 函数说明 getchar()用来从标准输入设备中读取一个字符。然后将该字符从unsigned char转换成int后返回。 返回值 getchar()会返回读取到的字符,若返回EOF则表示有错误发生。 附加说明 getchar()非真正函数,而是getc(stdin)宏定义。 2 定义函数 int getc(FILE * stream)
2007-05-23 11:20:00
1120
原创 关于计算机硬件的几个常识问题
1.CPU 有所谓的『倍频』与『外频』,外频是所有系统的接口设备运作时候的速度,至于倍频则是 CPU 本身运算 时候加上去的一个运算速度!两者相乘才是 CPU 的频率。不过,由于接口设备并没有这么快的速度,所以,一些接口设备需要将外频除上一个数字,才可以进行沟通。例如一般 PCI 接口的正常速度是 33 ,所以,如果你的 CPU 外频是 133 时,么接口设备的速度就要再除以 4 才能跟系统沟通
2007-05-09 09:59:00
860
转载 请求调页
请求调页是一种动态内存分配技术,进程运行的时候不访问全部的地址空间,把页框的分配推迟到不能再推迟为止。以下原因页 可能不在主存中1.进程永远没有访问到这个页2.进程已经访问这个页,但是页的内容被临时保存到磁盘上。handle_pte_fault()通过检查引用address的页表项来区分这两种情况。有两种方法装入所缺的页,这取决于是否映射到一个磁盘文件,do_no_pag
2007-04-24 16:14:00
1024
原创 缺页异常处理
两种缺页异常的情况:错误编程和属于地址空间但是还没有分配页框的所引起的do_page_fault第一步操作时读取引起缺页的线性地址,这个地址保存在address局部变量中:首先判断是否在内核空间(即检查缺页的线性地址是否属于第4G,是的话goto vmalloc_fault,处理因在内核态访问一个非连续内存而引起的错误)然后看cpu是否在执行中断或者执行内核进程如果不是,再判断是否
2007-04-24 09:57:00
1586
转载 linux进程调度解析
1调度器的启动通常有两种方式:A. 主动式在核心应用中直接调用schedule()。这通常发生在因等待核心事件而需要将进程置于挂起(休眠)状态的时候--这时应该主动请求调度以方便其他进程使用CPU。下面就是一个主动调度的例子:/* 节选自[drivers/input/mousedev.c] mousedev_read() */add_wait_queue(&list->mousedev->wait
2007-04-17 09:38:00
1405
转载 linux的进程(任务)优先级
进程调度依据调度程序运行时,要在所有可运行状态的进程中选择最值得运行的进程投入运行。选择进程的依据是什么呢?在每个进程的task_struct结构中有以下四项:policy、priority、counter、rt_priority。这四项是选择进程的依据。其中,policy是进程的调度策略,用来区分实时进程和普通进程,实时进程优先于普通进程运行;priority是进程(包括实时和普通)的静
2007-04-16 19:29:00
8026
转载 深入分析 Linux 内核链表
在 Linux 内核链表中,不是在链表结构中包含数据,而是在数据结构中包含链表节点 本文详细分析了 2.6.x 内核中链表结构的实现,并通过实例对每个链表操作接口进行了详尽的讲解。一、 链表数据结构简介 链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据
2007-04-15 10:37:00
952
转载 hlist 哈希链表
Linux 链表设计者(因为 list.h 没有署名,所以很可能就是 Linus Torvalds)认为双头(next、prev)的双链表对于 HASH 表来说 "过于浪费",因而另行设计了一套用于 HASH 表应用的 hlist 数据结构--单指针表头双循环链表,从上图可以看出, hlist 的表头仅有一个指向首节点的指针,而没有指向尾节点的指针,这样在可能是海量的 HASH 表中存储的表头就能
2007-04-14 22:17:00
1174
原创 linux内核中的list详解
1 list_entry作用就是通过list_head型指针ptr换算成其宿主结构的起始地址,该宿主结构是type型的,而ptr在其宿主结构中定义为member成员。定义在内核源文件include/linux/list.h中,对比list_entry(ptr,type,member)可知有以下结果: 其中list相当于member成员,struct example_struct相当于
2007-04-14 20:32:00
6243
1
原创 白噪声、高斯白噪声
1.所谓白噪声是指它的功率谱密度函数在整个频域内是常数,即服从均匀分布。之所以称它为“白”噪声,是因为它类似于光学中包括全部可见光频率在内的白光.白噪声的功率谱密度函数通常被定义为 由信号分析的有关理论可知,功率信号的功率谱密度与其自相关函数互为傅氏变换对,即因此,白噪声的自相关函数为上式表明,白噪声的自相关函数是一个位于处的冲激函数,它的强度为。这说明,白噪声只有在/2时才相关,
2007-04-14 11:07:00
31471
4
转载 在Redhat Linux 9中编译和配置gvim 7.0
1. 下载vim的源码: vim的官方网站是:[url]www.vmunix.com/vim[/url] 可以用这个链接下载源码包:[url]ftp://ftp.jp.vim.org/pub/vim/unix/vim-7.0.tar.bz2[/url] 2. 配置: 如果想编译出gvim,要用下面这句配置命令: $ ./configure / --prefix=/u
2007-04-01 21:45:00
1500
原创 vim插件 安装
1 taglist首先ctags,在下载最新版的EXUBERANT CTAGS时,要求glibc2.3.4以上 ,没有办法 ,有了一个旧版本的ctags,不过 一样用。当时贪图方便,装了rpm版本,在网上看到一个装src的例子:解压并安装 tar zxvf ctags-5.6.tar.gz cd ctags-5.6 ./configur
2007-03-26 10:10:00
1205
转载 Joel Spolsky给计算机系学生的建议 及一些个人看法
Joel Spolsky给计算机系学生的建议 毕业前学会写作如果Linus Torvalds不懂如何布道的话,Linux会成功吗? 正象每一个黑客,Linus精通写作,他知道如何准确地在email和邮件讨论组中使用书面英语表达自己的思想,所以他能够从全世界召集大量志愿者为Linux工作。你听说过最近风靡全世界的极限编程(Extreme Programming)吗? 即使你不懂什么是极限
2007-03-23 11:42:00
1751
原创 ping 原理
ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请求,受到请求的主机则用类型码为8的ICMP回应。ping 程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。我给的例子不太好,因为走的路由少,有兴趣地可以ping一下国外的网站比如s
2007-03-04 15:52:00
1223
转载 数据库知识小节
1 常见概念──约束、主键、外键、视图约束是数据库服务器强制用户必须遵从的业务逻辑。它们限制用户可能输入指定列的值,从而强制引用完整性。在数据库设计器中创建约束时,约束遵从用于创建和更改表的 ANSI 标准。主键:表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。 当创建或更改表时可通过定义 PRIMARY KEY 约束来创
2007-03-04 15:38:00
891
原创 3种类继承方式
对于公有继承方式: ·基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员可见:基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态;基类的私有成员不可见:基类的私有成员仍然是私有的,派生类不可访问基类中的私有成员。 对派生类对象来说,基类的公有成员是可见的,其他成员是不可见。 所以,在公有继承时,派生类的对象可以访问基类中的公有成员;派生类的成员函数可以访
2007-03-04 10:57:00
3470
转载 函数指针
“函数指针”是指向函数的指针变量,因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参
2007-03-03 20:55:00
925
原创 路由器 网关| 公网、内网 | ICMP的IP重定向报文
1路由器工作在IP层,网关在IP层以上网关是数据出子网的的门户,是一个地址,网关不一定是路由器可以是计算机(但实际上用的也是路由器功能:))。路由器是分析你封装的ip地址,指导数据向那边走的。所以说路由器可以是网关 2公网、内网是两种Internet的接入方式。 内网接入方式:上网的计算机得到的IP地址是Inetnet上的保留地址,保留地址有如下3种形式: 10.x.x.x
2007-03-03 19:30:00
2382
原创 引用的几点问题
引用的几点问题1引用vs指针引用创建时初始化;不能为NULL;一旦初始化,就不能改变引用关系引用是变量别名,在创建时不用分配内存空间 2引用作为函数参数(1)传递引用给函数与传递指针给函数作用相同(2)在内存中没有产生实参副本,直接操作实参,减少了开销 一般变量作为传递给函数的参数,要给形参开辟内存空间,形参是实参的副本(3)使用指针作为函数的参
2007-03-02 13:19:00
843
转载 关于static 的各种数据类型 及在面向对象编程中的应用
一、按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。 1定义全局静态变量的好处:不会被其他文件所访问,修改其他文件中可以使用相同名字的变量,不会发生冲突。 2在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。(1)和全局静态变量一样都在静态存储区域(2)初始化:未经初始化的全局静态变量
2007-03-01 19:19:00
906
原创 sizeof()使用的几点注意 以及小数转二进制数
一个例子:char* ss = "0123456789";sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针sizeof(*ss) 结果 1 ===》*ss是第一个字符char ss[] = "0123456789";sizeof(ss) 结果 11 ===》ss是数组,计算到/0位置,因此是10+1sizeof(*ss) 结果 1 ===》*ss是第一个字符char ss[1
2007-03-01 11:08:00
1422
转载 请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
解答: int checkCPU(){ { union w { int a; char b; } c; c.a = 1; return (c.b == 1); }} 嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-e
2007-02-28 19:37:00
3355
转载 更深层次分析一道试题——指针内存分配
指针参数是如何传递内存的?如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1 中,Test 函数的语句GetMemory(str, 200)并没有使str 获得期望的内存,str 依旧是NULL,为什么?void GetMemory(char *p, int num){p = (char *)malloc(sizeof(char) * num);}void Test(void
2007-02-28 17:30:00
780
原创 ASSERT()和assert() | const,static和volatile要注意的几个问题 |define宏与const区别
1 ASSERT()是干什么用的 ASSERT ()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n在程序中不应该为0,如果为0可能导致错误,你可以这样写程序:
2007-02-28 17:26:00
1056
原创 虚拟继承
虚拟继承例1class a {}; class b:public a {}; class c:public a {}; class d:public b,c {}; d x; 这时x会有a的两份拷贝,浪费空间,也存在二义性 此时b,c要这样声明: class
2007-02-27 20:13:00
781
原创 易出错的地方
一 二分查找算法:1、递归方法实现:int BSearch(elemtype a[],elemtype x,int low,int high)/*在下届为low,上界为high的数组a中折半查找数据元素x*/{ int mid; if(low>high) return -1; mid=(low+high)/2; if(x==a[mid]) return mid; if(x else
2007-02-27 15:20:00
765
原创 C++多态如何实现 | sys_brk原理
1、C++多态如何实现重载overload是相同范围内,函数名相同,参数不同; 覆盖override不同范围内(派生类和基类),函数名相同,参数也相同,基类函数必须有virtual关键字; 重载的意义在于针对同一函数调用提供了多种可选版本; 而覆盖一般是指派生类的成员函数去覆盖基类的(同名)成员函数,使在派生类的作用域内只有派生类自己那个成员函数可见,而要调用基类的同名函数
2007-02-27 10:54:00
1256
转载 ldd3-内核内存分配
ldd3-内核内存分配先总结内存分配,明天我再来总结Mmap和DMA技术-------------------------------以下忽略了内存池分配技术和per-CPU变量的相关内容。kmalloc函数不对所获取的内存空间清零,分配的区域在物理内存中也是连续的。#include void *kmalloc(size_t size, int flags);最常用的标志是GFP_KERNEL,表
2007-01-27 16:27:00
2117
转载 Linux内存管理
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析Linux地内存管理与使用。在本章最后我们给出一个内存映射地实例,帮助网友们理解内核内存管理与用户内存管理之间地关系,希望大家最终能驾驭Linux内存管理。 前言内存管理一向是所有操作系统书籍不惜笔墨
2007-01-27 16:22:00
1127
转载 内存模型
现在的每个进程使用了全部4G线性空间。在加载程序时内核把程序加载到线性地址0x08048000开始的位置。这个位置当然>128MB。2G开始是共享库,3G开始是内核。了解linux的 内存模型,或许不能让你大幅度提高编程能力,但是作为一个基本知识点应该熟悉。坐火车外出旅行时,即时你对沿途的地方一无所知,仍然可以到达目标地。但是 你对整个路途都很比较清楚的话,每到一个
2007-01-26 16:48:00
1075
原创 共享内存
共享内存(上)共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像
2007-01-26 16:15:00
1018
原创 brk和sbrk
brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从 这一块分配的。如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动,sbrk函数在内核的管 理下将虚
2007-01-26 12:09:00
2036
原创 守护进程
守护进程工作原理和方式 在Client/Server模式下。服务器监听(Listen)在一个特定的端口上等待客户连接。连接成功后服务器和客户端通过端口进行数据通信。守护 进程的工作就是打开一个端口,并且等待(Listen)进入连接。如果客户端产生一个连接请求,守护进程就创建(Fork)一个子服务器响应这个连接,而 主服务器继续监听其他的服务请求。 2.守护进程工作方式: (1)运行独立的守
2007-01-19 11:15:00
773
转载 什么是TTY
在学习Linux过程中,/proc/$pid/stat中有TTY这个缩写,/dev里面也有,不知道是什么,经查询,记录如下:tty是Teletype的缩写(转)终 端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。Teletype是最早出现的一种终端设 备,很象电传打字机(或者说就是),是由Teletype公司生产的。设备名放在特
2007-01-17 20:17:00
1190
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人