自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux物理内存探测

linux在被bootloader加载到内存后, cpu最初执行的linux内核代码是/header.S文件中的start_of_setup函数,这个函数在做了一些准备工作后会跳转到boot目下文件main.c的main函数执行,在这个main函数中我们可以第一次看到与内存管理相关的代码,这段代码调用detect_memeory()函数检测系统物理内存在header.S中执行下面汇编代码:

2011-12-31 15:38:14 4297

原创 linux物理内存描述

linux使用于广泛的体系结构,因此需要用一种与体系结构无关的方式来描述内存。linux用VM描述和管理内存。在VM中兽药的普遍概念就是非一致内存访问。对于大型机器而言,内存会分成许多簇,依据簇与处理器“距离”的不同,访问不同的簇会有不同的代价。每个簇都被认为是一个节点(pg_data_t),每个节点被分成很多的成为管理区(zone)的块,用于表示内存中的某个范围。除了ZONE_DMA,ZON

2011-12-31 10:36:00 5656 2

原创 linux内存管理概述

linux内存管理建立在基本的分页机制基础上,在linux内核中RAM的某些部分将会永久的分配给内核,并用来存放内核代码以及静态内核数据结构。RAM的其余部分称为动态内存,这不仅是进程所需的宝贵资源,也是内核本身所需的宝贵资源。实际上,整个系统的性能取决于如何有效地管理动态内存。因此,现在所有多任务操作系统都在经历优化对动态内存的使用,也就是说,尽可能做到当要时分配,不需要时释放。内存管理是o

2011-12-30 20:58:07 4330 2

原创 linux内核分析之调度——实时调度算法

linux内核中提供了两种实时调度策略:SCHED_FIFO和SCHED_RR,其中RR是带有时间片的FIFO。这两种调度算法实现的都是静态优先级。内核不为实时进程计算动态优先级。这能保证给定优先级别的实时进程总能抢占优先级比他低得进程。linux的实时调度算法提供了一种软实时工作方式。实时优先级范围从0到MAX_RT_PRIO减一。默认情况下,MAX_RT_PRIO为100,所以默认的实时优先级

2011-12-30 17:30:01 9127 4

原创 linux内核分析之调度算法——CFS调度分析

前面对linux调度算法的框架进行了介绍,在这里对CFS(完全公平调度)算法进行分析。CFS允许每个进程运行一段时间、循环轮转、选择运行最少的进程作为下一个运行进程,而不再采用分配给每个进程时间片的做法了,CFS在所有可运行进程总数基础上计算出一个进程应该运行多久,而不是依靠nice值来计算时间片。nice值在CFS中被作为进程获得的处理器运行比的权重:越高的nice值(越低的优先级)进程获得

2011-12-30 14:31:20 10561 2

原创 linux内核之调度算法(二)

上层调度,linux调度的核心函数为schedule,schedule函数封装了内核调度的框架。细节实现上调用具体的调度类中的函数实现。schedule函数主要流程为:1,将当前进程从相应的运行队列中删除;2,计算和更新调度实体和进程的相关调度信息;3,将当前进重新插入到调度运行队列中,对于CFS调度,根据具体的运行时间进行插入而对于实时调度插入到对应优先级队列的队尾;4,从运行队

2011-12-30 09:30:48 4720

原创 linux内核分析之调度算法(一)

linux调度算法在2.6.32中采用调度类实现模块式的调度方式。这样,能够很好的加入新的调度算法。linux调度器是以模块方式提供的,这样做的目的是允许不同类型的进程可以有针对性地选择调度算法。这种模块化结构被称为调度器类,他允许多种不同哦可动态添加的调度算法并存,调度属于自己范畴的进程。每个调度器都有一个优先级,调度代码会按照优先级遍历调度类,拥有一个可执行进程的最高优先级的调度器类胜出,

2011-12-30 09:09:03 18293 5

原创 linux内核分析之软定时器笔记

