- 博客(11)
- 资源 (46)
- 收藏
- 关注
转载 linux内核学习笔记【二】最终内核页表 Final kernel Page Table
之前建立了临时页表,现在要建立最终内核页表,内核必须首先要建立一个完整的页表才能继续运行,因为内存寻址是内核继续运行的前提。下面就对主要函数kernel_physical_mapping_init(),进行分析。这个函数的掉用关系为:head.S->start_kernel()->setup_arch()->paging_init()->pagetable_init()->kernel_physi
2013-08-30 16:29:54 1274
转载 linux内核学习笔记【一】临时内核页表 Provisional kernel Page Tables
最近开始学习linux内核,看了《深入理解linux内核》,开始写点学习收获。内核版本为2.6.11 临时全局目录(provisional page global directory)是在内核编译过程中静态初始化的,而临时页表是由startup_32()汇编语言函数(定义于arch/i386/kernel/head.S)初始化的。临时页全局目录放在swapper_pg_dir变量中,sw
2013-08-30 16:29:12 1064
转载 Linux 内核 虚拟地址 物理地址 转换
内核从3G开始的那一段是连续映射 而且这种固定映射最大到896M的地址范围,也即从0xc0000000-0xf7ffffff的虚拟地址采用固定映射,称为内核逻辑地址.剩下的1G-896=128M范围的虚拟地址可以映射到任意物理地址.称为内核虚拟地址.当实际内存大于1G时(实际上是> 896M时),用这块地址空间做映射. 实际的计算机体系结构有硬件的制约,这限制了页框可以使用的方式。尤其是,
2013-08-30 16:24:07 5953
转载 malloc的实现原理学习
一、malloc()和free()的基本概念以及基本用法: 1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 关于分配失败的原因,应该有多种,比如说空间不足就是一种。 void free(void *FirstByte):该函数是将之前用malloc分配
2013-08-29 17:51:04 936
转载 malloc和free的源代码
#include int has_initialized = 0; void *managed_memory_start; void *last_valid_address; void malloc_init() { last_valid_address = sbrk(0); managed_memory_start = last_valid_address;
2013-08-29 17:49:23 1151 1
转载 malloc 的实现
brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从这 一块分配的。如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动,sbrk函数在内核的管理 下将虚
2013-08-29 17:43:43 1091
转载 如何在linux内核中保留一块内存不被系统分配
要想在内核中保留一个块内存,不被系统分配,而是只由自己使用,可以使用以下函数 reserve_bootmem(addr,size,flag) 这个函数的三个参数,addr是你要保留的地址,size就是要保留的大小,flag是标志位,要来确定是否检查你要保留的空间是否已经被保留了,它可以设置为两个值,BOOTMEM_DEFAULT和BOOTMEM_EXCLUSIVE,前者就是总是会返回0(也就是
2013-08-29 17:14:45 5118
转载 直接使用系统调用
网上有很多文档介绍如何添加自定义的系统调用的,说的都特别详细,但是定义好自定义的系统调用后,察看新生成的内核符号表System.map中也出现了自己定义的系统调用,但是在编写用户程序进行测试时,发现问题了: _syscall0--_syscall6宏在linux/unistd.h中没有了。致使用户测试程序没法进行。 我查阅了内核源码和Changelogs,发现在Linux2.6.19.1中
2013-08-28 16:54:20 1018
转载 uclibc和glibc的差别
uClibc和Glibc并不相同,两者有许多不同之处,而且以下不同有可能给你带来一些问题. 1.uClibc比Glibc小,虽然uClibc和Glibc在已有的接口上是兼容的,而且采用uClibc编译应用程序比采用Glibc编译应用程序要更方便,但是uClibc并没有包括Glibc中的所有接口实现,因此有些应用可能在uClibc中不能编译。 2.uClibc在可配置性上比Glibc要好。 3
2013-08-20 12:19:06 804
转载 libc与glibc的概念和区别
glibc和libc都是Linux下的C函数库, libc是Linux下的ANSI C的函数库; glibc是Linux下的GUN C的函数库; ANSI C和GNU C有什么区别呢? ANSI C是基本的C语言函数库,包含了C语言最基本的库函数。这个库可以根据 头文件划分为 15 个部分,其中包括: :包含用来测试某个特征字符的函数的函数原型,以及用来转换大小写字母的函数原型; :
2013-08-20 11:50:52 1958
转载 Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
注:2013年6月6日,我对该博文进行了修改,增加了源代码以及更直观详细的讲解。如果需要代码,可以到文章最后给出的链接进行下载。 最近在用weka做一个数据挖掘相关的项目,不得不说,weka还是一个不错的开放源代码库,提供了很多最常用的分类和聚类算法。 在我的项目中要用到一个聚类算法,Affinity Propagation(AP),由多伦多大学的Brendan J. Frey发表于200
2013-08-13 10:00:57 2659
Android内核剖析
2016-08-30
Android开发艺术探索随书源码之PinExpandableListView
2016-08-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人