Linux Kernel
文章平均质量分 89
selfimpr1991
这个作者很懒,什么都没留下…
展开
-
Unix 编程:多线程编程(一)
线程是程序执行的最小单位,这里介绍了进程与线程的简单解释,一个进程可以包括多个线程,并且这一个进程中的所有线程都可以访问该进程的组成部件,如文件描述符和内存。换句话说,多个线程可以自由地访问相同的存储地址空间和文件描述符,进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。线程共享进程的内存空间。原创 2014-10-26 21:15:33 · 1844 阅读 · 0 评论 -
【Linux 内核】内存管理(一)
对于内存管理,我们首先需要了解几个原创 2014-05-10 21:53:48 · 3469 阅读 · 1 评论 -
【Linux 内核】文件系统(概念篇)
一、开篇Linux下的文件系统为树形结构,入口为/(根目录)树形结构下的文件目录,Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不痛,目录结构基本上是一样的。Windows的文件结构是多个并列的树形结构,最顶部的是不同的磁盘(分区),如:C,D,E,F盘等,目录结构属于分区,启动时检测不同的分区并被赋予一个分区字母。而在Linux下,只有一个单独的顶级目录结构原创 2015-11-01 12:04:46 · 2836 阅读 · 0 评论 -
【Linux 内核】文件系统(进阶篇)
前面相继介绍文件系统的概念以及Linux内核中与文件系统相关的数据结构及文件系统内部大致关联以及虚拟文件系统,这里我们进一步剖析我们应用操作时是如何与文件系统挂钩的。上一篇最后有说道,要访问一个文件就得先访问一个目录,才能根据文件名从目录中找到该文件的目录项,进而找到其inode节点。这里我们以绝对路径访问方式来具体看看其流程是如何的:假如根据绝对路径寻找文件/tem/temp/wenqian的:1原创 2015-11-02 11:57:30 · 1676 阅读 · 0 评论 -
【Linux 内核】文件系统(结构篇)
ok,继前面概念篇之后,我们开始正式的探讨下Linux的文件系统。 文件系统是对一个存储设备上的数据和元数据进行组织的机制(教材式还是需要的),在前面的概念篇有说到,Linux支持大多数文件系统,可以预料到Linux文件系统接口实现为分层的体系结构,从而将用户接口层、文件系统实现和操作存储设备的驱动程序分隔开。Linux源码(Linux/fs文件夹下)下会有Linux支持的各种文件系统的代码实现,原创 2015-11-02 09:46:54 · 5711 阅读 · 0 评论 -
【Linux 内核】文件系统(四)
本篇将在前面的基础上,再次通过剖析虚拟文件系统以及更下层文件系统结构,主要是基于结构篇深度剖析。Linux内核的应用层就是以文件系统为核心而展开的。文件系统在整个内核架构中具有基础架构性质,字符设备、块设备这些设备驱动的概念都要依靠文件系统来实现。进阶篇说到了存储设备分区,引导区、超级块区、inode table区以及数据块区。引导区主要是为计算机开机服务的。我们这里略过,先看1、原创 2015-11-03 19:08:36 · 1367 阅读 · 0 评论 -
【Linux内核数据结构】最为经典的链表list
很久之前研读过Linux的内核源码(后来终止了,水太深,吾辈驾驭不了),看到其中的内核数据结构,对链表的实现叹为观止,是迄今为止我见过的最为经典的链表实现(不是数据内嵌到链表中,而是把链表内嵌到数据对象中)。现在再来回顾这个经典的数据结构。链表代码在头文件中声明(推荐Source Insight,源码版本:Linux-2.6.32.61),其数据结构很简单有木有,直接就一个前后链表指针,前篇S原创 2015-03-21 18:18:26 · 11277 阅读 · 5 评论 -
【Linux0.11 内核源码剖析】进程间通信——管道(pipe)
本文介绍IPC之管道通信机制的内部实现机制。首先概述管道通信,然后阐述管道的结构,之后通过剖析Linux 0.11内核源码来分析管道的内部实现机制,最后通过一个实例来阐述管道的应用。知其然,若知其所以然将有利于我们更好的应用它。原创 2015-06-03 11:58:18 · 2515 阅读 · 1 评论 -
【Linux 1.0内核源码剖析】执行程序——exec.c
父进程 fork的子进程的目的自然不是创建一个几乎与自己一模一样的进程。而是通过子进程调用 exec 函数簇去执行另外一个程序。exec() 系统调用必须定位该执行文件的二进制映像,加载并执行它。exec() 的Linux实现支持不同的二进制格式,这是通过 linux_binfmt 结构来达到的,其中内嵌了两个指向函数的指针,一个用于加载可执行文件,另一个用于加载库函数,每种二进制格式都实原创 2015-06-08 20:15:03 · 4587 阅读 · 0 评论 -
【Linux 1.0内核源码剖析】创建进程——fork.c
Linux1.0 内核源码,fork.c,主要介绍fork系统调用部分是如何创建一个新进程的,以及拷贝父进程几乎所有资源。 unix 系统通过 fork 系统调用创建一个进程,fork.c 的主要任务是为新的进程填写数据结构,相关步骤有:取得一个空闲内存页面来保存 task_struct找到一个空闲的进程槽(find_empty_process())为内存堆栈页 kernel_stack_page 取得另一个空闲的内存页面将父进程的 LDT 拷贝到子进程复制父进程的 mmap 信息给子进程sys原创 2015-06-04 21:26:42 · 7416 阅读 · 0 评论 -
【Linux 内核】内存管理(二)伙伴算法
通常情况下,一个高级操作系统必须要给进程提供基本的、能够在任意时刻申请和释放任意大小内存的功能,就像malloc 函数那样,然而,实现malloc 函数并不简单,由于进程申请内存的大小是任意的,如果操作系统对malloc 函数的实现方法不对,将直接导致一个不可避免的问题,那就是内存碎片。原创 2015-05-27 21:33:18 · 16019 阅读 · 4 评论 -
【Linux 内核】内存管理(三)slab分配器
用户应用程序对内存的需求是频繁的和任意的,而伙伴算法作为一个基础内存管理算法,并不具备提供这种任意性的条件,因此还需要以伙伴算法为基础,实现另外的内存管理机制,为用户提供申请任意大小内存的可能,这里就介绍 slab 分配器。原创 2014-05-18 20:59:04 · 8339 阅读 · 2 评论 -
【Linux 内核】进程管理
进程与程序的区别:程序是静态的一段代码,是一些保存在非易失性存储器的指令的有序集合,没有任何执行的概念;进程是一个动态的概念,它是程序执行的过程,包括动态创建、调度和消亡的整个过程,换句话说,进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构的汇集,也就是正在执行的程序代码的实时结果,从内核的观点看,进程的目的就是担当分配系统资源(CPU时间,内存等)的基本单位,是资源分配的最小单原创 2014-04-19 13:35:30 · 2406 阅读 · 0 评论 -
【Linux 内核】进程调度
现在的操作系统都是多任务的原创 2014-05-05 21:34:54 · 1370 阅读 · 0 评论 -
Unix编程:文件I/O操作及文件描述符
Unix系统中大多数文件I/O需要用到以下五个函数:open,read,write,lseek以及close。这些函数通常被称为不带缓冲的I/O(这些函数都是在内核中执行,它们直接对内核缓存区进行读写)。文件描述符对于内核而言,所有打开的文件都通过文件描述符引用,文件描述符是一个非负整数,当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。open 函数:调用open函数可以打开或创建一个文件原创 2014-08-22 21:59:30 · 1589 阅读 · 0 评论 -
Unix编程:进程基础编程(一)
进程标识符每个进程都有一个非负整型表示的唯一的进程 ID。虽然是唯一的,但是进程ID可以重用,当一个进程终止后,其进程ID就可以再次使用了。ID为0的进程通常是调度进程,常常被称为交换进程,该进程是内核的一部分,它并不执行任何磁盘上的程序,因此也被称为系统进程。进程ID为1 通常就是init 进程,在自举过程结束后由内核调用,这个进程我们在后面还会提到。我们通常用下面这些函数返回进程的一些标识符原创 2014-09-28 15:28:45 · 1243 阅读 · 0 评论 -
本博客全文目录索引
本专栏博文索引(目录)涵盖:C/C++、STL、Data Structure、Algorithm、TCP/IP、Linux(Interface/Driver/Kernel)和 Projects。 C/C++ 详解C指针 C++对象模型 深度探索C++对象内存模型 深度剖析C++虚函数 详解C++类的静态成员和C语言中的static C++拷贝构造函数与赋值函数 详解C+原创 2016-01-26 18:34:02 · 7334 阅读 · 8 评论