定时器是一种软件功能,即允许在将来的某个时刻,函数在给定的时间间隔用完时被调用。超时表示与定时器相关的时间间隔已经用完的那个时刻。linux上考虑两种类型的定时器,即动态定时和间隔定时器。第一种类型由内核使用,而间隔定时器由进程在用户态创建。动态定时器动态定时的主要数据结构是一个叫做tvec_bases的per cpu变量,他包含NR_CPUS个元素,系统中每个CPU都有一个。每个元素

2011-12-28 20:42:02 2099

原创 linux内核分析之缺页中断(二)

对于缺页中断的非法访问由函数bad_area执行,该函数的执行情况分为:1,如果在用户空间访问,直接发送SEGSEGV信号;2,如果在内核空间访问分为两种情况:1)地址是一个错误的系统调用参数,修正码(典型是发送SIGSEGV信号);2)反之,杀死进程并显示内核的OOPS信息;static void__bad_area_nosemaphore(struct pt_regs

2011-12-28 13:59:12 3566

原创 linux内核分析之缺页中断

linux缺页异常程序必须能够区分由编程引起的异常以及由引用属于进程地址空间但还尚未分配物理页框的页所引起的异常。在x86-ia32体系上由do_page_fault函数处理,每个版本有所差异,现分析的版本为2.6.32 /* regs:该结构包含当异常发生时的微处理器寄存器的值 3位的error_code,当异常发生时由控制单元压入栈中 -如果第0位被清0,则异常由访问一个不存在

2011-12-28 11:39:54 8688

原创 linux内核分析之进程地址空间

本文主要介绍linux内核中进程地址空间的数据结构描述,包括mm_struct/vm_area_struct。进程线性地址区间的分配流程,并对相应的源代码做了注释。 内核中的函数以相当直接了当的方式获得动态内存。当给用户态进程分配内存时,情况完全不同了。进程对动态内存的请求被认为是不紧迫的,一般来说,内核总是尽量推迟给用户态进程分配内存。由于用户进程时不可信任的,因此,内核必须能随时准备捕获用

2011-12-27 15:36:32 3255

原创 linux内核分析之系统调用

在内核入口函数start_kernel中调用trap_init实现系统调用的初始化工作void __init trap_init(void){ ... set_system_trap_gate(SYSCALL_VECTOR, &system_call); ....}也就是IDT中0x80用来实现系统调用,实现系统调用的函数为system_call,为汇编实现ENTR

2011-12-25 17:17:23 1462

原创 linux内核分析之工作队列

可延迟函数和工作队列非常相似,但是他们的区别还是很大的。主要区别在于:可延迟函数运行在中断上下文中,而工作队列中的函数运行在进程上下文中。在中断上下文中不可能发生进程切换。可延迟函数和工作队列中的函数都不能访问进程的用户态地址空间。涉及数据结构/* * The per-CPU workqueue (if single thread, we always use the first

2011-12-25 16:27:08 2016

原创 linux中断延迟之tasklet

tasklet是I/O驱动程序中实现可延迟函数的首选方法。从下面的内核代码的分析中我们会看到,tasklet建立在两个叫做HI_SOFTIRQ和TASKLET_SOFTIRQ的软中断之上。几个tasklet可以与同一个软中断相关联,每个tasklet执行自己的函数。tasklet和高优先级的tasklet分别存放在tasklet_vec和tasklet_hi_vec数组中。下面我们结合具体的代码来

2011-12-25 15:33:25 5183 2

原创 linux软中断

在由内核执行的几个任务之间有些不是紧急的,在必要情况下他们可以延迟一段时间。一个中断处理程序的几个中断服务例程之间是串行执行的,并且通常在一个中断的处理程序结束前,不应该再次出现这个中断。相反,可延迟中断可以在开中断的情况下执行。linux中所谓的可延迟函数,包括软中断和tasklet以及通过中作队列执行的函数(这个以后说),软中断的分配是静态的(即值编译时定义),而tasklet的分配和初始

2011-12-25 14:57:55 6238

原创 linux内核中断、异常

中断:可屏蔽中断:所有有I/O设备请求的中断都是,被屏蔽的中断会一直被CPU 忽略,直到屏蔽位被重置。 不可屏蔽中断:非常危险的事件引起(如硬件失败)。 异常:处理器产生的(Fault,Trap,Abort)异常 programmed exceptions(软中断):由程序员通过INT或INT3指令触发,通常当做trap处理,用处:实现系统调用。 中断描述符表(IDT):2

2011-12-23 10:23:01 6265 2

原创 linux进程调度之进程切换

linux调度中,在schedule函数中完成选择下一个进行、进程间切换进程的切换在schedule函数中主要由两个函数完成: sched_info_switch(prev, next);主要是更新切换出去和进来进程以及对应rq的相关变量。该函数主要调用__sched_info_switch函数来实现。/* * Called when tasks are switched involu

2011-12-21 17:35:30 3774 1

原创 linux内核之进程调度(一)

等待队列Sleep相关函数将进程的状态设置为非运行态,在下一次调度来时,将在schedule函数中将本进程从运行队列中移除。sleep函数将进程加入等待队列,然后调用schedule函数选择并重新开始另一个程序的执行。当调用wake_up类函数将进程唤醒时,wake_up类函数将进程加入运行队列中,调度程序重新从sleep函数中下一条没有执行的指令开始执行。sleep类函数都调用sleep

2011-12-20 20:57:40 3192

原创 进程创建之copy_process函数

copy_process函数在进程创建的do_fork函数中调用,主要完成进程数据结构,各种资源的初始化。初始化方式可以重新分配,也可以共享父进程资源,主要根据传入CLONE参数来确定。/* * This creates a new process as a copy of the old one, * but does not actually start it yet. * * I

2011-12-20 17:07:48 6393 2

原创 进程创建

Linux中关于进程创建的主要函数有fork,vfork,clone,他们的实现都是有do_fork来完成的,只是传入的参数有差别,do_fork中调用函数copy_process从父进程中复制相关内容到子进程,其中这个复制量的确定是根据传入参数flag来确定是否需要重新申请内存还是共享父进程的资源,下面对具体的代码进行分析。 /*唯一使用的标志是SIGCHLD。这意味着在子进程终止后

2011-12-20 16:51:23 2258

原创 进程ID号

关于进程ID号,在深入理解linux内核架构中已经讲得很清楚了。下面是主要的部分。UNIX进程总是会分配一个号码用于在其命名空间中唯一地标识它们。该号码被称作进程ID号,简称PID。用fork或clone产生的每个进程都由内核自动地分配了一个新的唯一的PID值。1. 进程ID但每个进程除了PID这个特征值之外,还有其他的ID。有下列几种可能的类型。处于某个线程组(在一个进程中,以标

2011-12-19 20:24:05 6340

原创 进程任务结构与初始化

Linux系统的线程实现非常特别:他对线程和进程并不特别区分。对linux而言,线程只不过是一种特殊的进程罢了,后面我们会看到,他们都通过do_fork函数创建,只是传入的参数不一样而已。线程创建时,会共享内核资源。       在内核中,各个进程的task_struct存放在他们内核栈的尾端。这样做是为了让那些像x86那些寄存器较少的硬件体系结构只要通过栈指针就能计算出他的位置而避免额外的寄

2011-12-19 14:46:37 3289

原创 关于linux2.6.32-2内核源码分析

对Linux内核源码的分析与学习已经有一段时间了。一直想写点东西,但是嫌麻烦,也怕时间上的不允许。然而,从最近的学习中体会到,自己的理解过程和能够清楚的写出来还是有很大差别的。所以,决定在以后的学习中将对Linux内核的理解尽量以文章笔记的形式展示出来。自己的理解难免有不对的地方,希望来这里的朋友多多指教,大家共同学习,共同进步。       现定的分析版本定为2.6.32-2,以后有机会会对

2011-12-19 10:44:07 2968

Linux虚拟文件系统(路径搜索)

Linux虚拟文件系统方面的分析 主要是源代码的注释、原理分析,内核版本为2.6.32

2012-04-11

Linux虚拟文件系统(内核初始化)

Linux内核分析值虚拟文件系统,关于Linux虚拟文件系统的内核源代码解析和原理分析

2012-04-11

Linux内核分析之设备驱动模型

Linux内核分析值设备驱动模型,关于设备驱动模型的分析,和内核源代码注释笔记

2012-04-11

空空如也

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

TA关注的人

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