易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux内核的同步机制(一):原子操作

原子操作:UP和SMP的异同
原子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断。在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是"原子操作",因为中断只能发生于指令之间。这也是某些CPU指令系统中引入了test_and_set、test_and_clear等指令用于临界资源互斥的原因。但是,在对称多处理器(Symetric Multi-Processor)结构中就不同了,由于系统中有多个处理器在独立地运行,即使能在单条指令中完成的操作也有可能受到干扰。我们以decl(递减指令)为例,这是一个典型的"读-改-写"过程,涉及两次内存访问。设想在不同CPU运行的两个进程都在递减某个计数值,可能发生的情况是:
1. CPU A(上的进程,以下同)从内存单元把当前计数值(2)装载进它的寄存器中;
2. CPU B从内存单元把当前计数值(2)装载进它的寄存器中。
3. CPU A在它的寄存器中将计数值递减为1;
4. CPU B在它的寄存器中将计数值递减为1;
5. CPU A把修改后的计数值(1)写回内存单元。
6. CPU B把修改后的计数值(1)写回内存单元。
我们看到,内存里的计数值应该是0,然而它却是1。如果该计数值是一个共享资源的引用计数,每个进程都在递减后把该值与0进行比较,从而确定是否需要释放该共享资源。这时,两个进程都去掉了对该共享资源的引用,但没有一个进程能够释放它--两个进程都推断出:计数值是1,共享资源仍然在被使用。
原子性不可能由软件单独保证--必须需要硬件的支持,因此是和架构相关的。在x86平台上,CPU提供了在指令执行期间对总线加锁的手段。CPU芯片上有一条引线#HLOCK pin,如果汇编语言的程序中在一条指令前面加上前缀"LOCK",经过汇编以后的机器代码就使CPU在执行这条指令的时候把#HLOCK pin的电位拉低,持续到这条指令结束时放开,从而把总线锁住,这样同一总线上别的CPU就暂时不能通过总线访问内存了,保证了这条指令在多处理器环境中的原子性。
Linux内核中的原子操作
Linux 2.4.21中,原子类型的定义和原子操作API都放在内核源码树的include/asm/atomic.h文件中,大部分使用汇编语言实现,因为c语言并不能实现这样的操作。
在x86的原子操作实现代码中,定义了LOCK宏,这个宏可以放在随后的内联汇编指令之前。如果是SMP,LOCK宏被扩展为lock指令;否则被定义为空--单CPU无需防止其它CPU的干扰,锁内存总线完全是在浪费时间。
#ifdef CONFIG_SMP
#define LOCK "lock ; "
#else
#define LOCK ""
#e


相关文档:

linux:网络服务配置之—NFS配置管理

2.1.2 用NFS实现资源共享
前面讲的Samba是实现Linux主机之间、Windows和Linux之间实现资源共享的途径。而NFS是实现Linux主机之间共享的另一种途径。NFS最早使用在Sun服务器上,现在已经移植到各种类UNIX系统下了,Windows下也有相应的版本。相对Samba服务,NFS共享具有简单快速的特点,所以目前广泛用于类UNIX主机之间的资 ......

linux平台下oracle数据库安装

注: oracle对linux版本有要求,还有所需的package包不是很好找,如有需要可以发email给我:tianlesoftware@vip.qq.com,我可以传给你.....
Steep1:  下载软件包
10201_database_linux32
openmotif21-2.1.30-14.i386.rpm
Steep3:  设置内核参数(在/etc/sysctl.conf文件中加入下列行)
kernel.s ......

在Linux上交叉编译pppd 2.4.4

在Linux上交叉编译pppd 2.4.4
1. 下载pppd 2.4.4的源代码
ftp://ftp.samba.org/pub/ppp/
2. 直接编译
#./configure
#make clean
#make
3. 交叉编译
修改./pppd-2.4.4/pppd/Makefile, 注释两行:
#wenxy comment #LIBS    += -lpcap
#wenxy comment #CFLAGS  += -DPPP_FILTER
cross compile ......

嵌入式linux教学大纲

1、Linux 基础
安装Linux操作系统
Linux文件系统
Linux常用命令
Linux启动过程详解
熟悉Linux服务能够独立安装Linux操作系统
能够熟练使用Linux系统的基本命令
认识Linux系统的常用服务安装Linux操作系统
Linux基本命令实践
设置Linux环境变量
定制Linux的服务 Shell 编程基础使用vi编辑文件
使用Emac ......

在Linux命令行下安装Oracle 10g

Oracle 10g支持在命令行下用静默模式(Silent)安装,给那些没有安装图形界面的Linux系统提供了极大的便利。
下面以Fedora Core 6为例,介绍在命令行下安装OracleOracle 10g的方法。
1 安装前的准备
准备工作要用登录为root用户来进行。
1.1 选择安装环境的语言
Oracle安装时可以通过环境变量LANG指定安装语言,如果Linu ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号