linux内存管理之非连续物理地址分配(vmalloc
前面我们已经分析了linux如何利用伙伴系统,slab分配器分配内存,用这些方法得到的内存在物理地址上都是连续的,然而,有些时候,每次请求内存时,系统都分配物理地址连续的内存块是不合适的,可以利用小块内存“连接”成大块可使用的内存.这在操作系统设计中也被称为 “内存拼接”,显然,内存拼接在需要较大内存,而内存访问相比之下不是很频繁的情况下是比较有效的.
在linux内核中用来管理内存拼接的接口是vmalloc/vfree.用vmalloc分配得到的内存在线性地址是平滑的,但是物理地址上是非连续的.
一:准备知识:
Linux用vm_struct结构来表示vmalloc使用的线性地址.vmalloc所使用的线性地址区间为: VMALLOC_START VMALLOC_END.借用<<Understanding.the.Linux.Kernel.3rd>>中的一副插图,如下示:
从上图中我们可以看到每一个vmalloc_area用4KB隔开,这样做是为了很容易就能捕捉到越界访问,因为中间是一个 “空洞”.
二:相关的数据结构
下面来分析一下vmalloc area的数据结构:
struct vm_struct {
void *addr; //虚拟地址
unsigned long size; //vm的大小
unsigned long flags; //vm的标志
struct page **pages; //vm所映射的page
unsigned int nr_pages; //page个数
unsigned long phys_addr; //对应的起始物理地址
struct vm_struct *next; //下一个vm.用来形成链表
}
全局变量vmlist用来管理vm构成的链表
全局变量vmlist用于访问vmlist所使用的信号量
对于vm_struct有两个常用的操作: get_vm_area/remove_vm_area
get_vm_area:用来分配一个合适大小的vm结构,分配成功之后,将其链入到vmlist中,代码在 mm/vmalloc.c中.如下示:
//size为vm的大小
struct vm_struc
相关文档:
来自一本绝版的书,虽然没有函数
描述,但是最起码可以知道分类,就可以去 man 了
Linux C函数库参考手册
第1章字符测试
函数
isalnum(测试字符是否为英文字母或数字)
isalpha(测试字符是否为英文字母)
isascii(测试字符是否为ASCII码字符)
isblank(测试字符是否为空格字符)
iscntrl(测试字符是否为ASCII码的控制字符 ......
Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但
万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。Configure脚本配置工具就是基础之一,它是autoconf的工具的基本
应用。
与一些技巧相比,Configure显得基 ......
Linux 下编译 fluent UDF 使的 makefile,根据 fluent 自带的 makefile 修改的。
调用的时候,直接加上目标,如
make -f makefile_linux lnamd64
#----------------------------------------------------------------------#
# makefile for user defined functions.
#---------------------------------------------- ......
环境说明
呼叫中心服务器
系统:Centos5
IP:192.168.1.146
http网站跟目录/var/www/html/
我的电脑
系统:windows XP
IP: 192.168.4.98
共享目录:D:\bgcrm (一个php的网站)
bgcrm的网站 ......
Vim和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括 UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是,和很多来自 Linux 世界的软件一样,这需要你自己动手设置。
Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请 ......