深入理解linux内存管理

“深入理解linux内存管理”相关的资料有哪些?“深入理解linux内存管理”相关的范文有哪些?怎么写?下面是小编为您精心整理的“深入理解linux内存管理”相关范文大全或资料大全,欢迎大家分享。

《深入理解LINUX内存管理》学习笔记

标签:文库时间:2024-08-10
【bwwdw.com - 博文网】

引子

为什么要写这个笔记:

1,这本书的中文版翻译了太垃圾,没法阅读。阅读英文原版,可以很好的理解作者的思路。作此笔记备忘

2,一直以来学习LINUX kernel的知识缺乏系统化,借对这本书的学习,系统化的学习一下LINUX kernel。

3,自己一直在做一个too small,too simple的单进程,特权模式,64bit保护模式的称不上OS的OS,已经做完了bootloader, 构思kernel的实现的时候,困惑在内存管理的实现上,阅读这本书,希望能有利于自己的OS的编写。

4,克服惰性,多读书,希望一天能阅读5页,争取半年内阅读完这本原版700多页的巨著。 不足:

我不可能完全理解LINUX 内存管理的精髓,肯定有很多地方理解错误。希望大家能够指正,以便提高,谢谢。 学习方法:

可能您第一次阅读的时候很多地方都不理解,不用担心。那您可能需要阅读一些文件系统的知识。

或者阅读全部笔记后,再回头阅读,有些地方您就理解了。

言归正传:

一、概要

可用工具

CodeViz: 生成代码调用关系图的工具,这个工具我现在还没有去使用,有兴趣的可以自己试试去建立调用关系图。

http://www.csn.ul.ie/~mel/project

《深入理解LINUX内存管理》学习笔记

标签:文库时间:2024-08-10
【bwwdw.com - 博文网】

引子

为什么要写这个笔记:

1,这本书的中文版翻译了太垃圾,没法阅读。阅读英文原版,可以很好的理解作者的思路。作此笔记备忘

2,一直以来学习LINUX kernel的知识缺乏系统化,借对这本书的学习,系统化的学习一下LINUX kernel。

3,自己一直在做一个too small,too simple的单进程,特权模式,64bit保护模式的称不上OS的OS,已经做完了bootloader, 构思kernel的实现的时候,困惑在内存管理的实现上,阅读这本书,希望能有利于自己的OS的编写。

4,克服惰性,多读书,希望一天能阅读5页,争取半年内阅读完这本原版700多页的巨著。 不足:

我不可能完全理解LINUX 内存管理的精髓,肯定有很多地方理解错误。希望大家能够指正,以便提高,谢谢。 学习方法:

可能您第一次阅读的时候很多地方都不理解,不用担心。那您可能需要阅读一些文件系统的知识。

或者阅读全部笔记后,再回头阅读,有些地方您就理解了。

言归正传:

一、概要

可用工具

CodeViz: 生成代码调用关系图的工具,这个工具我现在还没有去使用,有兴趣的可以自己试试去建立调用关系图。

http://www.csn.ul.ie/~mel/project

(B)深入理解指针函数

标签:文库时间:2024-08-10
【bwwdw.com - 博文网】

深入理解指针函数

1.指针函数的定义

顾名思义,指针函数即返回指针的函数。其一般定义形式如下:

类型名 *函数名(函数参数表列);

其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为?的指针(地址)”,“类型名”表示函数返回的指针指向的类型”。“(函数参数表列)”中的括号为函数调用运算符,在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略。其示例如下:

int *pfun(int, int);

由于“*”的优先级低于“()”的优先级,因而pfun首先和后面的“()”结合,也就意味着,pfun是一个函数。即:

int *(pfun(int, int));

接着再和前面的“*”结合,说明这个函数的返回值是一个指针。由于前面还有一个int,也就是说,pfun是一个返回值为整型指针的函数。

我们不妨来再看一看,指针函数与函数指针有什么区别? int (*pfun)(int, int);

通过括号强行将pfun首先与“*”结合,也就意味着,pfun是一个指针,接着与后面的“()”结合,说明该指针指向的是一个

Android BatteryStatsHelper深入理解(and5.1)

标签:文库时间:2024-08-10
【bwwdw.com - 博文网】

