自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (3)
  • 收藏
  • 关注

翻译 linux进程管理 - 核心调度器

linux内核进程调度器基于两个函数:周期性调度器函数和主调度器函数.周期性调度器所谓周期性调度器就是scheduler_tick中实现。如果系统正在活动中,内核会按照HZ自动调用这个函数。实际上在每个滴答的handler中会调用这个函数。如果在没有进程等待调度,那么在计算机电力供应不足的情况下,也可以关闭该调度器以减少电能消耗。该函数会激活负责当前进程的调度类的周期性调度方法。

2013-07-31 16:19:41 1593 2

翻译 Linux 进程调度

CFS调度器传统的调度器使用时间片的概念,对系统中的进程分别计算时间片,使得进程运行至时间片结束。在所有的进程时间片都以用尽后,重新计算时间片。而CFS调度器完全摒弃了时间片,会重点考虑进程的等待时间。CFS调度器的目的是,向系统中每个激活的进程提供最大的公正性,或者说确保没有进程被亏待。CFS引入了虚拟时钟的概念,该时钟的流逝速度小于实时时钟,精确的速度依赖于当前等待

2013-07-30 17:32:56 1873

转载 Linux 文件系统 - Ext4 Howto

去年就发现项目Android系统中已经用上了Ext4文件系统,当时并没有深究为什么要使用Ext4文件系统,使用ext4带来的优点和缺点。最近有时间,正好整理下Ext4对于Ext2/Ext3带来的变化。网上关于Ext4的文章并不多,只找到了来自http://kernelnewbies.org/Ext4/的Ext4 Howto,是一篇概括性的文章。1. 介绍Ext4是Linux操作

2013-07-29 10:14:12 7208

原创 理解linux虚拟文件系统VFS - 路径查找 path_lookup

VFS的一个主要操作,是给定一个文件名,获取该文件名的inode。路径查找是VFS中相当繁琐的一部分,主要是符号链接,文件系统装载点,已经. ..和//等奇怪路径带来了一些额外处理。nameidata数据结构查找过程涉及到很多函数调用,在这些调用过程中,nameidata起到了很重要的作用:1. 向查找函数传递参数;2. 保存查找结果。struct nameidata {

2013-07-27 16:06:50 10859 1

原创 理解linux虚拟文件系统VFS - 数据结构

