- 浏览: 209516 次
- 来自: 北京
文章列表
Linux
系统启动过程分析
操作系统的启动过程,实际上是控制权移交
的过程。Linux 系统启动包含四个主要的阶段:
BIOS initialization, boot loader, kernel initialization, and init
startup
.见下图:
阶段一、
BIOS initialization
,主要功能如下:
Peripherals detected
Boot device selected
First sector of boot device read and e ...
- 2010-02-24 11:34
- 浏览 519
- 评论(0)
装完
NeoShine
Linux 4.0
后,插上耳机后,耳机和喇叭同时发声。
要解决这个故障, 关键问题在于找到文件
ALSA-Configuration.txt
。
这个文件里有声卡类型与
model
(模
- 2010-02-21 11:41
- 浏览 808
- 评论(0)
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。
相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE 1024
表示select最多同时监听1024个fd,当然,可以通过修改头文件再重编译内核来扩大这个数目,但这似乎并不治本。
epoll的接口非常简单,一共就三个函数:1. i ...
- 2010-01-26 15:12
- 浏览 591
- 评论(0)
epoll有两种模式,Edge Triggered(简称ET) 和 Level
Triggered(简称LT).在采用这两种模式时要注意的是,如果采用ET模式,那么仅当状态发生变化时才会通知,而采用LT模式类似于原来的
select/poll操作,只要还有没有处理的事件就会一直通知.
以代码来说明问题:
首先给出server的代码,需要说明的是每次accept的连接,加入可读集的时候采用的都是ET模式,而且接收缓冲区是5字节的,也就是每次只接收5字节的数据:
<!-- <br><br>Code highlighting produced by Actip ...
- 2010-01-26 15:10
- 浏览 613
- 评论(0)
名词解释:
man epoll之后,得到如下结果:
NAME
epoll - I/O event notification facility
SYNOPSIS
#include <sys/epoll.h>
DESCRIPTION
epoll is a variant of poll(2) that can be used either as Edge or Level
Triggered interface and scales well to large numbers of watched fds.
Three system calls are pro ...
- 2010-01-26 15:09
- 浏览 611
- 评论(0)
select
需要驱动程序的支持,驱动程序实现fops内的
poll
函数
。
select
通过每个设备文件对应的
poll
函数提供的信息判断当前是否有资源可用
(
如可读或写
)
,如果有的话则返回可用资源的文件描述符个数,没有的话则睡眠,等待有资源变为可用时再被唤醒继续执行。
下面我们分两个过程来分析
select
:
1. select
的睡眠过程
- 2010-01-07 16:20
- 浏览 591
- 评论(0)
Vi是Unix下最常用的文本编辑器。VIM(Vi
IMproved)则是它的增强版。有人常常拿VIM和emacs比较,VIM尽管不象emacs那样有那么多的功能,但是比emacs更方便、好用。用
过emacs的人肯定会为emacs的一些快捷键感到烦恼,有时候用真希望自 ...
- 2010-01-07 16:17
- 浏览 668
- 评论(0)
想成为嵌入式程序员应知道的0x10个基本问题:
预处理器(Preprocessor)
1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
我在这想看到几件事情:
1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)
2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。
3) 意识到这个表达式将使一个16位机的整型 ...
- 2010-01-07 16:15
- 浏览 710
- 评论(0)
编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就是针对编程工作中的一些体会和经验做相关的阐述。
第一招:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值:
方法A:通常的办法
#define LEN 32
char string1 [LEN];
memset (string1,0,LEN);
strcpy (string1,"This is a example!!"
)
...
- 2010-01-07 16:14
- 浏览 458
- 评论(0)
1
引言
计
算机技术和信息技术的高速发展的今天,计算机和计算机技术大量应用在人们的日常生活中,嵌入式计算机也得到了广泛的应用。
嵌入式计算机是指完成一种或多种特定功能的计算机系统,是软硬件的紧密结合体。具有软件代码小、高度自动化、响应速度快等特点。
特别适合于要求实时和多任务的应用体系。嵌入式实时系统是目前蓬勃发展的行业之一。
但是,实时嵌入式系统的特点使得其软件受时间和空间的严格限制,加上运行环境复杂,使得嵌入式系统软件的开发变得异常困难。
为了设计一个满足功能、性能和死线要求的系统,为了开发出安全可靠的高性能嵌入式系统,开发语言的选择十分重要。
...
- 2010-01-07 16:13
- 浏览 333
- 评论(0)
C++解析XML
http://www.cppblog.com/alantop/archive/2006/05/17/7303.html
Homepage:http://www.grinninglizard.com/tinyxml/
download:http://sourceforge.net/projects/tinyxml
用mingw32-make前修改一下makefile文件,改为如下
# DEBUG can be set to YES to include debugging i ...
- 2010-01-07 16:12
- 浏览 561
- 评论(0)
如果每当一个请求到达就创建一个新线程,开销是相当大的。在实际使用中,每个请求创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源甚至可能要比花在处理实际的用户请求的时间和资源要多得多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。
线程池主要用来解决线程生命周期开销问题和资源不足问题。通过对多个任务重用线程,线程创建的开销就被分摊到了多个任务上了,而且由于
在请求到达时线程已经存在,所以消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使应用程序响应更快。另外,通过适当地调整线程池中的线程数目
可以防止出现资源不足的情况。
一个比较简单的线程池至少 ...
- 2010-01-07 16:10
- 浏览 1217
- 评论(0)
转载请注明出处,或联系fanyuanmail@126.com
用过perl,python,shell的人在使用c语言的字符串时都会觉得c语言字符串的处理太麻烦了。很多程序测试题都会考一些字符串匹配的题。
glib提供了一套非常好的正则表达式api,程序可以非常简单的使用c语言来做字符串的匹配。
比如一个文件 test_regex.txt
11aa222bb33333cccc44444dddddddd
要匹配出所有的数字,使用了glib库的程序
[root@localhost glib_test]# ./g_regex
11
222
33333
44444
...
- 2010-01-07 16:09
- 浏览 455
- 评论(0)
转载请注明出处,或联系:fanyuanmail@126.com
传统的命令行解析,如果提供的参数很多,程序很不灵活,并且很容易出问题
while(getopt())
{
swtich() {
case:
case:
case:
}
}
比如实现下面这个参数,实现起来还是非常麻烦的。
[root@localhost glib_test]# ./glib_test -?
Usage:
glib_test [OPTION...]
Help Options:
-?, --help Show help options
--help-all Show all ...
- 2010-01-07 16:08
- 浏览 482
- 评论(0)
转载请注明出处,或联系 fanyuanmail@126.com
xml的用处越来越广泛了,解析xml得库也非常多,总的来说分为两种,一种是把xml当作一个“树”来进行解析,一种是基于事件类型的
glib就是使用事件类型解析xml。
有5种不同的事件类型
1)一个element的开始
2)一个element的结束
3)element得文本
4)一些stuff
5) 错误
There are five kinds of event which can happen:
The start of an element
The end of an element
Some ...
- 2010-01-07 16:08
- 浏览 301
- 评论(0)