Linux内存管理(zt)
Linux
内存管理
摘要
:本章首先以应用程序开发者的角度审视
Linux
的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析
Linux
的内存管理与使用。在本章最后,我们给出一个内存映射的实例,帮助网友们理解
内核内存管理与用户内存管理之间的关系,希望大家最终能驾驭
Linux
内存管理。
前言
内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无论市面上或是网上都充斥着大量涉及内存管理的教材和资料。因此,我们这里所要写的
Linux
内存管理采取避重就轻的策略,从理论层面就不去班门弄斧,贻笑大方了。我们最想做的和可能做到的是从开发者的角度谈谈对内存管理的理解,最终目的是把我们在内核开发中使用内存的经验和对
Linux
内存管理的认识与大家共享。
当然,这其中我们也会涉及到一些诸如段页等
内存管理的基本理论,但我们的目的不是为了强调理论,而是为了指导理解开发中的实践,所以仅仅点到为止,不做深究。
遵循“理论来源于实践”的“教条”,我们先不必一下子就钻入内核里去看系统
内
存到底是如何管理,那样往往会让你陷入似懂非懂的窘境(我当年就犯了这个错误!)。所以最好的方式是先从外部(用户编程范畴)来观察进程如何使用内存,等
到大家对内存的使用有了较直观的认识后,再深入到内核中去学习内存如何被管理等理论知识。最后再通过一个实例编程将所讲内容融会贯通。
进程与内存
进程如何使用内存?
毫无疑问,所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。
对任何一个普通进程来讲,它都会涉及到
5
种不同的数据段。稍有编程知识的朋友都能想到这几个数据段中包含有“程序代码段”、“程序数据段”、“程序堆栈段”等。不错,这几种数据段都在其中,但除了以上几种数据段之外,进程还另外包含两种数据段。下面我们来简单归纳一下进程对应的内存空间中所包含的
5
种不同的数据区。
代码段
:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许
相关文档:
折腾了两个晚上的linux和oralce,总算出来点东西了。Oralce安装要选用适用的版本,不然安装不会成功,最后我的决定是linux选用centos 5.0,oracle选用10。
一、 准备工作:
1. 使用root用户登录
我使用的是在本机装,所以直接打开终端就 ......
Linux根文件系统结构再认识
刘建文(http://blog.csdn.net/keminlau )
INTRO
尽管Linux的根文件系统在形式表现上是一体的(所有数据目录均为根目录下的子目录),但实际它们是多个不同的【逻辑主体】(为了实现不同的逻辑功能)组合在一起的,参见下图。这也解释了为什么有些节点(如/var)可以挂接到不同磁盘分区上。 ......
配置文件一览表 文件位置及名称,作用
/etc/rc.d/rc.sysinit
系统启动时的公用服务配置
/etc/rc.d/rc.local
系统启动时的本地服务配置
/etc/bashrc、/etc/profile
bash shell的公用配置
/home/username/.bashrc
各用户私人bash shell配置
/etc/securetty
终端安全设置
......
栈主要用来存放局部变量, 传递参数, 存放函数的返回地址.esp 始终指向栈顶, 栈中的数据越多, esp的值越小.
堆用于存放动态分配的对象, 当你使用 malloc , new 等进行分配时,所得到的空间就在堆中. 动态分配得到的内存附带有分配信息, 所以你能够 realloc 和 free调它们.
全局,静态和常量是分配在数据区中的。数据区包括b ......
/bin 存放最常用的命令,所有用户都有执行权限
/boot 系统引导目 ......