file_system_type1406 struct file_system_type {1407 const char *name;1408 int fs_flags;1409 int (*get_sb) (struct file_system_type *, int,1410 const

2013-07-25 17:24:00 4851

原创 理解linux虚拟文件系统VFS - 概述

当前,除了linux标准的文件系统Ext2/Ext3/Ext4外,存在很多种文件系统,比如reiserfs, xfs, Windows的vfat NTFS,网络文件系统nfs 以及flash 文件系统jffs2, yaffs/yaffs2 ubifs。linux通过叫做VFS的中间层最这些文件系统提供了完美的支持。对于用户来说,这些文件系统是几乎透明的,在大部分情况下(比如fat vfat不支

2013-07-25 14:43:07 21382 3

原创 进程地址空间 - 地址空间布局

虚拟地址空间包含了若干区域,其分布方式是特定于体系结构的。但是基本都包含下列共同的成分。当前运行代码的二进制代码,代码段又称为text,所处的地址空间由称为text段。程序使用的动态库的代码存储全局变量和动态产生的数据的堆。用于保存局部变量和实现函数/过程调用的栈环境变量和命令行参数的段将文件内容映射到虚拟地址空间的内存映射。是由elf标准确定。每个体系结构都指定了一个特定起始

2013-07-22 21:40:15 2888

原创 进程地址空间 - 堆管理

TBD

2013-07-17 19:50:24 2179

原创 进程地址空间 - page fault处理

TBD

2013-07-17 19:48:04 1445

原创 进程地址空间 - 内存区操作

TBD

2013-07-17 19:47:30 1192

原创 进程地址空间 - 辅助函数分析

TBD

2013-07-17 15:51:42 1295

原创 进程地址空间 - 数据结构

TBD

2013-07-17 13:49:47 2318

原创 Linux 进程地址空间 - 简介

TBD

2013-07-17 13:49:30 2244

原创 内核映射 - 持久内核映射

持久内核映射 permanent kernel mappings内核提供了其他函数用于把Highmem内存映射到内核地址空间:持久内核映射和临时内核映射。而这些函数和vmalloc无关。因此网络上对持久内核映射和临时内核映射的理解非常的混乱持久内核映射允许内核建立高端物理内存帧到内核地址空间的长期映射。和其他kernel地址空间一样,持久内核映射使用kernel一个pte页表来

2013-07-14 17:32:21 2900 2

原创 内核分配不连续页 - vmalloc

当buddy系统还有大量的连续物理内存时,我们可以通过__pages_alloc成功分配很大的一块连续物理内存空间,随着系统运行时间加长,buddy系统内很难中找到一块大的连续物理内存空间,因此__pages_alloc可能会失败,即便通过kswapd进行页面的回收和交换,buddy仍然不可避免的碎片化首先我们要明确的是,连续物理内存的分配并不是必要的。对于大部分DMA操作,我们的确需

2013-07-14 11:42:09 8959

原创 伙伴系统分配器 - __free_pages

内核中所有涉及到页面释放的函数最终都会调用到__free_pages

2013-07-13 16:08:24 2877 1

原创 linux 内存管理中的PG_Compound和GFP_COMP

当__alloc_pages分配的gfp_flags制定了__GFP_COMP,那么内核必须将这些页组合成复合页compound page。第一个页称为head page,其余所有的页称为tail page。复合页的尺寸要远大于当前分页系统支持的页面大小。并且一定是2^order * PAGE_SIZE大小。复合页主要用在HugeTLB相关的代码。复合页的引入是因为随着计算机物理内存容量不断增

2013-07-13 11:38:14 4331

原创 伙伴系统分配器 - buffered_rmqueue

在__alloc_pages过程中,操作分为两个部分,第一部分是找到适当的内存域,接下来的一部分就是按照伙伴系统的分配方式,从free_lists中移除这些页。buffered_rmqueue就是用来完成第二部分工作的。1. 首先判断要分配的页面数是否为 1,如果为1 的情况下,那么并不需要从buddy系统获取,因为per-CPU的页缓存提供了更快的分配和释放机制。per-CPU cach

2013-07-12 10:33:21 3394

翻译 内存管理中的cold page和hot page, 冷页 vs 热页

所谓冷热是针对处理器cache来说的,冷就是页不大可能在cache中,热就是有很大几率在cache中。网上还有一种说法:冷页就是冷的页,热页就是热点的页,解释的真好 :)cold page和hot page的概念可以参考LWN的一片文章http://lwn.net/Articles/14768/2.5.45内核,Martin Bligh和Andrew Morton以及其他人提交

2013-07-12 09:46:03 5079 1

原创 伙伴系统分配器 - PF_MEMALLOC 标志位

这是一个进程标记位,除了在内存管理子系统中使用外,还在其他的内核子系统中使用。之所以在伙伴系统分配器中讨论,是因为这个标记和内存管理密不可分。当一个进程被设置PF_MEMALLOC后,那么对进程会有如下影响:1. 当进程进行页面分配时,可以忽略内存管理的水印进行分配,这是告诉内存管理系统,给我一点紧急内存使用,我将会释放更多的内存给你。2. 如果忽略水印分配仍然失败,那么直接返回ENO

2013-07-11 20:15:51 6753 2

原创 伙伴系统分配器 - __alloc_pages

kernel可以通过几个分配函数从伙伴系统分配页面:alloc_pagesget_zeroed_pageget_dma_pages这几个函数都是通过alloc_pages来实现页面分配的,而alloc_pages的核心实现就是__alloc_pages。alloc_pages在gfp.h中定义#define alloc_pages(gfp_mask, ord

2013-07-10 10:14:10 6806

原创 伙伴系统分配器 分配掩码

kernel伙伴系统分配的函数,只能分配2的整数幂个页,更细力度的分配只能借助与slab或者slub分配器常见的分配函数是:alloc_pages(mask, order) 分配2的order幂次个页面,如果成功返回第一个页框对应的page结构,失败则返回NULLget_zeroed_page(mask)分配一个页面,成功则返回这个页框对应的page结构,失败返回NUL

2013-07-09 19:06:38 1981

原创 线程栈和进程栈 区别

要搞清线程栈和进程栈的区别,首先要弄清线程和进程之间的关系。线程和进程有很多类似的地方,人们习惯上把线程称为轻量级进程,这个所谓的轻量级是指线程并不拥有自己的系统资源,线程依附于创建自己的进程。我们可以从三个方面来理解线程的轻量级1. 调度由于进程之间的线程共享同一个进程地址空间,因此在进程的线程之间做进程切换,并不会引起进程地址空间的切换,从而避免了昂贵的进程切换。当然不

2013-07-09 10:07:55 15367 3

翻译 避免物理内存碎片化 - 内存紧缩

原文地址 http://lwn.net/Articles/368869/长期存在的内存碎片问题,已经有多篇文章提及了。简单的说:当系统运行一段时间后,空闲页面趋向于散落在不连续的空间,很难再有足够长的连续物理内存页面分配。内核开发者已经下了很多工夫,减少大块连续物理内存的分配,因此大部分内核功能并不会受到页面碎片化的影响。但是仍然存在对大块连续物理内存的需要,在内存碎片化系统上的内存分

2013-07-03 19:10:57 5852

原创 mlock对page MOVABLE和RECLAIMABLE特性的影响

系统调用mlock允许应用进程锁住某一个地址空间,这将阻止Linux内存回收进程回收这个地址空间的页面。mlock仅仅在kernel层对给定地址范围所在的VMA增加 VM_LOCKED标记,当linux kernel进行内存回收时,会首先判断VMA是否有VM_LOCKED标记,如果存在,那么不会对这个地址范围内的页面进行回收锁定后,这个地址范围内的物理页面,就从RECLAIMABL

2013-07-03 10:33:18 1467

原创 避免物理内存碎片化

以前的项目碰到了buddy内存分配失败的情况,最近面试的两家公司也提到了这个问题。物理内存碎片化,是指系统空闲物理内存被使用过的物理内存分割开,导致buddy系统无法满足page分配申请,尤其是申请的连续空间较大的情况下。一般情况下,出错信息如下:[ 3308.564000] lowmem_reserve[]: 0 0 0[ 3308.564000] Normal: 7

2013-07-01 13:55:26 14908 3

原创 内核线程和普通进程的区别

内核线程的主要作用1. 周期性的将dirty内存页同步到磁盘设备上。 比如 bpflush线程周期性的把dirty数据写回磁盘2. 内存页很少的情况下,把内存page 交换到磁盘空间。 比如kswapd,系统会为每一个NUMA创建一个kswapd进程,但是在非NUMA系统上,则仅有一个kswapd3. 管理延时动作4. 实现文件系统的事物日志有两种类型的线程:

2013-07-01 11:03:03 4482

Google GFS 文件系统(英)

Google GFS开发者写的论文,描述了GFS设计理论

2012-11-09

A COMPACT GUIDE TO LEX & YACC

This document explains how to construct a compiler using lex and yacc.

2010-10-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除