Android BatteryStatsHelper深入理解

(and5.1)

BatteryStatsHelper这个类主要是统计各个应用,多用户的每个用户,以及蓝牙,屏幕等耗电统计。

一般使用BatteryStatsHelper这个类,先要new一个实例,然后再调用create函数: 下面我们就先从create分析,两种create方法,其中sStatsXfer是静态的 [java] view plain copy

public void create(BatteryStats stats) {

mPowerProfile = new PowerProfile(mContext); mStats = stats; }

public void create(Bundle icicle) { if (icicle != null) {

mStats = sStatsXfer;

mBatteryBroadcast = sBatteryBroadcastXfer; }

mBatteryInfo = IBatteryStats.Stub.

linux内存管理

标签:文库时间:2024-08-10
【bwwdw.com - 博文网】

第三章 存储管理

存储管理子系统时操作系统中最重要的组成部分之一。在早期计算时代,由于人们所需要的内存数目远远大于物理内存,人们设计出了各种各样的策略来解决此问题,其中最成功的是虚拟内存技术。它使得系统中为有限物理内存竞争的进程所需内存空间得到满足。

虚拟内存技术不仅仅可让我们可以使用更多的内存,它还提供了以下功能: 巨大的寻址空间

操作系统让系统看上去有比实际内存大得多的内存空间。虚拟内存可以是系统中实际物理空间的许多倍。每个进程运行在其独立的虚拟地址空间中。这些虚拟空间相互之间都完全隔离开来,所以进程间不会互相影响。同时,硬件虚拟内存机构可以将内存的某些区域设置成不可写。这样可以保护代码与数据不会受恶意程序的干扰。 内存映射

内存映射技术可以将映象文件和数据文件直接映射到进程的地址空间。在内存映射中,文件的内容被直接连接到进程虚拟地址空间上。 公平的物理内存分配

内存管理子系统允许系统中每个运行的进程公平地共享系统中的物理内存。 共享虚拟内存

尽管虚拟内存允许进程有其独立的虚拟地址空间,但有时也需要在进程之间共享内存。 例如有可能系统中有几个进程同时运行BASH命令外壳程序。为了避免在每个进程的虚拟内存空间内都存在BAS

Linux内存管理详解

标签:文库时间:2024-08-10
【bwwdw.com - 博文网】

13. 内存管理

13.1. 引言

Linux对物理内存的描述机制有两种:UMA和NUMA。Linux把物理内存划分为三个层次来管理:存储节点(Node)、管理区(Zone)和页面 (Page)。UMA对应一致存储结构,它只需要一个Node就可以描述当前系统中的物理内存,但是NUMA的出现打破了这种平静,此时需要多个 Node,它们被统一定义为一个名为discontig_node_data的数组。为了和UMA兼容,就将描述UMA存储结构的描述符 contig_page_data放到该数组的第一个元素中。内核配置选项

CONFIG_NUMA决定了当前系统是否支持NUMA机制。此时无论UMA还 是NUMA,它们都是对应到一个类型为pg_data_t的数组中,便于统一管理。 图 71. Node Zone和Page的关系

上图描述Linux管理物理内存的三个层次之间的拓扑关系。从图中可以看出一个存储节点由pg_data_t描述,一个UMA系统中只有一个Node,而 在NUMA中则可以存在多个Node。它由CONFIG_NODES_SHIFT配置选项决定,它是CONFIG_NUMA的子选项,所以只有配置了 CONFIG_NUMA,该选项才起作用。UMA

深入理解OpenGL拾取模式(OpenGL Picking)

标签:文库时间:2024-08-10
【bwwdw.com - 博文网】

深入理解OpenGL拾取模式(OpenGL Picking)

在用OpenGL进行图形编程的时候,通常要用鼠标进行交互操作,比如用鼠标点选择画面中的物体,我们称之为拾取(Picking),在网上看了很多OpenGL拾取的文章,但大多是只是介绍在OpenGL中如何拾取,如何利用OpenGL提供的一系列函数来完成拾取,最多再简单介绍下OpenGL的名字栈(Name stack),拾取矩阵(Picking Matrix)等等,但是拾取真正的原理确没有提到。所以,我在这里为大家详细介绍下OpenGL中拾取是怎样实现的,以及其背后的真正原理。

OpenGL中的拾取是对OpenGL图形管线的一个应用。所以OpenGL中的拾取并不是像D3D一样采用射线交叉测试来判断是否选中一个目标,而是在图形管线的投影变换(Projection Transformation)阶段利用拾取矩阵来实现的。为了理解这个过程,先来复习一下OpenGL的图形管线。

总的来说,OpenGL图形管线大体分为上面的五个阶段。在编程的时候使用glMatrixMode(GL_MODELVIEW),或者 glMatrixMode(GL_PROJECTION)就是

深入理解string和如何高效地使用string

标签:文库时间:2024-08-10
【bwwdw.com - 博文网】

深入理解string和如何高效地使用string

无论你所使用的是哪种编程语言,我们都不得不承认这样一个共识:string是我们使用最为频繁的一种对象。但是string的常用性并不意味着它的简单性,而且我认为,正是由于string的频繁使用才会促使其设计人员在string的设计上花大量的功夫。所以正是这种你天天见面的string,蕴含了很多精妙的设计思想。

一个月以前我写了一篇讨论字符串的驻留(string interning)的文章,我今天将会以字符串的驻留为基础,进一步来讨论.NET中的string。string interning的基本前提是string的恒定性(immutability),即string一旦被创建将不会改变。我们就先来谈谈string的恒定性。

一、 string是恒定的(immutable)

和其他类型比较,string最为显著的一个特点就是它具有恒定不变性:我们一旦创建了一个string,在managed heap 上为他分配了一块连续的内存空间,我们将不能以任何方式对这个string进行修改使之变长、变短、改变格式。所有对这个string进行各项操作(比如调用ToUpper获得大写格式的string

深入理解MSTP域和端口角色 - 图文

标签:文库时间:2024-08-10
【bwwdw.com - 博文网】

深入理解MSTP域和端口角色

MSTP基本概念

MSTP是一个多生成树协议。MSTP的“多生成树”包括两层含义:一是在一个交换网络中可以基于VLAN划分出多个生成树实例(STI),二是在每个生成树实例中可以包括多个VLAN。而不是像Cisco的PVST、PVST+这样,虽然在整个交换网络中可以基于VLAN划分出多个生成树实例,但是每个生成树实例中仅包括一个VLAN。所以相对PVST、PVST+来说,MSTP更适用于比较大的网络中,划分生成树实例也更灵活,可以根据实际应用需要求来进行。 虽然在整体来看,MSTP网络可分为以下层次(如图21-1所示): l MSTP网络

l 多生成树域MST Region(Multiple Spanning Tree Region) l 多生成树实例MSTI(Multiple Spanning Tree Instance)

图21-1 MSTP的网络层次示意图

而且这三者之间依次是包含关系,即MSTP网络包含MST域和MSTI,MST域又包含MSTI,因为在一个MSTP网络中可以有多个MST域,一个MST域中又可以有多个MSTI。 1. MST域

MST域(Multiple Spanning Tree Regio

深入理解计算机系统LAB2

标签:文库时间:2024-08-10
【bwwdw.com - 博文网】

LAB1实验报告

实验目的:

使用课程知识拆除一个“Binary Bombs”来增强对程序的机器级表示、汇编语言、调试器和逆向工程等理解。

实验简介:

一个“Binary Bombs”(二进制炸弹,简称炸弹)是一个Linux可执行C程

序,包含phase1~phase6共6个阶段。炸弹运行各阶段要求输入一个字符串,若输入符合程序预期,该阶段炸弹被“拆除”,否则“爆炸”。实验目标是你需要拆除尽可能多的炸弹。

运行结果:

成功运行结果截图:

通关密码储存在0014301-151420131.txt文件中。

实验中的六组密码:

PHASE1:字符串比较

本关比较简单,根据课件中的提示用GDB将最先压栈的那个字符串常量打印

出来,然后将其作为密码输入,比较成功后即通关。

08048ab2 :

8048ab2: 83 ec 14 8048ab5: 68 04 9f 04 08 8048aba: ff 74 24 1c 8048abe: e8 4d 04 00 00

sub $0x14,%esp push $0x8049f04 pushl 0x1c(%