<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { so-language: zxx }
-->
计算机桌面的“美”确实很抽象,不像女性的美,人们不易表达清楚。但是,
A
相对
B“
更美”的论断,却是比较容易说明白的。
2008
年
7
月
22
日,在《世界开源大会》(
OS
Convention
)上,
Ubuntu
奠基人
Mark
Shuttleworth
发出战斗号令:在两年以内,要使
Linux
桌面比苹果电脑更美(
better
than
)。在走下讲台之前,他面对广大听众说:
"Can
we not only emulate, but can we blow right past
Apple?"
现今,两年快要过去,此豪言仍然萦绕在我们的耳边。
今年
2
月
26
日,
Ubuntu
10.04(LTS)
的
Beta
3
版本按期发布,让人们看到了一线希望。
Ubuntu
新版本给人的第一印象确实不一般,全新的主题页面,让人耳目一新。该版本俨然像是一件软件艺术品(
Art
),给人的直观感受是:温暖(
Warmth
)和清晰(
Clarity
)。该款
Linux
......
Linux 内核简介
现在让我们从一个比较高的高度来审视一下 GNU/Linux 操作系统的体系结构。您可以从两个层次上来考虑操作系统,如图 2 所示。
图 2. GNU/Linux 操作系统的基本体系结构
系统调用接口(SCI)的方法
实际上,体系结构可能并不像图 2 所示的一样清晰。例如,处理系统调用(从用户空间切换到内核空间)的机制可能在各个体系结构上都不相同。提供了对虚拟化指令支持的新型 x86 中央处理单元(CPU)在这方面要比使用传统 int 80h 方法的老式 x86 处理器更加高效。
最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。
GNU C Library (glibc)也在这里。它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。 更多信息,请参看 参考资料 一节中的链接。
Linux 内核可以进一步划分成 3 层。最上面是系统调用接口,它实现了一些基本的功能,例如 read 和 write。系统调用接 ......
图 1. Linux 文件系统组件的体系结构
用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点。
VFS 是底层文件系统的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。有两个针对文件系统对象的缓存(inode 和 dentry)。它们缓存最近使用过的文件系统对象。
每个文件系统实现(比如 ext2、JFS 等等)导出一组通用接口,供 VFS 使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求。例如,对底层设备驱动程序的读写请求会通过缓冲区缓存来传递。这就允许在其中缓存请求,减少访问物理设备的次数,加快访问速度。以最近使用(LRU)列表的形式管理缓冲区缓存。注意,可以使用 sync 命令将缓冲区缓存中的请求发送到存储媒体(迫使所有未写的数据发送到设备驱动程序,进而发送到存储设备)。
什么是块设备?
块设备就是以块(比如磁盘扇区)为单位收发数据的设备,它们支持缓冲和随机访问(不必顺序读取块,而是可以在任何时候访问任 ......
1、特权级
Intel体系结构引入特权级是为了实现保护。所谓386保护模式就是在此基础上建立起来的。系统中每个段(CS、DS、SS)都有自己的特权级,系统中每个任务或程序也都有自己的特权。
2、操作模式
处理器加电或重启后,首先进入实模式,操作系统初始化部分负责从实模式到保护模式的切换。
3、段、段描述符
段是一块连续的内存区域,是基本的内存保护单位。用段描述符来描述。
4、全局和局部描述符表(GDT、LDT)
为了段的管理和查找方便。
5、门描述符
一种特殊的段描述符,属于系统段描述符。因为仅按段级保护,应用程序就无法使用操作系统段中的过程,为此,操作系统就把这些需要公开的过程建成门,从而应用程序可以通过这些门使用操作系统的过程。(这里的过程可以简单理解为函数调用),一个门对应一个过程或者任务。
6、分页机制
Intel体系结构提供两种内存管理机制:分段和分页。段是一种基本的内存管理机制,它把处理器的线性地址空间划分为小的地址段。段与段相互独立,对段的访问要受到严格的检查和保护。段可以再分为页,从而实现对虚拟内存的基本支持。
Intel按页目录和页表两级结构组织一个任务的 ......
php 通用的调用 so的方法是使用dl()函数,但是在php5.3之后不再支持这种方法,仅支持静态调用,使用dl() 动态调用的方法见:
引用页1: http://tech.idv2.com/2007/07/06/use-local-so-in-php/
感谢原作者提供的清晰明了的方法,但是我在5.3.1版本i中没有通过,于是我找到了页面:
引用页2: http://www.9php.com/FAQ/cxsjl/php/2007/11/9405479103083.html
此页面中有讨论到如何静态调用so文件中的函数的描述,解决方法如下:
环境:Apache 2.2.9
php5.3.2
首先使用引用页1提供的方法生成动态库 libhello.so.
进入php 安装包解压缩目录
-laptop:~/dev/software/php-5.3.2$cd ext
funny@funny-laptop:~/dev/software/php-5.3.2/ext$
建立中间 php链接so项目cltest
funny@funny-laptop:~/dev/software/php-5.3.2/ext$ ./ext_skel --extname=cltest
Creating directory cltest
Creating basic files: config.m4 config.w32 .cvsignore cltest.c php_cltest.h CREDITS EXPERIMENTAL tests/001.phpt cltest.php [done].
To use your new extension, you will have to ......
php 通用的调用 so的方法是使用dl()函数,但是在php5.3之后不再支持这种方法,仅支持静态调用,使用dl() 动态调用的方法见:
引用页1: http://tech.idv2.com/2007/07/06/use-local-so-in-php/
感谢原作者提供的清晰明了的方法,但是我在5.3.1版本i中没有通过,于是我找到了页面:
引用页2: http://www.9php.com/FAQ/cxsjl/php/2007/11/9405479103083.html
此页面中有讨论到如何静态调用so文件中的函数的描述,解决方法如下:
环境:Apache 2.2.9
php5.3.2
首先使用引用页1提供的方法生成动态库 libhello.so.
进入php 安装包解压缩目录
-laptop:~/dev/software/php-5.3.2$cd ext
funny@funny-laptop:~/dev/software/php-5.3.2/ext$
建立中间 php链接so项目cltest
funny@funny-laptop:~/dev/software/php-5.3.2/ext$ ./ext_skel --extname=cltest
Creating directory cltest
Creating basic files: config.m4 config.w32 .cvsignore cltest.c php_cltest.h CREDITS EXPERIMENTAL tests/001.phpt cltest.php [done].
To use your new extension, you will have to ......
在Linux下面去压缩文件或者目录。我们将学习zip, tar, tar.gz和tar.bz2等压缩格式的基本用法。
zip格式已成为压缩文件的标准选择,而且它在windows上也能使用。
经常用zip格式压缩那些需要共享给windows用户的文件。
如果只是共享给linux用户或者Mac用户,偏向于选择tar.gz格式。
ZIP
zip可能是目前使用得最多的文档压缩格式。它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用。缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在压缩率方面做得非常好。
压缩一个目录:
# zip -r archive_name.zip directory_to_compress
下面是如果解压一个zip文档:
# unzip archive_name.zip
TAR
Tar是在Linux中使用得非常广泛的文档打包格式。它的好处就是它只消耗非常少的CPU以及时间去打包文件,他仅仅只是一个打包工具,并不负责压缩。
下面是如何打包一个目录:
# tar -cvf archive_name.tar directory_to_compress
如何解包:
# tar -xvf archive_name.tar.gz
上面这个解包命令将会将文档解开在当前目录下面。当然,你也可以用这个命令来决定解包的路径:
# tar -xvf archive_name.tar -C /tmp/extract_here/
TAR.GZ
这种格式是我 ......