关于文件写入的原子性讨论

​   文件的写入是否是原子的?多个线程写入同一个文件是否会写错乱?多个进程写入同一个文件是否会写错乱?想必这些问题多多少少会对我们产生一定的困扰,即使知道结果,很多时候也很难将这其中的原理清晰的表达给提问者,侯捷曾说过,源码面前,了无秘密,那么本文也希望从源代码的角度分析上述问题。在开始之前我们需要补充一下Linux 文件相关的一些基础原理,便于更好的看懂Linux源代码。​   学过Linux的...
阅读(327) 评论(0)

Linux内核原理-pid namespace

前言这几晚在看进程相关的内核原理,正好看到了pid这块,看起来不是很复杂,但是引入了pid namespace后增加了一些数据结构,看起来不是那么清晰了,参考了Linux内核架构这本书,看完后感觉还没有理解。所以就在网上找了一些文章参考,其中我发现了一篇质量相当不错的文章,为什么说质量不错呢主要是因为笔者在博文中并没有乱贴代码一桶,也没有按照常规的代码分析,而是以一种追踪溯源的方法还原了整个pid的...
阅读(2328) 评论(6)

Linux内核模块编程-系统调用拦截

系统调用拦截本文实验基于Centos6.5 内核版本2.6.32-431.el6.x86_64,系统调用拦截的目的其实就是把系统真正要执行的系统调用替换为我们自己写的内核函数。系统调用拦截的实现那么如何去实现系统调用拦截呢,通过学习系统调用的内核实现我们发现其实系统调用的地址是放在sys_call_table中通过系统调用号定位到具体的系统调用地址,然后开始调用,那么通过编写内核模块来修改sys_c...
阅读(1032) 评论(0)

Linux内核模块编程-与设备文件对话

与设备文件对话在上一篇博文中,我们编写了一个字符设备驱动,简单的回顾下我们编写的流程: 实现open/close/read/write四个操作设备文件的函数 填充file_operations结构体 注册设备和指明操作设备的file_operations 与设备之间可以通过上面提到的几个函数来进行通信,但是对于某些设备来说,设备的操作且无法通过上面提到的几个函数来实现 ioctl的一些简介: i...
阅读(620) 评论(0)

Linux内核模块编程-proc文件系统进阶

proc作为输入关于proc的一些基本概念和基本使用以及一些核心数据结构可以参考我的上一篇文章 在上一篇文章中提到了利用proc作为内核空间传递数据给用户空间的一种方式,那么proc能否作为用户空间传递数据给内核空间的一种手法呢?答案当然是可以的,熟悉linux的读者应该都知道我们不光光可以读取proc文件中的内容还是可以向proc文件中写入要传递的数据的,那么如何通过proc来向内核输入信息呢,...
阅读(913) 评论(0)

内联汇编基础学习

内联汇编简介在Linux内核代码中有一部分是使用汇编语言编写的,尤其是与特定体系结构相关的代码和一些对性能影响很大的代码都是使用汇编语言进行编写的,那么GCC为了可以在C语言中来编写汇编代码,提供了内联汇编的功能,可以在C代码中直接内嵌汇编语言,大大方便了程序设计。内核汇编基本语法 __asm__ [__volatiate__]( 汇编语句模板 :输出部分...
阅读(689) 评论(0)

Linux内核模块编程-proc文件系统

什么是procproc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。 来自于百度百科 使用proc在内核态和用户态传递数据创建p...
阅读(1162) 评论(0)

Linux内核原理-进程入门

进程进程是处于执行期的程序,进程不仅仅是一段可执行程序的代码,通常进程还包括其他资源,比如打开的文件,挂起的信号,内核内部的数据结构,处理器状态,内存地址空间,或多个执行线程,存放全局变量的数据段等。线程是进程中活动的对象,每个线程都拥有一个独立的程序计数器,进程炸,和一组进程寄存器。内核调度的对象是线程,而不是进程。传统的Unix系统中一个进程只包含一个线程。对于linux而言,线程只不过是一种特...
阅读(681) 评论(0)

Linux内核模块编程-字符设备驱动

设备驱动简介设备被大概的分为两类: 字符设备和块设备。 字符设备 提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。相反,此类设备支持按字节/字符来读写数据。举例来说,键盘、串口、调制解调器都是典型的字符设备。 块设备 应用程序可以随机访问设备数据,程序可自行确定读取数据的位置。硬盘、软盘、CD-ROM驱动器和闪存都是典型的块设备,应用程序可以寻址磁盘上的任何位置,并由此读取数据。此外...
阅读(817) 评论(0)

Linux内核模块编程-HelloWorld

HelloWorld内核开始断断续续学习内核,大概半年了,多少开始对内核有点感悟了,但是对于这个庞然大物我显得很渺小,在枯燥的内核源码之中似乎没有一点点成功的喜悦,因此我选择学习内核模块编程,通过编写一些内核模块来体验那一点点小小的成就感吧!什么是内核模块内核模块是具有独立功能的程序。它可以被单独编译,但是不能单独运行,它的运行必须被链接到内核作为内核的一部分在内核空间中运行最简单的内核模块#inc...
阅读(1634) 评论(0)
    个人资料
    • 访问:92952次
    • 积分:2039
    • 等级:
    • 排名:千里之外
    • 原创:111篇
    • 转载:0篇
    • 译文:1篇
    • 评论:24条
    博客专栏
    最新评论