- 博客(41)
- 资源 (25)
- 收藏
- 关注
原创 Linux内存管理之进程创建的写时拷贝技术
Unix的进程创建很特别。许多其他的操作系统都提供了产生进程的机制,首先在新的地址空间创建进程,读入可执行的文件,最后开始执行。Unix采用了与众不同的实现方式,它把上述步骤分解到两个单独的函数中去执行:fork()和exec()。(这里的exec是指exec一族的函数,内核实现了execve函数,在此基础上还实现了execlp、execle、execv和execvp等)。首先fork通过拷贝当前
2017-04-17 21:31:17
3214
原创 嵌入式开发之DRAM/SARM/NOR FLASH/NAND FLASH
虽然自己是做嵌入式开发的,但是自己每次都被这几个名字搞的有点晕乎,或许你也可以问下你身边做嵌入式开发的,开发用的内存是多大?用的是哪种存储介质?flash用的是多大?用的是NOR FLASH还是NAND FLASH?这两个有什么不一样?估计回答的是一知半解的。好了,下面我们言归正传,就来说下这几种存储介质RAMRAM(Random AccessMemory)的全名为随机存取记忆体,
2017-04-10 22:08:32
2309
原创 Linux内存管理之vmalloc和kmalloc
了解linux操作系统的,我们都知道内存管理对于linux操作系统的重要性,当然其他操作系统内存管理也占有举足轻重的角色。在内核里分配内存可不像在其他地方分配内存那么容易。造成这种局面的因素有很多,从根本上讲,是因为内核本身不能像用户空间那样奢侈地使用内存。内核与用户空间不同,它不具备这种能力,它不支持简单便捷的内存分配方式。比如,内核一般不能睡眠。此外,处理聂村分配错误对内核来说也绝非易事。
2017-04-10 21:30:24
1827
原创 链表反转-数据结构
分别设置三个指针。第一个指针保持结果,第二个指针指向当前的节点,第三个指针保存下一个节点void reverseLinkList(LinkList *head){ Linklist *p1,*p2,*p3; if(head == NULL) return 0; p1 = head; p2 = p1 -> next; while(p2) { p3= p2 -> next; p2 -> next = p1; p1 = p2; p2 = p3; } ret
2016-12-14 22:54:22
1359
原创 整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间?
整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间? int singleNumber(int arr[], int n){ printf("n = %d\n",n); int result = 0; for(int i=0; i < n; i++) { result ^= arr[i]; } r
2016-12-10 20:46:28
1734
原创 字符串匹配算法的实现
为了保持自己的编程能力的不断提升,平时还是要多注意培养自己思考问题以及自己的动手能力,每次抽空记录下自己平常没事写的程序,留待以后碰到好的方法再进行修改,也算是不断的提升自己 今天要实现的算法就是字符串匹配算法,我这种实现方法是直接的暴力匹配算法,当然还有经典的KMP算法,但是自己还没有学会,所以留待以后再补充吧好了,废话不多说了,直接上代码/*字符串匹配算法*/#includ
2016-12-10 19:48:49
1024
原创 ARM 关键几个寄存器
1. PC(程序计数器) = windows 中 EIP解析: 处理器要执行的程序(指令序列)都是以二进制代码序列方式预存储在计算机的存储器中,处理器将这些代码逐条地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条取指指令的地址.程序计数器(PC)正是起到这种作用,所以通常又称之为‘指令计数器’。CPU总是按照PC的指向对指令序列进行取指、译码和执行,也就是说,最终是PC 决定了程序运行流向。故而,程序计数器(PC )属于特别功
2016-11-19 15:07:14
1705
原创 嵌入式开发中如何对存储器进行测试
嵌入式的开发过程中,嵌入式开发初期,固件人员需要做的事情有哪些呢?既然boot_loader负责是帮其他程序布置可运行的执行环境,那么我们认为这个第一版的real size板子做哪些测试,才能保证这个包含 硬件板子与boot loader执行环境是正确的。以下就是要验证的项目:(1)CPU寄存器操作测试(2)stack size的设定是否正确?function call是否可正确运行?(3)存储器初始化操作的测试,并保证所有的存储器都可以正常读或写(4)将data段载入RAM,对BS
2016-11-19 13:51:10
1389
原创 c语言验证哥德巴赫猜想
什么是哥德巴赫猜想,哥德巴赫猜想就是,任一大于2的偶数都可以写成两个素数之和,那么下面我们就用c语言去验证这种猜想
2016-11-18 21:14:55
12629
1
原创 从二层交换机来说为什么三层交换机比路由器转发速率快
我们都知道二层交换机工作的数据链路层,依靠mac地址来进行数据通信的,而路由器是工作在网络层,依靠ip地址来通信的,为了说明三层交换机比路由器的转发速率快,那我们还是先从二层交换机入手。首先我们来比较下二层交换机与路由器的报文转发速率(当然严格意义上是不能这样比较的,毕竟一个是二层设备,一个是三层设备,这主要是为下面说明三层交换机与路由器之间的比较做铺垫)二层交换机:接收到由自己的物理层送
2014-04-23 15:35:16
6148
原创 vxworks与linux区别
自己目前开发的嵌入式开发所用的操作系统是VxWorks,以前读大学的时候用的最多的是linux操作系统,但是,对于这两种操作系统之间到底有什么区别,还真没有真正去细心的总结过,被别人问起时,难免有些尴尬的感觉,毕竟自己是学嵌入式开发的,竟然对嵌入式开发系统了解的不深入,今天专门抽时间好好的总结下,二者到底有什么区别? V
2014-04-17 10:20:13
25531
原创 如何判断CPU是大端还是小端模式
在ARM体系中,每个字单元包含4个字节单元或者两个半字单元。在字单元中,4个字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式:big-endian和little-endian格式。在小端模式中,低位字节放在低地址,高位字节放在高地址;在大端模式中,低位字节放在高地址,高位字节放在低地址。在C语言中,不同于结构体,共用体(联合体)中的几种不同类型的变量存放在同一段内存单元中。
2014-04-04 17:12:46
1723
原创 排序算法
突然发现好久没有写博客了,最近工作一直在忙,或许这只是个接口吧,其实是有点懒了,为了鞭策自己不断的向前,还是要坚持的写下去。最近碰到一些算法问题,比如排序,发现等到用的时候却突然遗忘了,我想这就是学会了但没有进行总结的原因,这篇文章就对排序算法慢慢的进行总结和回顾吧。1、插入排序算法插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1.
2014-04-02 15:30:20
1309
原创 《TCP-IP详解 卷2:实现》学习笔记—接口层分析
所谓接口,就是指在一个特定网络上硬件与设备驱动器之间的接口。BSD设计将网络协议和连接到一个系统的网络设备的驱动器间提供一个与硬件无关的编程接口。1、ifnet结构结构ifnet中包含所有接口的通用信息。在系统初始化期间,分别为每个网络设备分配一个独立的ifnet结构。每个ifnet结构有一个列表,它包含这个设备的一个或多个协议地址。函数if_attach在系统初始化期间构造这个链表。if_addrlist指向这个接口的ifaddr结构列表。每个ifaddr结构存储一个要用这个接口通信的协议的地址信
2013-11-26 19:56:46
2605
原创 《TCP-IP详解 卷2:实现》学习笔记—mbuf的深入解析
下面将要经常会的遇到的四种不同类型的mbuf,它们依据在成员mh_flags中填写的不同标志M_PKTHDR和M_EXT而不同。1) 第一类mbuf的mh_flags等于0,mbuf只包含数据,在mbuf中有108字节的数据空间,指针mh_data指向这108字节缓存中的某个位置。2) 第二类mbuf的mh_flags值是M_PKTHDR,它指示这是一个分组首部,描述一个分组数
2013-11-26 18:55:55
3187
转载 不是技术牛人,如何拿到国内IT巨头的Offer
不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰。看看这些牛人,NOI金牌,开源社区名人,三年级开始写Basic...在跪拜之余我们不禁要想,和这些牛人比,作为绝大部分技术屌丝的同学们,是否真的与国内IT巨头遥不可及呢?当你打开这个帖子的时候,我已经默认你是此文的目标读者,也就是想进入国内一流互联网企业的非牛人应届生。你不需要拿NOI的奖,无需是开源社区名人,
2013-11-01 09:21:45
1637
原创 内存字节对齐问题
刚才工作的时候跟一同事突然问起内存对齐问题,但是自己突然又想不起来,关于内存字节对齐,我想大家都一样,看了忘、然后下次再碰到的时候还得继续查,所以比较苦恼!下面我就根据自己的总结来说下这个内存
2013-10-30 19:38:57
1673
原创 SNMPv3认证和加密过程
1 UsmSecurityParameters(安全参数)安全参数存在于snmp消息中的msgSecurityParameters字段,以ASN.1语法定义如下:UsmSecurityParameters ::= SEQUENCE { -- global User-based security parameters msgAuthoritativeEngineID OCTET STRING, ms
2013-10-30 09:23:54
13477
原创 SNMP协议详解<三>
在上篇文章中,说到了SNMPv3主要在安全性方面进行了增强,采用USM(基于用户的安全模型)和VACM(基于视图的访问控制模型)技术。下面我们就主要讲解SNMPv3的报文格式以及基于USM的认证和加密过程!1、SNMPv3的消息格式如下图1: 图 1 其中,整个SNMPv3消息可以使用认证机制,并对EngineID、ContextName、PDU消息体
2013-10-30 08:56:37
14270
1
原创 SNMP协议详解<二>
上一篇文章讲解了SNMP的基本架构,本篇文章将重点分析SNMP报文,并对不同版本(SNMPv1、v2c、v3)进行区别!四、SNMP协议数据单元在SNMP管理中,管理站(NMS)和代理(Agent)之间交换的管理信息构成了SNMP报文,报文的基本格式如下图1: 图 1SNMP主要有SNMPv1、SNMPV2c、SNMPv3几种最常用的版本。1、SNMPv1S
2013-10-29 09:27:18
175175
原创 strcpy和memcpy函数的深入剖析
上面的文章已经为讲解了strcpy和memcpy函数的区别,但是后来通过验证,发现两个函数实现的代码写的有各种漏洞,所以在此继续深入的理解去解析这两个函数的实现。首先strcpy函数的实现,上篇文章中的代码实现如下:char *strcpy(char *dest, const char *src) // 实现src到dest的复制{ if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性 { return NULL;
2013-10-28 19:59:06
1781
原创 SNMP协议详解<一>
一、首先我首先要说下什么是SNMP?SNMP是简单的网络管理协议,它不是一个软件,而是用于网络管理的一套规则。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。但话又说回来,为什么要使用SNMP协议?因为网络设备可能来自不同的厂商,如果每个厂商提供一套独立的管理接口,将使网络管理变得越来越复杂,若想对网络中来自不同厂商的设备监控,用基于SNMP开发的软件进行管理最方便的,因为大部分的设备都支持SNMP协议。那么SNMP有哪些技
2013-10-27 09:47:05
16407
3
原创 我的'搬砖'梦
我的梦在这个夏季带着懵懂踏入到职场之中,这个夏天对我来说不再那么青涩,一个新的环境,一个新的考验,怀着梦想带着追求,开始新的生活。在追求梦想的路途中,我们要学会孤单,学会长大。不再像一个孩子那样任性,那样的懵懂无知。不再为时光匆匆流逝感伤喟叹,怀念白驹过隙的一瞬美妙的剪影。不再是孩子那样悠闲自在,应该承担起家庭的责任和期望,这就是我们现在要做的。 记得苏格拉底说过:世界上最快乐的事,莫过于为理想而奋斗。我们从不怀疑,因为梦想只要经过奋斗,就可能变成现实。哪怕没有成功,我们也不后悔,因为我们至少奋斗
2013-09-12 08:21:27
1207
原创 strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。Memcpy的原型是:void *memcpy( void *dest, const void *src, size_t
2013-09-05 14:08:23
1099
原创 C和指针 学习笔记—第3章
第三章 数据 1、变量的三个属性:作用域、链接属性和存储类型(这三个属性决定了一个变量的“可视性”(也就是它可以在什么地方使用)和“生命期”(它的值将保持多久))。
2013-09-01 11:28:24
1098
原创 《TCP-IP详解 卷1:协议》学习笔记(三)
四、ARP1、ARP地址解析过程以太网中,发送IP包前判断目标主机是否在同一子网,如果是同一子网,请求目标主机MAC,如果是不同子网,请求网关/下一跳MAC。源主机查看 ARP 缓存,是否存在要解析的IP—MAC的ARP映射表项。如果有,利用该表项对IP包进行封装并发送以太网帧。如果没有,则缓存该IP包,并建立ARP临时表项。以广播方式发送ARP请求报文。 ARP请求报文中的Sender IP和Sender MAC为源主机A的 IP地址和MAC地址,Target IP和Target MAC
2013-08-30 19:50:25
1956
原创 《TCP-IP详解 卷1:协议》学习笔记(二)
三、VLAN技术的研究1、首先说一下VLAN的概念,何为VLAN?VLAN(Virtual Local Area Network)即虚拟局域网,是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的新兴技术。VLAN是为解决以太网的广播问题和安全性而提出的一种协议,它在以太网帧的基础上增加了VLAN头,用VLAN ID 把用户划分为更小的工作组,限制不同工作组
2013-08-30 09:19:03
2015
原创 《TCP-IP详解 卷2:实现》学习笔记—mbuf(存储器缓存)的结构
《TCP/IP详解 卷2:实现》的源码讲解主要来自4.4BSD-Lite,可以在网络上都能搜的到,然后可以安装个Source Insight ,结合代码,边学边体会。在学习代码的过程中,首先应该弄清最基本的数据结构,这样只有理解了最基本的框架,你才能更好的找到主线,否则无从下手的感觉,对于伯克利联网代码设计中,最重要也是最基本的一个概念就是存储器缓存,也即是mbuf。何为mbuf呢?mbuf的主要用途是保存在进程和网络接口间互相传递的用户数据。但mbuf也用于保存其他各种数据:源与目标地址、插口
2013-08-28 19:15:24
2223
原创 《TCP-IP详解 卷1:协议》学习笔记(一)
1、如何区别DIXV2帧和IEEE帧?由于二者在同一个局域网内是不能共存的。因此,IEEE允许现存的DIXV2网卡和网络设备到IEEE的标准设备的迁移。为了使设备可以识别使用的是哪种类型的帧,IEEE没有分配1536以下(十六进制为600)的数位协议类型代码。数据字段的最大值为1500字节。所以一台设备可以从源地址后的两个字节来判断是哪种类型的帧,如果值为1536(十进制)或更高则为类型字段,意味着是DIXV2帧,如果从源地址之后的2个字节小于1536,则可确定是长度字段,为IEEE802.3帧
2013-08-28 10:33:02
2319
2
原创 C和指针 学习笔记—第1-2章
C和指针这本经典著作,最近开始学习,然后想与大家共享下,希望共同进步!网络的力量是强大的,会碰撞出思想的火花来! 第一章 快速上手1、要从逻辑上删除一段C代码,更好的办法是使用#if指令:#if 0statements#endif在 #if 和 #endif 之间的程序段就可以有效地从程序中去除,即使这段代码之间原先存在注释也无妨2、关于scanf返回值的问题 scanf函数,与printf函数一样,都被定义在stdio.h里,因此在使用scanf函数时要加上#
2013-08-28 10:04:03
1295
原创 桥接协议数据单元(BPDU)
生成树协议(STP)在交换机互相通信时进行操作,数据报文以桥协议数据单元(BPDU)的形式进行交换。每隔2秒,BPDU报文便向所有的交换机端口发送一次,以便交换机(或网桥)能交换当前最新的拓扑信息,并迅速识别和检测其中的环路。BPDU报文交换的目的是,选定一个合适的参考点作为基础,以求获得一个稳定的生成树拓扑。BPDU消息格式:DMA
2013-08-27 16:08:34
4935
原创 一个进程在内存中的布局
对于一个完整的程序,在内存中分布情况如下图: 值得一提的是:在C#中struct存放在栈区,class存放在堆区,所以一般struct要比class要快的。 堆和栈的比较表(仅针对C++) 栈(Stack)堆(Heap)申请方式由OS自动分配。例如在函数声明
2013-08-14 14:16:01
1092
原创 ARP/代理ARP的总结
1.ARP首先讲到ARP,ARP是地址解析协议,它的作用是在以太网环境下,通过3层的IP地址来找寻2层的MAC地址,得到一张ARP缓存表。转发数据的时候根据ARP缓存表来进行传输。下图详细说明数据传输时ARP是如何一步步操作的。在配置IP地址后,不做任何ping操作,ARP缓存表是这样的:当PC去ping R1的时候,你会发现第一个丢包了。像这样R1#ping 192.
2013-08-12 09:35:21
1957
原创 深入剖析三层交换机的工作过程
路由器的三层转发主要依靠CPU进行,而三层交换机的三层转发依靠ASIC芯片完成,这就决定了两者在转发性能上的巨大差别。当然,三层交换机并不能完全替代路由器,路由器所具备的丰富的接口和
2013-07-23 10:54:45
6933
1
原创 组网基础之深入解析二层组播
所谓二层组播,即数据帧的转发是面向二层的,根据组播MAC地址来决定数据帧的转发方向,而三层组播,即所谓的IP组播,则根据三层组播地址,即组播IP地址来进行数据帧的转发。 二层组播相关协议包括IGMP 和GMRP协议。让我们从分析组播MAC地址开始,逐步而深入的了解二层组播。组播MAC地址所谓组播MAC地址,是一类逻辑的MAC地址,该MAC地址代表一个组播组,所有属于该组的成员都接收
2013-07-19 08:38:11
3441
1
转载 程序员成长之路
我的程序员成长之路程序员的成长经历往往很相似,大部分的人走过了最前面相同的一段路,而有的人则走得更远。总结自己这些年来的历程,这也许能让年轻的程序员少走一些弯路,成长得更快;或许更好一些,能让大家从中得到一些启发,早日进入优秀程序员的阶段,实现梦想,释放激情。第一阶段,最初是在学校里学习计算机基础知识,学习经典的程序设计语言,编写测试用的小程序。这个过程可以说是对计算机和程序设计的入门阶段
2013-07-15 17:59:33
1053
原创 VLAN中SVL和IVL的区别
支持VLAN的二层交换机,其二层转发和MAC地址维护方式都发生了一定的变化,下面分别讨论两种不同的MAC地址维护方式的交换机。 SVL方式的二层交换机SVL(Shared VLAN Learning)方式的二层交换机在学习MAC地址并建立MAC地址表的过程中并不附加VLAN ID,或者说它的MAC地址表是为所有VLAN共享使用的。它的二层转发基本流程如下:(1) 根据接收
2013-07-15 17:53:04
7016
原创 IGMP Snooping技术介绍
IGMP Snooping简介IGMP是Internet Group Management Protocol Snooping(互联网组管理协议窥探)的简称,它是运行在二层设备上的组播约束机制,用于管理和控制组播组。IGMP Snooping原理运行IGMP Snooping的二层设备通过对收到的IGMP报文进行分析,为端口和MAC组播地址建立起映射关系,并根据这样的映射关系转发组播数
2013-07-15 17:50:43
3735
原创 二层交换机、三层交换机和路由器的基本工作原理和三者之间的主要区别
二层交换机:二层交换技术是发展比较成熟,二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。具体如下:(1)当交换机从某个端口收到一个数据包,它先读取包头中的源MAC地址,这样它就知道源MAC地址的机器是连在哪个端口上;(2)再去读取包头中的目的MAC地址,并在地址表中查找相应的端口;(3
2013-07-15 17:41:13
29668
2
原创 128*64点阵图形液晶显示屏程序设计教程
使用PROTEUS仿真软件中的液晶显示屏(型号AMPIRE12864)探索点阵液晶的编程方式;该型号液晶屏内部无字库,只能自建字模进行字符显示(使用方法与图形显示方式一致);字模可通过“字模提取”软件提取,省去手工建模的麻烦。整体电路图 功能说明:该电路使用AT89C52作控制器,电路左下方为时钟芯片DS1302;用液晶屏显示当前时间、若干汉字、一幅小图等内容;电路连线:
2011-12-17 11:21:13
14092
1
基于java的聊天室(webjsp)
2012-04-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人