自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

密码小仙女

小仙女带你学密码

  • 博客(16)
  • 收藏
  • 关注

原创 Linux内核之中断初探

前言上周去校外金工实习了,中间也看过一些书,但是没有写博客总结,今天回来先写篇博客压压惊。中断初探任何的内核都是用来管理硬件的,但是他们是如何管理硬件的呢?最早的时候,是使用轮询机制,但是这种机制很浪费资源的,会降低计算机的整体性能。所以诞生了一种更好的机制,就是让硬件在需要的时候再向内核发出信号。这就是中断机制。中断中断是硬件发出的,它给处理器发送信号,表示自己需要做某些事情,本质就是

2015-11-29 22:45:03 453

原创 探秘 stdio.h

前言stdio.h   是我们经常使用的一个标准库。基本上现在的C编辑器都自动会在C文件中添加这个头文件。这一篇博客主要就是来了解这个库的前世今生。——star stdio.h是什么?这个头文件声明了很多的输入输出函数。当然几乎所有的用户级别程序都需要输入输出,事实上这也是C标准库出现的最早的头文件之一。并且它也是包含所有最多函数的头文件。所以相信探秘它也是需要很多的笔墨与精力。最早的I

2015-11-24 18:17:36 531

原创 探秘C stddef.h

stddef.h这个头文件里变包含的就是C 的标准定义。C标准委员会认为即使再一个独立的环境中,C语言也应当有它的用途,独立环境是一个由于种种原因而不能支持完整C标准库的环境。对于这样的实现只需要实现4个C语言的头文件就可以了,分别是:      .它也可以支持更多,但是C 标准没有对中间级别进行说明。在一些环境中,实现必须提供整个的C标准库,这种环境就叫宿主环境,它是指代完全实现C标准的

2015-11-21 20:39:55 536

原创 探秘C<stdarg.h>实现自己的printf( )

前言最近一直再看C标准库的东西,今天看到了 .__STARTC语言由一个非常强大的功能,就是它允许定义可接受一个可变参数列表的函数。尽管C为了这个可变参数也一直在修改着自身的东西,现在基本稳定,现阶段主要是有一下一些宏来确定这些东西。va_start  : 一个函数必须至少声明一个固定的参数。这个宏引用了最后一个固定参数所以它能够对可变参数表进行定位。va_arg : 不能在va_ar

2015-11-21 16:40:31 1386

原创 探秘C-signal信号

探秘C程序中的信号简单的不多说,也就不进行简单的介绍了。可移植性:首先对于中声明的函数不能完全的安全的定义一种可移植的用法,原则上,可以为一个只有raise报告的信号指定一个处理程序,但是很难想象它的那些方面比中的跳转函数做得更好,同时也不能保证一个指定的信号在C语言的所有实现中不可能报告,所以不管什么时候程序处理信号,它的可移植性都会受到限制。C标准库关于信号的一些内容:在头文件为处理

2015-11-20 10:01:31 549

原创 探秘C函数栈帧---实现自己的setjmp/longjmp

前言最近再看《C标准库》看到了setjmp和longjmp函数这里,所以就打算好好学习下C的函数栈帧。__start在标准C库中,它是通过汇编语言完成的,但是我们这里为了研究原理,所以用C 语言来完成这个库函数。[c]#include#include#define _JBFP 1#define _JBMOV 60#define _JBOFF 4#define _NSETJMP

2015-11-18 22:18:43 1039

原创 深度探秘assert---(已放弃,核心已转储)

深度探秘assert---(已放弃,核心已转储)前言前边一直再看内核的slab缓存,真是累如狗,但是它的体系是在是太复杂了,看来需要进一步总结,在这个过程中经常看到assert 断言这个东西,所以今天轻松一下,看看这个的底层实现。__start我使用的是glibc-2.18 还是挺新的,首先看一个例子,如果之前接触过C 的同学应该知道assert 名叫“断言”就是判断一个表达式的真伪。若果

2015-11-16 17:31:18 6270

原创 内存管理器(十七)kernel内存管理----slab设计与实现(分配对象)

