自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 Linux内核-进程调度

在分析调度策略之前,我们先来看下进程的三种类型:交互式进程:这些进程经常与用户进行交互,因此需要花很多时间等待键盘鼠标等操作。当接受输入后,进程必须很快被唤醒。批处理进程:这些进程不必与用户交互,因此经常在后台运行。因为这类进程不必很快地响应,因此常受到调度程序的慢待。典型的批处理进程是程序设计语言的编译程序、数据库搜索引擎等。实时进程:这些进程有很强的调度需要。这样的进程不会被低优先级的进程

2017-02-21 15:40:36 582

原创 Linux内核-进程-do_fork()

Linux通过三种方式创建进程: fork:父进程所有的资源全部通过数据结构的复制遗传给子进程。写时复制允许父子进程读相同的物理页,只要两者中有一个试图写一个物理页,内核就把这个页的内容拷贝到一个新的物理页,并把这个新的物理页分配给正在写的进程。 clone:将资源有选择的复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,如页表(整个用户态空间)、打开的文件表及信号处理等,一

2017-02-19 19:31:09 632

原创 Linux内核-进程

Linux中的进程简介一般来说,Linux系统中的进程都具有下列要素:有一段程序供其执行,这段程序不一定是进程所专有,可以与其它进程共用有起码的“私有财产”,这就是进程专有的系统堆栈空间有“户口”,这就是在内核中的一个task_struct数据结构,即进程描述符,有了这个数据结构,进程才能成为内核调度的一个基本单位接收内核的调度有独立的存储空间,意味着拥有专有的用户空间;进一步,还意味着除前

2017-02-19 19:29:05 389

原创 Linux内核-内存-slab分配器

前面分析到Linux使用分区页框分配器满足对连续页框的请求,这适合对大块内存的请求,当处理对小内存的请求时,比如几十或几百个字节,很显然,如果此时为其分配一整个页框将会是一种浪费,所以需要引入一种新的数据结构来描述在同一页框中如何分配小内存区,Linux使用slab分配器来解决这个问题。        slab分配器把内存区看做对象,这些对象由一组数据结构和几个叫做构造或析构的函数组成。根据请

2017-02-17 23:43:26 540

原创 Linux内核信号量-up()和down()

内核信号量类似于自旋锁,当锁关闭时,它不允许内核控制路径继续执行。与自旋锁不同的是,当内核控制路径试图获取内核信号量所保护的忙资源时,相应的进程被挂起,进而会导致进程切换;而自旋锁不会导致进程切换。因此,只有可以睡眠的函数才能获取内核信号量;中断处理程序和可延迟函数都不能使用内核信号量。内核信号量结构如下:/** * 内核信号量结构 */struct semaphore { /**

2017-02-15 22:56:05 7927 1

原创 Linux内核-spin_lock()

spin_lock()在Linux2.6中,spin_lock()宏有两种实现方式,一种是具有内核抢占的spin_lock(),一种是非抢占式内核中的spin_lock(),下面先看下自旋锁的数据结构,在Linux中,每个自旋锁都用spinlock_t结构表示,如下:typedef struct { /** * 该字段表示自旋锁的状态,值为1表示未加锁,任何负数和0都表示加锁

2017-02-15 20:43:16 552

原创 Linux内核-中断-中断响应和返回

一、中断的响应和服务在前面一篇博文中,我们分析了i386 CPU的中断机制和内核中有关的初始化,现在我们进一步分析中断的响应过程和服务(和异常的响应机制不同)。我们假设外设驱动都已经完成了初始化,并且已把相应的中断服务程序挂入到特定的中断请求队列中,系统正在用户空间正常运行,并且某个外设已经产生了一次中断请求,该请求通过中断控制器到达了CPU的“中断请求”引线INTR。CPU从中断控制器取得中断向量

2017-02-09 00:27:03 2027 1

原创 Linux内核-中断-中断向量表和中断请求队列的初始化

一、中断中断通常被定义为一个事件,该事件改变处理器执行的指令顺序。中断有两种,一种是由CPU外部产生的,对于执行中的软件来说,这种中断的发生完全是“异步”的,根本无法预料此类中断会在什么时候发生,一般由其他硬件设备产生(例如键盘中断);另一种是由CPU本身在执行程序的过程中产生的,例如X86中的“INT n”。Intel手册中分别将这两种中断称为中断和异常。Intel文档中,中断又可分为可屏蔽

2017-02-08 14:35:01 4104

原创 Linux内核使用位图为进程分配pid

Linux允许用户使用一个叫做进程标识符process ID(pid)的数来标识进程,PID存放在进程描述符的pid字段。pid的值有一个上限,举个例子:默认情况下,最大的PID号为32767。那么内核是如何管理这些pid的呢?能不能用数组?可以,不过效率不高,存在循环,比较耗CPU,而且需要空间较大;内核中使用位图来管理这些pid,由于使用内嵌的汇编语言扫描位图(跟循环有质的区别),所以效率较高,

2017-02-04 14:45:23 2068

原创 Linux内核中的双链队列

在学习数据结构中的队列(双链队列)时,我们一般是在数据结构的类型定义中加入指针,以维持队列结构,例如,我们有一中双链数据结构foo:typedef struct foo{ struct foo *prev; struct foo *next; ......} foo;然后我们会为foo写一套用于各种队列操作的子程序,由于用来维持队列的两个指针类型是固定的(都指向foo数

2017-02-03 21:30:39 555

原创 Linux内核-内存-分区页框分配器

分区页框分配器处理对连续页框组的内存分配请求,主要组成如下图所示:管理区分配器接受动态内存分配与释放的请求,它首先从每CPU页框高速缓存中请求页框,若无法满足才从伙伴系统中请求分配。源码分析(Linux2.6/mm/page_alloc.c)buffered_rmqueue()此函数从指定内存管理区中分配页框,对应上图中的分配机制。static struct page *buffered_rm

2017-02-03 15:45:31 826

原创 Linux内核-内存-伙伴系统算法

Linux采用伙伴系统算法来解决外碎片问题,把所有的空闲框分组为11个块链表,每个块链表分别包含大小为1,2,4……1024

2017-02-03 15:40:01 722

原创 Linux内核-内存-硬件高速缓存和TLB原理

CPU如何通过硬件高速缓存和TLB得到虚拟地址所对应的数据

2017-01-05 02:45:30 3790

空空如也

空空如也

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

TA关注的人

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