操作系统
进击的部落
努力为将来奋斗着
展开
-
地址映射问题
存储器地址和处理器地址 在讲地址映射问题前,先讲述下地址空间。这边有两个概念必须理解,首先是处理器地址空间,然后是存储器地址空间,这两个是不一样的概念。这边处理器地址空间,任何处理器地址的编址都是一个地址对应一个字节,一个字节8位。对于arm来说,1G的地址空间,每个地址对应了1个字节,而存储器地址则不同,存储器的一个地址不一定代表1字节。此处我们举个例子,对于32位宽的SDRA原创 2011-11-20 21:27:32 · 1280 阅读 · 0 评论 -
select,poll,epoll区别
select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。 对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。 1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费 2.1024上限问转载 2013-09-14 22:38:19 · 853 阅读 · 0 评论 -
C++单例模式
今天面试的时候问到一个单例的问题,以前看设计模式的时候看过了,当时也看懂了,但是今天自己写的时候,还是发现有很多问题,于是总结一下: 定义: 单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接原创 2013-09-11 22:11:58 · 825 阅读 · 0 评论 -
环形缓冲区
今天笔试的时候遇到一个唤醒缓冲区问题,然后当时很多函数名都不记得了,所以写的不好,回来后写了下。 环形缓冲区实现的时候可以用数组实现,一个读和写的index,实现的时候要如何判断空间已满?空? 方法1:废弃一个缓冲空间不用,当写指针+1等于读指针的时候(意思是写指针多跑一圈快要赶上读指针),此时表明空间已满。 方法2:维护一个变量记录缓冲区使用大小,当大小等于缓冲区大小,则为满;当原创 2013-09-12 13:08:55 · 1356 阅读 · 0 评论 -
嵌入式Linux操作系统学习规划
ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2)必须掌握一个嵌入式操作系统(初步定为uclinux或linux,版本待定) (3)必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。 从事嵌入式软件开发的好处是: (1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专转载 2013-09-12 09:54:34 · 1055 阅读 · 0 评论 -
C++ 线程安全的单例模式
废话不多说,常用的代码积淀下来。 一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。 需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety. 使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈。 1、静态成员实例的懒汉模式:转载 2013-09-12 09:08:37 · 1320 阅读 · 0 评论 -
linux移植
以前一直都是只移过u-boot没有移过linux,这次尝试下。 现在能够启动的是barebox,我现在准备先做的事情是在天嵌科技提供的u-boot的基础上,启动linux内核。 一、关于机器码 u-boot在启动linux内核的时候,会传过去3个参数,r0,r1,r2.分别是 r0=0 r1=平台编号 r2=参数地址原创 2012-06-11 15:55:38 · 1711 阅读 · 0 评论 -
ARM位置无关代码设计规范
/*******************************************/ 参考:ARM的位置无关程序设计在bootloader中的应用.黄振华 /*******************************************/ 位置无关代码(PIC)在嵌入式系统设计中具有很重要的作用,尤其是在裸机状态下bootloader程序以及进行内核初始化设计;利用PIC也可以转载 2011-11-26 21:53:35 · 657 阅读 · 0 评论 -
连接时出错,(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'
文件1:crt0.s .text .global _start _start: ldr r0,=0x53000000 @WTCON mov r1,#0 str r1,[r0] @close watchdog ldr sp,=4096 bl main halt_loop转载 2011-11-21 21:58:40 · 1777 阅读 · 0 评论 -
栈和堆的区别【总结】
http://www.blogjava.net/zhaojianhua/archive/2011/05/10/349900.html 1.1内存分配方面: 堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。 栈:由编译器(Compiler)自动转载 2013-09-16 21:48:28 · 979 阅读 · 0 评论