2013年1月28日

高端内存的映射 -- 永久映射和临时映射

摘要: 高端内存(Highmem)中的页不能永久地映射到内核地址空间,因此,通过alloc_pages()函数,以__GFP_HIGHMEM标志分配的页不可能有虚拟地址。 X86体系结构中,高于896MB的所有物理内存都是高端内存,这些物理内存页不会永久的或自动的映射到内核地址空间。这些页需要被分配之后... 阅读全文

posted @ 2013-01-28 22:09 胡永光 阅读(761) 评论(0) 推荐(0) 编辑

虚拟地址_物理地址_逻辑地址_页表_内存映射

摘要: 1. 虚拟地址和物理地址: 虚拟地址关系到进程的用户空间和内核空间,而物理地址则用来寻址实际可用的内存。 linux用页表来为物理地址分配虚拟地址。 进程的虚拟地址空间,都被内核划分为很多等长的部分,这样的部分成为页。物理内存也划分为同样大小的页。 2. 页表 页表是一种数据结构,用来将虚拟地... 阅读全文

posted @ 2013-01-28 22:02 胡永光 阅读(417) 评论(0) 推荐(0) 编辑

内核空间_用户空间_特权级别

摘要: 1. linux将虚拟地址空间划分为两部分,内核空间和用户空间。 一般32位处理器,虚拟内存大小= 2的32次方 B = 4GB. 现在的64位处理器可以支持 虚拟内存 = 2的64次方 B = 16GB. 用户空间地址范围 0 --- TASK_SIZE. 内核空间地址范围 TASK_SIZ... 阅读全文

posted @ 2013-01-28 22:00 胡永光 阅读(125) 评论(0) 推荐(0) 编辑

Linux下GCC生成和使用静态库和动态库详解(二)

摘要: 2.1准备好测试代码hello.h、hello.c和main.c; hello.h(见程序1)为该函数库的头文件。 hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出"Hello XXX!"。 main.c(见程序3)为测试库文件的主... 阅读全文

posted @ 2013-01-28 20:04 胡永光 阅读(191) 评论(0) 推荐(0) 编辑

Linux下GCC生成和使用静态库和动态库详解(一)

摘要: 一、基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。 本文仅限于介绍... 阅读全文

posted @ 2013-01-28 20:03 胡永光 阅读(284) 评论(0) 推荐(0) 编辑

GCC动态库和静态库混合使用

摘要: 今天,一个同事编译静态库,我也趁此机会在温习一下,先google一下,然后在自己实验。 首先,在网上抄个例子,内容如下 1:建静态库 /* hellos.h */ #ifndef _HELLO_S_H #define _HELLO_S_H void printS(char* s... 阅读全文

posted @ 2013-01-28 19:40 胡永光 阅读(156) 评论(0) 推荐(0) 编辑

gcc g++ Linux下动态库_静态库

摘要: 关于Unix静态库和动态库的分析 基本概念 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。 例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhello.so.1.0,由于程序连接默认以... 阅读全文

posted @ 2013-01-28 19:10 胡永光 阅读(182) 评论(0) 推荐(0) 编辑

make linux内核

摘要: make linux内核的命令: 可以先执行: cp arch/arm/configs/xxxx_defconfig .config //make menuconfig 会检测.config来配置选项。 make ARCH=arm CROSS_COMPILE=arm-linux- ... 阅读全文

posted @ 2013-01-28 17:05 胡永光 阅读(178) 评论(0) 推荐(0) 编辑

makefile

摘要: 1. makefile 文件描述了整个工程的编译,链接等规则。 规则:用于说明如何生成一个或多个目标文件,规则格式如下: targets: prerequisites command 目标 : 依赖 命令 (命令需要以[TAB]键开始) 例: main.o: m... 阅读全文

posted @ 2013-01-28 17:02 胡永光 阅读(154) 评论(0) 推荐(0) 编辑

gdb

摘要: GDB 是GNU发布的一款功能强大的调试程序工具。 1. GDB主要完成下面3个功能: a. 启动被调试的程序 b. 让被调试的程序在指定位置停住 c. 当程序被停住时,可以检查程序状态。 2. 使用gdb流程: a. 编译生成可执行文件: gcc -g test.c -o tes... 阅读全文

posted @ 2013-01-28 17:00 胡永光 阅读(132) 评论(0) 推荐(0) 编辑

gcc

摘要: 1. gcc: 全名 GNU C Compiler gcc编译器 能将C, C++, 汇编程序编译,链接成可执行文件。 在linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。 2. gcc编译程序时,编译过程可以被细分为4个阶段: a.预处理(pre-p... 阅读全文

posted @ 2013-01-28 16:56 胡永光 阅读(174) 评论(0) 推荐(0) 编辑

C++ 中的插入迭代器以及其迭代器适配器

摘要: C++ 中有三类迭代器,分别是插入迭代器(inserter),反向迭代器(reverse_iterator)和流迭代器. 这里(vs2003为例)介绍插入迭代器,插入迭代器分别是std::inserter_iterator,std::back_inserter_iterator,std::fro... 阅读全文

posted @ 2013-01-28 16:54 胡永光 阅读(213) 评论(0) 推荐(0) 编辑

linux线程函数大全

摘要: 以下内容来源于网络,本人仅收集用于学习之用,如原作者有任何意见,可以给我留言,我会尽快将其删除。 索引: 1.创建线程pthread_create 2.等待线程结束pthread_join 3.分离线程pthread_detach 4.创建线程键pthread_key_create 5.删... 阅读全文

posted @ 2013-01-28 16:06 胡永光 阅读(329) 评论(0) 推荐(0) 编辑

导航