Linux Kernel
文章平均质量分 70
bigzzhang
做一个爱工作,爱生活的人!
展开
-
Linux内存系列文章
从硬件的系统结构开始 http://blog.csdn.net/vanbreaker/article/details/7464894原创 2014-07-02 21:31:11 · 511 阅读 · 0 评论 -
linux缺页异常处理--内核空间
缺页异常被触发通常有两种情况——1.程序设计的不当导致访问了非法的地址2.访问的地址是合法的,但是该地址还未分配物理页框下面解释一下第二种情况,这是虚拟内存管理的一个特性。尽管每个进程独立拥有3GB的可访问地址空间,但是这些资源都是内核开出的空头支票,也就是说进程手握着和自己相关的一个个虚拟内存区域(vma),但是这些虚拟内存区域并不会在创建的时候就和物理页框挂钩,由于程序转载 2014-08-12 03:12:14 · 1306 阅读 · 0 评论 -
用户空间缺页异常pte_handle_fault()分析--(上)
前面简单的分析了内核处理用户空间缺页异常的流程,进入到了handle_mm_fault()函数,该函数为触发缺页异常的地址address分配各级的页目录,也就是说现在已经拥有了一个和address配对的pte了,但是这个pte如何去映射物理页框,内核又得根据pte的状态进行分类和判断,而这个过程又会牵扯出一些其他的概念……这也是初读linux内核源码的最大障碍吧,在一些复杂的处理中,一个点往往可以转载 2014-08-12 03:18:19 · 1193 阅读 · 0 评论 -
Linux 3.0内核Makefile分析
<br />[摘要] 由于Linux的独特优势,使越来越多的企业和科研机构把目光转向Linux的开发和研究上。目前Linux最新的稳定内核版本为2.6.17,但是当今绝大部分对于Linux Makefile的介绍文章都是基于2.4内核的,可以说关于2.6内核Makefile相关的文章凤毛麟角,笔者抽时间完成了这篇分析文章,让读者迅速熟悉Linux最新Makefile体系,从而加深对内核的理解,同时也希望能对Linux在公司的推广起到一定的推动作用,算是抛砖引玉吧!<br />转载 2010-12-21 11:48:00 · 931 阅读 · 0 评论 -
Linux与Android休眠唤醒对比(二)
Android 休眠与唤醒(二)Android 中定义了几种低功耗状态:earlysuspend,suspend,hibernation。1,earlysuspend是一种低功耗的状态,某些设备可以选择进入某种功耗较低的状态,比如LCD可以降低亮度或灭掉;2,suspend是指除电源管理以外的其他外围模块以及c转载 2011-06-13 13:52:00 · 1320 阅读 · 0 评论 -
Linux中软中断机制分析
什么是软中断机制?Linux中的软中断机制用于系统中对时间要求最严格以及最重要的中断下半部进行使用。在系统设计过程中,大家都清楚中断上下文不能处理太多的事情,需要快速的返回,否则很容易导致中断事件的丢失,所以这就产生了一个问题:中断发生之后的事务处理由谁来完成?在前后台程序中转载 2011-08-16 15:08:24 · 786 阅读 · 0 评论 -
arm linux 中断初始化
中断机制的核心数据结构是 irq_desc,它完整地描述了一条中断线(或称为“中断通道” ) 。irq_desc 结构在 include/linux/irq.h 中定义在 kernel/irq/handle.c 中有个全局 irq_desc 数组,描述了系统中所有的中断线转载 2011-10-17 19:56:06 · 1036 阅读 · 0 评论 -
Linux信号详解
一 信号的种类可靠信号与不可靠信号, 实时信号与非实时信号可靠信号就是实时信号, 那些从UNIX系统继承过来的信号都是非可靠信号, 表现在信号不支持排队,信号可能会丢失, 比如发送多次相同的信号, 进程只能收到一次. 信号值小于SIGRTMIN的都是非可靠信号.非可靠信号就是非实时信号, 后来, Linux改进了信号机制, 增加了32种新的信号, 这些信转载 2012-07-13 10:00:58 · 484 阅读 · 0 评论 -
Linux内核信号处理机制介绍
本文简单介绍下Linux信号处理机制,为介绍二进制翻译下信号处理机制做一个铺垫。本文主要参考书目《Linux内核源代码情景分析》《独辟蹊径品内核:Linux内核源代码导读》首先,先说一下什么是信号。信号本质上是在软件层次上对中断机制的一种模拟,其主要有以下几种来源:程序错误:除零,非法内存访问…外部信号:终端Ctrl-C产生SGINT信号,定时器到期产生SIGALRM…转载 2012-07-13 09:59:15 · 572 阅读 · 0 评论 -
用户空间缺页异常pte_handle_fault()分析--(下)--写时复制
在pte_handle_fault()中,如果触发异常的页存在于主存中,那么该异常往往是由写了一个只读页触发的,此时需要进行COW(写时复制操作)。如当一个父进程通过fork()创建了一个子进程时,子进程将会共享父进程的页框。之后,无论是父进程还是子进程要对相应的内存进行写操作,都要进行COW,也就是为自己重新分配一个页框,并把之前的数据复制到页框中去,再写。[cpp] view转载 2014-08-12 03:16:48 · 1510 阅读 · 0 评论 -
ARM-LINUX的进程切换
本文主要记录S3C6410/ARM1176JZF-S架构下Linux(kernel 2.6.35)内核如何进行进程切换。进程切换是操作系统进程调度的基础,首先要能够实现切换,接下来才谈得上“多进程”、“多线程”以及调度算法等更高级的话题。(这里在说“进程切换”的时候提到多线程,并不是把概念搞混淆了。在内核里谈切换的时候,Linux并不区分进程与线程,因为这里只有task,一个进程里如果有多转载 2014-08-12 02:37:34 · 1306 阅读 · 0 评论 -
高级Linux Kernel Inline Hook技术分析与实现
==Ph4nt0m Security Team== Issue 0x03, Phile #0x03 of 0x07 |=---------------------------------------------------------------------------=||=--------------=[ 高级Linux Kernel转载 2012-12-17 10:51:06 · 945 阅读 · 0 评论 -
linux 内核管理几篇好Blog
http://www.cnblogs.com/zhaoyl/p/3695517.html原创 2014-07-23 16:58:47 · 725 阅读 · 0 评论 -
F2FS文件系统架构与原理分析(五)——元数据组织及管理
1. 元数据区域元数据区域包含以下几种元数据(参见博文:F2FS文件系统架构与原理分析(二)——磁盘布局 ):(1) NAT —— Node Address Table(2) SSA —— Segment Summary Area(3) SB —— Superblock(4) CP —— Checkpoint(5) SI转载 2013-10-23 14:29:50 · 2997 阅读 · 0 评论 -
函数getopt(),及其参数optind
getopt被用来解析命令行选项参数。#include extern char *optarg; //选项的参数指针 extern int optind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern int opterr, //当opterr=0时,getopt不向stderr输出错转载 2013-04-07 13:20:31 · 1053 阅读 · 0 评论 -
Linux系统调用过程
一. 概述 系统调用是应用程序与内核交互的一种方式。系统调用作为一种接口,通过系统调用,应用程序能够进入操作系统内核,从而使用内核提供的各种资源,比如操作硬件,开关中断,改变特权模式等等。首先,系统调用是一个软中断,既然是中断那么一般就具有中断号和中断处理程序两个属性,Linux使用0x80号中断作为系统调用的入口,而中断处理程序的地址放在中断向量表里。 二转载 2012-12-20 00:02:35 · 572 阅读 · 0 评论 -
mmc驱动的读写过程解析
mmc io的读写从mmc_queue_thread()的获取queue里面的request开始。 先列出调用栈,看下大概的调用顺序, 下面的内容主要阐述这些函数如何工作。host->ops->request() // sdhci_request()mmc_start_request()mmc_start_req()mmc_blk_issue_rw_转载 2014-08-06 23:54:46 · 7566 阅读 · 0 评论 -
Linux内核调试方法总结
内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场。调试内核的关键在于你的对内核的深刻理解。 一 调试前的准备在调试一个bug之前,我们所要做的准备工作有: 有一个被确认的bug。包含这个bug的内核版本号,需要分析出这个bug在哪一个版本被引入,这个对于解决问题有极大的帮助。转载 2014-08-04 23:11:07 · 2669 阅读 · 0 评论 -
linux中关于创建子进程系统堆栈的分析
2.6.24内核在task_struct结构中增加了一个void类型的指针stack,使它指向进程的系统空间堆栈顶端这是在do_fork()-->copy_process()-->dup_task_struct()函数中实现的:struct thread_info *ti;ti = alloc_thread_info(tsk);if (!ti) { free_task_struc原创 2014-07-20 22:43:00 · 766 阅读 · 0 评论 -
uboot 与 Linux 内核移植
Linux移植V0.1.02010/05/05UBoot移植UBoot版本:u-boot-2010.03.tar.bz2ARCH: armCPU: arm1176BOARD: samsung/smdk6410SOC: s3c64xx添加和裁剪源代码添加相关文件夹和源代码:1)创建文件夹:board/samsung/smdk6410; nand_spl/board/samsung/smdk6410。转载 2010-12-21 01:24:00 · 1288 阅读 · 0 评论 -
探索 Linux 内存模型
理解 Linux 使用的内存模型是从更大程度上掌握 Linux 设计和实现的第一步,因此本文将概述 Linux 内存模型和管理。 Linux 使用的是单一整体式结构 (Monolithic),其中定义了一组原语或系统调用以实现操作系统的服务,例如在几个模块中以超级模式运行的进转载 2011-08-18 17:45:57 · 452 阅读 · 0 评论 -
blktrace 深度了解linux系统的IO运作
我们在Linux上总是要保存数据的,数据要么保存在文件系统里(如ext3),要么就在裸设备里面。我们在使用这些数据的时候都是通过文件这个抽象来访问的,操作系统会把我们需要的数据给我们,我们通常无需和块设备打交道。从下图我们可以很清楚的看到:我们会发现IO是个层次很深的子系统,有很复杂的数据流动线路。至于操作系统如何去存储和获取这些数据对我们完全是黑盒子的,这通常不是问题。但是如果我转载 2012-05-12 16:40:55 · 1432 阅读 · 0 评论 -
Linux IO子系统和文件系统读写流程
我们所有分析的,是基于2.6.32及其后的内核.我们在Linux上总是要保存数据,数据要么保存在文件系统里(如ext3),要么就保存在裸设备里。我们在使用这些数据的时候都是通过文件这个抽象来访问的,操作系统会把我们需要的数据提交给我们,而我们则无需和块设备打交道。从下图,我们可以清除的看到:I/O子系统是个层次很深的系统,数据请求从用户空间最转载 2012-05-12 16:52:34 · 933 阅读 · 0 评论 -
read 系统调用剖析
简介: 大部分程序员可能会有这样的疑问:当在程序中调用库函数 read 时,这个请求是经过哪些处理最终到达磁盘的呢,数据又是怎么被拷贝到用户缓存区的呢?本文介绍了从 read 系统调用发出到结束处理的全过程。该过程包括两个部分:用户空间的处理、核心空间的处理。用户空间处理部分是系统调用从用户态切到核心态的过程。核心空间处理部分则是 read 系统调用在 linux 内核中处理的整个过程。Rea转载 2012-05-12 17:02:57 · 2251 阅读 · 1 评论 -
Linux驱动学习--时间、延迟及延缓操作
Tasklets 另一个有关于定时的内核设施是 tasklet。它类似内核定时器:在中断时间运行且运行同一个 CPU 上, 并接收一个 unsigned long 参数。不同的是:无法要求在一个指定的时间执行函数,只能简单地要求它在以后的一个由内核选择的时间执行。它对于中断处转载 2011-08-16 15:52:03 · 466 阅读 · 0 评论 -
用CodeViz绘制函数调用关系图(call graph)
CodeViz是《Understanding The Linux Virtual Memory Manager》(at Amazon,下载地址在页尾)的作者Mel Gorman 写的一款分析C/C++源代码中函数调用关系的open source工具(类似的open sourc转载 2011-09-09 14:46:31 · 998 阅读 · 0 评论 -
简单认识自旋锁和信号量
为了避免多个进程对同一资源进行访问或多处理器并发产生竞争,内核采用锁机制来实现对共享数据的保护。首先简单分析一下操作系统之分类: 一 操作系统分类实时操作系统和分时操作系统。它们的共同特点是都是多任务的,但是主要区别在于应用场合,举个不恰当的例子实时操作系统应用于导弹发射、卫星发转载 2011-07-27 14:05:54 · 618 阅读 · 0 评论 -
FAT文件系统原理(二)
四、FAT分区原理。先来一幅结构图: 现在我们着重研究FAT格式分区内数据是如何存储的。FAT分区格式是MICROSOFT最早支持的分区格式,依据FAT表中每个簇链的所占位数(有关概念,后面会讲到)分为fat12、fat16、fat32三种格式"变种",但其基本存储方式是相似的。 仔细研究图7中的fat16和fat32分区的组成结构。下面依次解释DBR、FA转载 2012-03-03 15:49:18 · 664 阅读 · 0 评论 -
FAT文件系统原理(四)
★FAT16存储原理: 当把一部分磁盘空间格式化为fat文件系统时,fat文件系统就将这个分区当成整块可分配的区域进行规划,以便于数据的存储。一般来讲,其划分形式如图7所示。我们把FAT16部分提取出来,详细描述一下: FAT16是Microsoft较早推出的文件系统,具有高度兼容性,目前仍然广泛应用于个人电脑尤其是移动存储设备中,FAT16简单来讲由图4.3.11所示的转载 2012-03-03 16:13:59 · 933 阅读 · 0 评论 -
FAT文件系统原理(三)
4.3 FAT表和数据的存储原则。 FAT表(File Allocation Table 文件分配表),是Microsoft在FAT文件系统中用于磁盘数据(文件)索引和定位引进的一种链式结构。假如把磁盘比作一本书,FAT表可以认为相当于书中的目录,而文件就是各个章节的内容。但FAT表的表示方法却与目录有很大的不同。 在FAT文件系统中,文件的存储依照FAT表制定的簇转载 2012-03-03 16:13:17 · 598 阅读 · 0 评论 -
FAT文件系统原理(一)
一、硬盘的物理结构: 硬盘存储数据是根据电、磁转换原理实现的。硬盘由一个或几个表面镀有磁性物质的金属或玻璃等物质盘片以及盘片两面所安装的磁头和相应的控制电路组成(图1),其中盘片和磁头密封在无尘的金属壳中。硬盘工作时,盘片以设计转速高速旋转,设置在盘片表面的磁头则在电路控制下径向移动到指定位置然后将数据存储或读取出来。当系统向硬盘写入数据时,磁头中“写数据”电流产生磁场使盘片表面转载 2012-03-03 15:48:15 · 499 阅读 · 0 评论 -
Android 开发之 ---- bootloader (LK)
LK是什么 LK 是 Little Kernel 它是 appsbl (Applications ARM Boot Loader)流程代码 ,little kernel 是小内核小操作系统。 LK 代码 在 bootable/bootloadler/lk 目录下 LK 代码结构 +ap转载 2012-11-26 23:40:23 · 1329 阅读 · 1 评论 -
内核比较: 2.6 内核中改进了内存管理
随着 Linux 内核的发展和成熟,更多的用户期待着 Linux 可以运行非常大的系统来处理科学分析应用程序或者甚至海量数据库。这些企业级的应用程序通常需要大量的内存才能好好运行。2.4 Linux 内核有识别相当大数量的内存的功能,但是 2.5 内核发生了很多改变,使其有能力以转载 2011-08-18 18:52:46 · 474 阅读 · 0 评论 -
RCU 机制
《RCU是什么?》第一部分概述Read-copy update (RCU) 是一种 2002 年 10 月被引入到内核当中的同步机制。通过允许在更新的同时读数据,RCU 提高了同步机制的可伸缩性(scalability)。相对于传统的在并发线程间不区分是读者还是写者的简单互斥性锁机制,或者是哪些允许并发读但同时不 允许写的读写锁,RCU 支持同时一个更新线程和多个读线程的并发。RC转载 2012-09-14 18:04:52 · 1082 阅读 · 0 评论 -
Linux进程间通信分类 以及 pipe的原理实现
http://blog.sina.com.cn/s/blog_4a84bd960100by8s.htmlhttp://home.lupaworld.com/home-space-uid-296848-do-blog-id-230801.html一个大型的应用系统,往往需要众多进程协作,进程(Linux进程概念见附1)间通信的重要性显而易见。本系列文章阐述了Linux环境转载 2012-09-13 19:44:08 · 766 阅读 · 0 评论 -
Linux与Android休眠唤醒对比(一)
Linux休眠(suspend)的简单介绍在Linux中(PC和嵌入式系统),休眠主要分三个主要的步骤:1,冻结用户态进程和内核态任务.2,调用注册的设备的suspend的回调函数. 顺序是按照注册顺序3,休眠核心设备和使CPU进入休眠态冻结进程是内核把进程列表中所有的进程的状态都设置转载 2011-06-13 13:50:00 · 1132 阅读 · 0 评论 -
内核线程 && completion使用方法
Linux系统提供了一种比信号量更好的同步机制,即completion,它用于一个执行单元等待另一个执行单元执行完某事。Linux系统中与completion相关的操作主要有以下4种: (1) 定义completion struct completio转载 2011-08-29 15:05:06 · 622 阅读 · 0 评论 -
Linux文件系统之文件的读写
一:前言文件的读写是文件系统中最核心也是最复杂的一部份,它牵涉到了很多的概念.之前分析文件系统其它操作的时候,遇到与文件系统相关的读写部份都忽略过去了.在这一节里,来讨论一下文件的读写是怎样实现的.二:I/O请求的概述如之前所提到的,为了提高文件的操作效率,文件系统中的内容都是缓存在内存里的.每当发起一个Rear/Write请求的时候,都会到页面高速缓存中寻找具体的页面.如果页面不转载 2012-08-14 17:06:37 · 1052 阅读 · 0 评论 -
Linux内存管理图解
一、逻辑地址转线性地址 机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。我们写个最简单的hello world程序,用gccs编译,再反编译后会看到以下指令:mov 0x80495b0, %eax这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据段的基地址,转载 2012-05-16 14:19:41 · 1062 阅读 · 0 评论 -
Linux PM QoS framework(
Linux PM QoS framework(1)_概述和软件架构Linux PM QoS framework(2)_PM QoS classLinux PM QoS framework(3)_per-device PM QoS原创 2015-03-10 15:03:39 · 1636 阅读 · 0 评论