Linux内核原理-pid namespace

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

网络编程最佳实践

网络编程最佳实践socket描述符的引用机制socket描述符引用机制,当父进程生成一个socket描述符然后fork一个子进程后,那么这个socket描述符的引用计数就+1了此后子进程close socket描述符只是减少引用计数并没有真正关闭描述符。如果希望真正关闭描述符需要使用shutdown函数 最佳实践:fork子进程后父进程立即close掉socket描述符 connect背后机制客...
阅读(692) 评论(0)

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

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

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

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

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

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

accept()ing when you can’t问题分析

accept()ing when you can’t问题在libev的官方文档中提到一个accept()ing when you can’t的问题,下面是作者对于这个问题的分析: For example, larger servers often run out of file descriptors (because of resource limits),causing accept to f...
阅读(640) 评论(0)

内联汇编基础学习

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

Namespace机制-概述

(本文整理来自于互联网上的资料) Namespace机制概述Linux Namespaces机制提供了一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace。每个Namespace里面的资源对其他Namespace都是透明的。要创建新的Namespace,只需要在调用clone时指定相应的flag。Linux Namespaces机制为实现基于容器...
阅读(542) 评论(0)

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

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

Linux内核原理-进程入门

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

Linux中的进程关系详解

进程组的概念每一个进程除了有一个进程ID之外,还属于一个进程组,进程组通常是一个或多个进程的集合。这些进程通常是与一个作业相关的。例如:ps axu|grep bash|wc -l 这是三个进程,他们直接通过管道传递数据,为了是完成一个作业,对于这个整体来说是一个进程组,其中ps进程是进程组的组长进程。进程组也是由一个id来标识进程组的,通过使用PGID来标识,然而这个PGID==进程组组长进程的P...
阅读(739) 评论(0)

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

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

Linux内核模块编程-HelloWorld

HelloWorld内核开始断断续续学习内核,大概半年了,多少开始对内核有点感悟了,但是对于这个庞然大物我显得很渺小,在枯燥的内核源码之中似乎没有一点点成功的喜悦,因此我选择学习内核模块编程,通过编写一些内核模块来体验那一点点小小的成就感吧!什么是内核模块内核模块是具有独立功能的程序。它可以被单独编译,但是不能单独运行,它的运行必须被链接到内核作为内核的一部分在内核空间中运行最简单的内核模块#inc...
阅读(1188) 评论(0)

Cgroup使用进阶

About在我的前面两篇文章中,分别介绍了cgroup的一些基本概念,和如何去管理层次结构和control group还有如何附加子系统。但是到目前为止仍旧没有触及cgroup中最核心的东西也就是资源限制。前面的文章中仅仅说的是如何把子系统附加到某个层次上。至于如何设置子系统来限制资源,如何针对某些进程来限制都还没有涉及。那么本篇博文谈的就是这两点。Setting Parameters当我们将一个子...
阅读(913) 评论(0)

Cgroup基本使用

About在我的上一篇博文中已经谈到了Cgroup的一些基本概念,以及这些概念之间的关系。那么本篇博文则从感性一面来看看Cgroup到底是个啥?在linux系统上Cgroup被实现为一个filesystem,通过对filesystem的基本操作(mount,read,write等),来 实现对Cgroup的控制。本篇博文的实验环境是Red_Hat_Enterprise_Linux-6.5。Hier...
阅读(1337) 评论(0)
17条 共2页1 2 下一页 尾页
    个人资料
    • 访问:77845次
    • 积分:1871
    • 等级:
    • 排名:千里之外
    • 原创:110篇
    • 转载:0篇
    • 译文:1篇
    • 评论:21条
    博客专栏
    最新评论