Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1423489
  • 博文数量: 122
  • 博客积分: 340
  • 博客等级: 一等列兵
  • 技术积分: 2967
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-01 11:50
个人简介

说点什么呢

文章分类

全部博文(122)

文章存档

2018年(2)

2017年(1)

2015年(2)

2014年(30)

2013年(81)

2011年(5)

2009年(1)

分类: LINUX

2013-12-06 14:36:22

1. 进程的内存段

进程在系统中运行时,系统会根据进程的需求分配一定量的内存用来存放与进程有关的各类数据的。面这些数据在内存中的存放空间并不是连续的,他是按照进程数据类型不同分类存放,下图显示了进程数据在内存中的存放地址空间:

文本段:这个内存段主要存储进程的可执行代码,也就是进程所对应的应用程序二进制代码存放在这个内存段;

数据段:数据段由三个部分组成:

Data: 这个区域存放初始化的数据和静态变量的数据;

BSS这个区域存放初始化后值为零的数据;

Heap: 这个区域存放的是依据程序的需求动态分配的内存空间,主要是能过

程序的malloc函数请求后分配的;

堆栈段:这个空间存放局部变量、函数参数以及函数的返回地址。堆栈是向内存的低端分配的。

用户进程的内存分配情况可以使用pmap命令来查看。

进程地址空间

2. Linux CPU 调度器

linux 2.4(时间复杂度为O(n))内核相比,2.6的内核使用了时间复杂度为O1)的CPU调度算法。在新的CPU调度算法里,选择某个进程进入CPU执行所花的时间是固定,而不管进程队列里有多少个进程。而老的调度算法在选择进程进入CPU执行所花的时间是随进程队列里的进程数增加而线性增加的。所以,在高负载的企业级应用中,新的算法具有很高的优势。

新的CPU调度算法使用两个进程优先级队列,分别是活动队列和过期队列。调度器依据进程的优先级和阻塞率来给进程分配时间片,并将它们放到活动队列中。当一个进程消耗完它的时间片后,它会被重新分配时间片,将被放到过期队列中。当活动队列中所有的进程都消耗完时间片后,活动队列和过期队列进行交换,重启新的算法。新的调度算法另一个巨大优势是支持Non-Uniform Memory Architecture (NUMA)架构和对称多线程处理器( Symmetric Multithreading Processors, SMP)技术。

3. 虚拟内存管理器(Virtual memory manager

linux系统中,进程使用内存是通过内核来分配的。而进程读写磁盘文件系统也不是直接读写磁盘的,而是通过向内存缓冲区和缓存读写内容的,然后当缓冲或缓存满了或按周期将其数据写进磁盘上的。所以,在linux 系统中,物理内存可能很大,但是当我们查看其空闲空间时却很小了,就是这个原因。下图是虚拟内存管理器的结构图

5 Linux虚拟内存管理器

4. 内存页分配(Page frame allocation

内存页是指物理内存或虚拟内存上一组线性连续的内存地址,它是内核处理内存的单元,即内核以内存页为单位进行分配。一个内存页的大小通常是4k。一个进程请求分配内存页时,如果系统中还有可能的内存页,则内核就会立即给它分配;而如果没有可用的内存页的话,内核就会从缓存/缓冲或其它进程的空间(对应的数据会被临时写入到磁盘上的交换分区里)分配一部分出来供进程使用。

5. 文件系统

现在Linux内核支持几乎所有的文件系统,从FATJSF等等。在linux系统使用了虚拟文件系统(Virtual file system)的机制使系统应用程序操作各种文件系统使用统一的对象模型(如i-node、文件对象,页缓存等等)。这样,用户进程就不需要知道系统到底使用的是哪种文件系统。下图显示了虚拟文件系统的概念:

虚拟文件系统

阅读(885) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~