Linux内存管理 内存分配函数的选择
内存分配函数的选择
如果你需要连续的物理页,就可以使用某个低级页分配器或者kmalloc()。这是内核中内存分配的常用方式,也是大多数情况下你自己应该使用的内存分配方式。传递给这些函数最常用的两个标志是GFP_AUTOMIC和GFP_KERNEL。GFP_AUTOMIC表示进行不睡眠的高优先级分配。这是中断程序和其他不能睡眠的代码段的需要。对于可以睡眠的代码,比如没有持自旋锁的进程上下文代码,则应该使用GFP_KERNEL获取所需内存。这个标志表示,如果有必要,分配时可以睡眠。
如果想从高端内存进行分配,就使用alloc_pages()。alloc_pages()函数返回一个指向struct page结构的指针,而不是指向某个逻辑地址的指针。因为高端内存很有可能并没有被映射,因此访问它的唯一方式是通过相应的struct page结构。为了获得真正的指针,应噶调用kmap(),把高端内存映射到内核的逻辑地址空间。
如果你不需要物理上连续的页,而仅仅需要虚拟地址上连续的页, 那么就使用vmalloc()(不过要记住vmalloc()相对kmalloc()有一定的性能损失)。vmalloc()分配的内存虚拟地址式是连续的,但它本身并不能保证物理上的连续。这与用户空间的分配非常类似,它也是把物理内存块映射到连续的逻辑地址空间上。
如果你要创建和销毁很多较大的数据结构,那么应该考虑建立slab高速缓存。Slab层会给每个处理器维持一个对象高速缓存(空闲链表),这种高速缓存会极大的提高对象分配和回收的性能。Slab层不是频繁地分配和释放内存,而是为你把事先分配好的对象存放到高速缓存中,当你需要一块新的内存来存放数据结构时,slab层一般无需另外去分配内存,而只需从高速缓存中得到一个对象就可以了。
相关文档:
fedora linux 几乎支持任何格式的文件系统 ntfs也能支持
装linux 时选择定制分区 在磁盘设置下记录你的各个盘符的情况
例如我的机子硬盘分区的挂载情况是这样的,每个人都不同 装机子的时候注意记下来
我的机子: /dev/sda 1 对应的 ......
一、什么是init
init是Linux系统操作中不可缺少的程序之一。 是一个由内核启动的用户级进程。
内核启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式来启动其他用户级的进程或服务。所以,init始终是第一个进程(其PID始终为1)。
内核 ......
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { so-language: zxx }
-->
十年以来,全球
Linux
界有哪些重要进展,人们应该知道?对此,人们可以有不同的看法,但是,大家总得有个大致相同的认识。实际情况怎样呢?
......
Console 修改/etc/inputrc文件
set bell-style off
VIM 如果是在 console 模式下使用 vi/vim,一旦按错键会发出 bi 的一声,这样做可以提醒我们,但是很多时候会影响其他人工作、学习或者休息,如何关闭呢?
可以在 vi/vim 中使用
:set noeb
命令(其中 noeb 是 noerrorbells 的缩写) ......
一般在linux下查看网络配置可以使用ifconfig命令,可以显示当前网卡的基本配置信息。
终端输入ifconfig 会出现一下内容:
eth0
Link encap:Ethernet HWaddr 00:0C:29:0C:4B:0F
inet addr:192.168.37.128 Bcast:192.168.37.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33 er ......