内存管理器(十七)kernel内存管理----slab设计与实现(分配对象)前言上一篇主要写了slab的初始化与创建一个高速缓存。这一篇主要分析slab 是如何分配对象的。void * kmem_cache_alloc(kmem_cache_t *cachep,gfp_t flags)  这个是主要分析的对象。__start[c]/*** kmem_cache_alloc - All

2015-11-15 17:48:04 983

原创 内存管理器(十五)kernel内存管理---slab设计与实现2(初始化与创建)

内存管理器(十五)kernel内存管理---slab设计与实现2前言上一篇博文主要写了slab的设计与主要的数据结构,但是依然有很多的问题没有解决,在这里先标记下。1.着色这个动作到底干了什么?是否只是为了减少内存碎片?2.slab 结构体并没有再内核源码中定义,它是如何实现对不同类型对象的分配的?带着这两个问题我们进入slab 实现的探索slab 实现首先一个应用实例本来想要先从

2015-11-11 17:14:21 592

原创 内存管理器(十五)内核调试利器----dump_stack( )

内存管理器(十五)kernel 调试小工具----dump_stack( )前言其实我还在分析slab,但是它的实现还是比较复杂的,争取尽快出结果,在看这些东西的过程中我不但看到了很多厉害的设计方法,思想思路。同时我也发现了很多有意思的小东西。这是第二个。__start当你写了一个内核模块以后,但是除了问题。或者在调试内核的时候出现了不明白的东西,BUG你就可以使用这个小工具。它可以展现所

2015-11-11 12:55:34 581

原创 内存管理器(十四)内核模块常用标识EXPORT_SYMBOL

内存管理器(十四)内核模块常用标识EXPORT_SYMBOL前言最近在看slab 的源码,发现了这个标识EXPORT_SYMBOL 。不是很理解,后来查了资料才明白了这个标识的作用是用来引用不同模块之间函数的标记。__START简要说明下吧。有函数fun1 在模块mod1 中,mod2模块中也有这个函数,但是mod2怎么引用这个函数呢?这个标识就是解决这个问题的。首先在模块mod1中fu

2015-11-10 22:34:23 452

原创 内存管理器(十三)kernel内存管理---slab的设计与实现1

内存管理器(十三)kernel内存管理---slab的设计与实现1前言前面分析了kmalloc/free 函数,本来打算直接进入物理内存的管理,但是发现将这里作为突破口研究内存管理并不合适,由因为之前分析了Glibc库的内存管理,所以直接将这里作为入口深入进内存管理模块。kernrl的学习路程就边学边探索,提升的是个人的学习能力。有了学历能力,就什么也不怕了。__startslab 可以

2015-11-09 16:10:14 563

原创 内存管理器(十二)kernel内存管理----kmalloc/kfree

内存管理器(十二)kernel内存管理----kmalloc/kfree前言上一篇说了页的获取与释放,既然是内核内存管理,内核自然也有自己的一套内存分配与释放函数。go on!kmalloc( )--分配函数这个函数是内核中用来分配内存的函数,它和malloc很像,当时这里多了一个flags标记。用它可以获得以字节为单位的一块内核内存。当然如果希望得到以页为单位的内存还是用__get_fr

2015-11-06 18:15:01 3018

原创 内存管理器(十一)kernel内存管理---页的获取与释放

前言上一篇说了内存管理的数据结构,现在来说说内存管理的一些接口函数,页的分配与释放。alloc_pages && __free_pages[c]includeincludeincludeincludeincludeMODULE_LICENSE("GPL");MODULE_AUTHOR("zmrlinux");MODULE_DESCRIPTION("something abou

2015-11-05 12:29:28 562

原创 内存管理器(十)kernel内存管理----数据结构

内存管理器(十) kernel内存管理----概况与数据结构前言 正式开始学习内核的内存管理了,先学习下接口函数,每一个例字都必须写内核模块实验,然后深入到函数的内部研究源码,最后写写练习的小程序。我发现最近我的废话越来越多了。页说起内存管理,自然就是两个方面,物理内存管理,虚拟内存管理,我们先看看物理内存管理。内核将物理页作为内存管理的基本单位。从虚拟内存的角度来看,页就是最小单位。

2015-11-05 08:49:51 959

原创 内存管理器(九)内核内存管理–进程相关数据结构

内存管理器(九)内核内存管理–进程相关数据结构前言前面的几篇博文都是在学习用户态内存管理,malloc与free 也研究了Glibc 的内存管理函数的实现,本来想点到位置,但是觉得还是太浅了,不够深入,遂决定,继续挖掘下去(读破万卷始见金嘛)。所以再次修改学习路线,希望最后能做出来一切实可用的东西。毕竟本科学习阶段主要还是在于掌握原理上的东西,真的很难做出什么有实际价值的东西,

2015-11-04 14:59:41 498

空空如也

空空如也

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

TA关注的人

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