linux内存管理
页申请的核心调用是: __alloc_pages(). 页申请顺序如下:
首先找最大能符合的块, 如果一个空闲块不能满足, 更高一级的块将分割成2个buddy, 一个被占用, 一个放入低一级的freelist.
当块被释放时, 检查每对buddy, 如果两者都空闲, 把他们合并到更高一级的块数组里去, 同时放入更高一级的freelist. 如果一个buddy还在被用, 那此块将加入到当前级的freelist.
如果一个zone已经没有足够空闲页,而且又需要分配,那申请将退到下一级,一般顺序是:ZONE_HIGHMEM --> ZONE_NORMAL --> ZONE_DMA. 如果空闲页击中pages_low门限,kswapd将开始释放页。
http://hi.baidu.com/zengzhaonong/blog/item/bd4b15465d4104096b63e584.html
页面管理机制的初步建立
http://hi.baidu.com/mudgao/blog/item/57ebc03ebf065b3771cf6c73.html
每个pg_data_t数据结构代表着一片均匀的、连续的内存空间。在连续空间UMA结构中,只有一个节点contig_page_data,而在NUMA结构或不连续空间UMA结构中,有多个这样的数据结构。
计算三个管理区的大小,并存放在zones_size数组中。三个管理区是:
ZONE_DMA:从0~16MB分配给这个区
ZONE_NORMAL:从16MB~896MB分配给这个区
ZONE_HIGHMEM :896MB以上分配给这个区
arch/xxx/kernel/head.S
init/main.c: start_kernel()->setup_arch()
arch/xxx/kernel/setup.c->init_bootmem_node()
free_bootmem()
reserve_bootmem()
&nbs
相关文档:
linux多线程设计
1 引言
线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年
代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多
进程。现在,多线程技术已经被许多操作系统所支持,包括Windo ......
由于在windows下默认是gb编码,而我的vim默认是utf-8(gedit默认也是utf-8),所以打开会成乱码。修改了一下配置文件,使vi支持gb编码就好了。
$vi ~/.vimrc
let &termencoding=&encoding
set fileencodings=utf-8,gbk
$:wq
再次打开vi,显示就正常了。
vim中编辑不同编码的文件时需要注意的一些地方
......
一
般来说对于需要大量cpu计算的进程,当前端压力越大时,CPU利用率越高。但对于I/O网络密集型的进程,即使请求很多,服务器的CPU也不一定很到,
这时的服务瓶颈一般是在磁盘的I/O上。比较长见的就是,大文件频繁读写的cpu开销远小于小文件频繁读写的开销。因为在I/O吞吐量一定时,小文件的读
写更加频繁,需要更多的c ......
1.SIGHUP信号
UNIX中进程组织结构为 session (会话)包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程。一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。这 ......
一个文件,除了本身包含的内容以外,还会有一个名字和其他一些用于管理方面的“属性”信息,比如文件的建立/修改日志,它的访问权限等。这些属性都被保存到一中我们称之为inode(节点)的数据结构中,文件的长度和它在磁盘上的存放地点也保存在这里。系统使用的是文件的节点编号,而子目录结构只不过是为方便人们 ......