精华内容
下载资源
问答
  •  《Linux内核网络栈源代码情景分析》共分为5个部分。具体内容包括网络栈总体架构分析、网络协议头文件分析、BSDsocket层实现分析、INETsocket层实现分析、网络层实现分析、链路层实现分析、网络设备驱动程序分析、...
  • 另外,作者根据自己反复阅读 Linux 2.6 内核源代码和 Linux 内核参考书的笔记与心得,用很大篇幅深入剖析了 Linux 内核的组成结构以及各组件的实现原理,在阐述理论的同时对内核源代码进行详细注释,这样既加深了对 ...
  • linux内核相关视频解析: 5个方面分析linux内核架构,让你对内核不再陌生 90分钟了解Linux内存架构,numa的优势,slab的实现,vmalloc的原理 手把手带你实现一个Linux内核文件系统 简介 作用是将应用层序的请求传递...

    linux内核相关视频解析:

    5个方面分析linux内核架构,让你对内核不再陌生
    90分钟了解Linux内存架构,numa的优势,slab的实现,vmalloc的原理
    手把手带你实现一个Linux内核文件系统

    简介

    作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。Linux进程1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接起源于该进程。virt/ ---- 提供虚拟机技术的支持。

    Linux内核预备工作

    理解Linux内核最好预备的知识点:

    懂C语言
    懂一点操作系统的知识
    熟悉少量相关算法
    懂计算机体系结构

    Linux内核的特点:

    结合了unix操作系统的一些基础概念

    在这里插入图片描述

    Linux内核的任务:

    1.从技术层面讲,内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。

    2.从应用程序的层面讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。在实际工作中内核抽象了相关细节。

    3.内核是一个资源管理程序。负责将可用的共享资源(CPU时间、磁盘空间、网络连接等)分配得到各个系统进程。

    4.内核就像一个库,提供了一组面向系统的命令。系统调用对于应用程序来说,就像调用普通函数一样。

    内核实现策略:

    1.微内核。最基本的功能由中央内核(微内核)实现。所有其他的功能都委托给一些独立进程,这些进程通过明确定义的通信接口与中心内核通信。

    2.宏内核。内核的所有代码,包括子系统(如内存管理、文件管理、设备驱动程序)都打包到一个文件中。内核中的每一个函数都可以访问到内核中所有其他部分。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。

    哪些地方用到了内核机制?

    1.进程(在cpu的虚拟内存中分配地址空间,各个进程的地址空间完全独立;同时执行的进程数最多不超过cpu数目)之间进行通 信,需要使用特定的内核机制。

    2.进程间切换(同时执行的进程数最多不超过cpu数目),也需要用到内核机制。

    进程切换也需要像FreeRTOS任务切换一样保存状态,并将进程置于闲置状态/恢复状态。

    3.进程的调度。确认哪个进程运行多长的时间。

    Linux进程

    1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接起源于该进程。

    2.通过pstree命令查询。实际上得系统第一个进程是systemd,而不是init(这也是疑问点)

    3.系统中每一个进程都有一个唯一标识符(ID),用户(或其他进程)可以使用ID来访问进程。

    Linux内核源代码的目录结构

    Linux内核源代码包括三个主要部分:

    内核核心代码,包括第3章所描述的各个子系统和子模块,以及其它的支撑子系统,例如电源管理、Linux初始化等

    其它非核心代码,例如库文件(因为Linux内核是一个自包含的内核,即内核不依赖其它的任何软件,自己就可以编译通过)、固件集合、KVM(虚拟机技术)等

    编译脚本、配置文件、帮助文档、版权说明等辅助性文件

    使用ls命令看到的内核源代码的顶层目录结构,具体描述如下。

    include/ ---- 内核头文件,需要提供给外部模块(例如用户空间代码)使用。

    kernel/ ---- Linux内核的核心代码,包含了3.2小节所描述的进程调度子系统,以及和进程调度相关的模块。

    mm/ ---- 内存管理子系统(3.3小节)。

    fs/ ---- VFS子系统(3.4小节)。

    net/ ---- 不包括网络设备驱动的网络子系统(3.5小节)。

    ipc/ ---- IPC(进程间通信)子系统。

    arch// ---- 体系结构相关的代码,例如arm, x86等等。
    arch//mach- ---- 具体的machine/board相关的代码。
    arch//include/asm ---- 体系结构相关的头文件。
    arch//boot/dts ---- 设备树(Device Tree)文件。

    init/ ---- Linux系统启动初始化相关的代码。
    block/ ---- 提供块设备的层次。
    sound/ ---- 音频相关的驱动及子系统,可以看作“音频子系统”。
    drivers/ ---- 设备驱动(在Linux kernel 3.10中,设备驱动占了49.4的代码量)。

    lib/ ---- 实现需要在内核中使用的库函数,例如CRC、FIFO、list、MD5等。
    crypto/ ----- 加密、解密相关的库函数。
    security/ ---- 提供安全特性(SELinux)。
    virt/ ---- 提供虚拟机技术(KVM等)的支持。
    usr/ ---- 用于生成initramfs的代码。
    firmware/ ---- 保存用于驱动第三方设备的固件。

    samples/ ---- 一些示例代码。
    tools/ ---- 一些常用工具,如性能剖析、自测试等。

    Kconfig, Kbuild, Makefile, scripts/ ---- 用于内核编译的配置文件、脚本等。

    COPYING ---- 版权声明。
    MAINTAINERS ----维护者名单。
    CREDITS ---- Linux主要的贡献者名单。
    REPORTING-BUGS ---- Bug上报的指南。

    Documentation, README ---- 帮助、说明文档。

    【文章福利】需要C/C++ Linux服务器架构师学习资料加群812855908(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等)
    在这里插入图片描述

    Linux内核体系结构简析简析

    在这里插入图片描述

    图1 Linux系统层次结构

    最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。GNU C Library (glibc)也在这里。它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。

    Linux 内核可以进一步划分成 3 层。最上面是系统调用接口,它实现了一些基本的功能,例如 read 和 write。系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。这些代码是 Linux 所支持的所有处理器体系结构所通用的。在这些代码之下是依赖于体系结构的代码,构成了通常称为 BSP(Board Support Package)的部分。这些代码用作给定体系结构的处理器和特定于平台的代码。

    Linux 内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。Linux 也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。每种内核都有自己的优点,不过这里并不对此进行讨论。

    随着时间的流逝,Linux 内核在内存和 CPU 使用方面具有较高的效率,并且非常稳定。但是对于 Linux 来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性。Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个例子是 Linux 可以在一个具有内存管理单元(MMU)的处理器上运行,也可以在那些不提供 MMU 的处理器上运行。

    Linux 内核的 uClinux 移植提供了对非 MMU 的支持。

    图2是Linux内核的体系结构
    在这里插入图片描述

    图2 Linux内核体系结构

    Linux内核的主要组件有:系统调用接口、进程管理、内存管理、虚拟文件系统、网络堆栈、设备驱动程序、硬件架构的相关代码。

    (1)系统调用接口
    SCI 层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样,这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。

    (2)进程管理
    进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。在用户空间,通常使用进程 这个术语,不过 Linux 实现并没有区分这两个概念(进程和线程)。内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSIX] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSIX 机制)。

    进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争 CPU,这种算法都可以在固定时间内进行操作。这种算法就称为 O(1) 调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。O(1) 调度程序也可以支持多处理器(称为对称多处理器或 SMP)。您可以在 ./linux/kernel 中找到进程管理的源代码,在 ./linux/arch 中可以找到依赖于体系结构的源代码。

    (3)内存管理
    内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。

    (4)虚拟文件系统
    虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层(请参看图4)。
    在这里插入图片描述

    图3 Linux文件系统层次结构

    在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件。文件系统的源代码可以在 ./linux/fs 中找到。文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。

    (5)网络堆栈
    网络堆栈在设计上遵循模拟协议本身的分层体系结构。回想一下,Internet Protocol (IP) 是传输协议(通常称为传输控制协议或 TCP)下面的核心网络层协议。TCP 上面是 socket 层,它是通过 SCI 进行调用的。socket 层是网络子系统的标准 API,它为各种网络协议提供了一个用户接口。从原始帧访问到 IP 协议数据单元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 层提供了一种标准化的方法来管理连接,并在各个终点之间移动数据。内核中网络源代码可以在 ./linux/net 中找到。

    (6)设备驱动程序
    Linux 内核中有大量代码都在设备驱动程序中,它们能够运转特定的硬件设备。Linux 源码树提供了一个驱动程序子目录,这个目录又进一步划分为各种支持设备,例如 Bluetooth、I2C、serial 等。设备驱动程序的代码可以在 ./linux/drivers 中找到。

    (7)依赖体系结构的代码
    尽管 Linux 很大程度上独立于所运行的体系结构,但是有些元素则必须考虑体系结构才能正常操作并实现更高效率。./linux/arch 子目录定义了内核源代码中依赖于体系结构的部分,其中包含了各种特定于体系结构的子目录(共同组成了 BSP)。对于一个典型的桌面系统来说,使用的是 x86 目录。每个体系结构子目录都包含了很多其他子目录,每个子目录都关注内核中的一个特定方面,例如引导、内核、内存管理等。这些依赖体系结构的代码可以在 ./linux/arch 中找到。

    如果 Linux 内核的可移植性和效率还不够好,Linux 还提供了其他一些特性,它们无法划分到上面的分类中。作为一个生产操作系统和开源软件,Linux 是测试新协议及其增强的良好平台。Linux 支持大量网络协议,包括典型的 TCP/IP,以及高速网络的扩展(大于 1 Gigabit Ethernet [GbE] 和 10 GbE)。Linux 也可以支持诸如流控制传输协议(SCTP)之类的协议,它提供了很多比 TCP 更高级的特性(是传输层协议的接替者)。

    Linux 还是一个动态内核,支持动态添加或删除软件组件。被称为动态可加载内核模块,它们可以在引导时根据需要(当前特定设备需要这个模块)或在任何时候由用户插入。

    Linux 最新的一个增强是可以用作其他操作系统的操作系统(称为系统管理程序)。最近,对内核进行了修改,称为基于内核的虚拟机(KVM)。这个修改为用户空间启用了一个新的接口,它可以允许其他操作系统在启用了 KVM 的内核之上运行。除了运行 Linux 的其他实例之外, Microsoft Windows也可以进行虚拟化。惟一的限制是底层处理器必须支持新的虚拟化指令。

    Linux体系结构和内核结构区别

    1.当被问到Linux体系结构(就是Linux系统是怎么构成的)时,我们可以参照下图这么回答:从大的方面讲,Linux体系结构可以分为两块:

    (1)用户空间:用户空间中又包含了,用户的应用程序,C库

    (2)内核空间:内核空间包括,系统调用,内核,以及与平台架构相关的代码

    在这里插入图片描述

    2.Linux体系结构要分成用户空间和内核空间的原因:

    1)现代CPU通常都实现了不同的工作模式,

    以ARM为例:ARM实现了7种工作模式,不同模式下CPU可以执行的指令或者访问的寄存器不同:

    (1)用户模式 usr

    (2)系统模式 sys

    (3)管理模式 svc

    (4)快速中断 fiq

    (5)外部中断 irq

    (6)数据访问终止 abt

    (7)未定义指令异常

    以(2)X86为例:X86实现了4个不同级别的权限,Ring0—Ring3 ;Ring0下可以执行特权指令,可以访问IO设备;Ring3则有很多的限制

    2)所以,Linux从CPU的角度出发,为了保护内核的安全,把系统分成了2部分;

    3.用户空间和内核空间是程序执行的两种不同状态,我们可以通过“系统调用”和“硬件中断“来完成用户空间到内核空间的转移

    4.Linux的内核结构(注意区分LInux体系结构和Linux内核结构)
    在这里插入图片描述

    Linux驱动的platform机制

    Linux的这种platform driver机制和传统的device_driver机制相比,一个十分明显的优势在于platform机制将本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform_device提供的标准接口进行申请并使用。这样提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性。下面是SPI驱动层次示意图,Linux中的SPI总线可理解为SPI控制器引出的总线:
    在这里插入图片描述

    和传统的驱动一样,platform机制也分为三个步骤:

    1、总线注册阶段:
    内核启动初始化时的main.c文件中的kernel_init()→do_basic_setup()→driver_init()→platform_bus_init()→bus_register(&platform_bus_type),注册了一条platform总线(虚拟总线,platform_bus)。

    2、添加设备阶段:
    设备注册的时候Platform_device_register()→platform_device_add()→(pdev→dev.bus = &platform_bus_type)→device_add(),就这样把设备给挂到虚拟的总线上。

    3、驱动注册阶段:
    Platform_driver_register()→driver_register()→bus_add_driver()→driver_attach()→bus_for_each_dev(), 对在每个挂在虚拟的platform bus的设备作__driver_attach()→driver_probe_device(),判断drv→bus→match()是否执行成功,此时通过指针执行platform_match→strncmp(pdev→name , drv→name , BUS_ID_SIZE),如果相符就调用really_probe(实际就是执行相应设备的platform_driver→probe(platform_device)。)开始真正的探测,如果probe成功,则绑定设备到该驱动。

    从上面可以看出,platform机制最后还是调用了bus_register() , device_add() , driver_register()这三个关键的函数。

    下面看几个结构体:

    struct platform_device           
    (/include/linux/Platform_device.h)
    {        
    const char    * name;        
    int        id;        
    struct device    dev;        
    u32        num_resources;        
    struct resource    * resource;
    };
    

    Platform_device结构体描述了一个platform结构的设备,在其中包含了一般设备的结构体struct device dev;设备的资源结构体struct resource * resource;还有设备的名字const char * name。(注意,这个名字一定要和后面platform_driver.driver àname相同,原因会在后面说明。)

    该结构体中最重要的就是resource结构,这也是之所以引入platform机制的原因。

    struct resource                            
    ( /include/linux/ioport.h)
    {        
    resource_size_t start;        
    resource_size_t end;        
    const char *name;        
    unsigned long flags;        
    struct resource *parent, *sibling, *child;
    };
    

    其中 flags位表示该资源的类型,start和end分别表示该资源的起始地址和结束地址(/include/linux/Platform_device.h):

    struct platform_driver              
    {        
    int (*probe)(struct platform_device *);        
    int (*remove)(struct platform_device *);        
    void (*shutdown)(struct platform_device *);        
    int (*suspend)(struct platform_device *, pm_message_t state);        
    int (*suspend_late)(struct platform_device *, pm_message_t state);        
    int (*resume_early)(struct platform_device *);        
    int (*resume)(struct platform_device *);        
    struct device_driver driver;
    };
    

    Platform_driver结构体描述了一个platform结构的驱动。其中除了一些函数指针外,还有一个一般驱动的device_driver结构。
    名字要一致的原因:

    上面说的驱动在注册的时候会调用函数bus_for_each_dev(), 对在每个挂在虚拟的platform bus的设备作__driver_attach()→driver_probe_device(),在此函数中会对dev和drv做初步的匹配,调用的是drv->bus->match所指向的函数。platform_driver_register函数中drv->driver.bus = &platform_bus_type,所以drv->bus->match就为platform_bus_type→match,为platform_match函数,该函数如下:

    static int platform_match(struct device * dev, struct device_driver * drv)   
    {       
    struct platform_device *pdev = container_of(dev, struct platform_device, dev);
    return (strncmp(pdev->name, drv->name, BUS_ID_SIZE) == 0);
    }
    

    是比较dev和drv的name,相同则会进入really_probe()函数,从而进入自己写的probe函数做进一步的匹配。所以dev→name和driver→drv→name在初始化时一定要填一样的。

    不同类型的驱动,其match函数是不一样的,这个platform的驱动,比较的是dev和drv的名字,还记得usb类驱动里的match吗?它比较的是Product ID和Vendor ID。

    个人总结Platform机制的好处:

    1、提供platform_bus_type类型的总线,把那些不是总线型的soc设备都添加到这条虚拟总线上。使得,总线——设备——驱动的模式可以得到普及。

    2、提供platform_device和platform_driver类型的数据结构,将传统的device和driver数据结构嵌入其中,并且加入resource成员,以便于和Open Firmware这种动态传递设备资源的新型bootloader和kernel 接轨。

    Linux内核体系结构

    因为Linux内核是单片的,所以它比其他类型的内核占用空间最大,复杂度也最高。这是一个设计特性,在Linux早期引起了相当多的争论,并且仍然带有一些与单内核固有的相同的设计缺陷。

    在这里插入图片描述

    为了解决这些缺陷,Linux内核开发人员所做的一件事就是使内核模块可以在运行时加载和卸载,这意味着您可以动态地添加或删除内核的特性。这不仅可以向内核添加硬件功能,还可以包括运行服务器进程的模块,比如低级别虚拟化,但也可以替换整个内核,而不需要在某些情况下重启计算机。
    想象一下,如果您可以升级到Windows服务包,而不需要重新启动……

    内核模块

    如果Windows已经安装了所有可用的驱动程序,而您只需要打开所需的驱动程序怎么办?这本质上就是内核模块为Linux所做的。内核模块,也称为可加载内核模块(LKM),对于保持内核在不消耗所有可用内存的情况下与所有硬件一起工作是必不可少的。
    在这里插入图片描述

    模块通常向基本内核添加设备、文件系统和系统调用等功能。lkm的文件扩展名是.ko,通常存储在/lib/modules目录中。由于模块的特性,您可以通过在启动时使用menuconfig命令将模块设置为load或not load,或者通过编辑/boot/config文件,或者使用modprobe命令动态地加载和卸载模块,轻松定制内核。

    第三方和封闭源码模块在一些发行版中是可用的,比如Ubuntu,默认情况下可能无法安装,因为这些模块的源代码是不可用的。该软件的开发人员(即nVidia、ATI等)不提供源代码,而是构建自己的模块并编译所需的.ko文件以便分发。虽然这些模块像beer一样是免费的,但它们不像speech那样是免费的,因此不包括在一些发行版中,因为维护人员认为它通过提供非免费软件“污染”了内核。

    内核并不神奇,但对于任何正常运行的计算机来说,它都是必不可少的。Linux内核不同于OS X和Windows,因为它包含内核级别的驱动程序,并使许多东西“开箱即用”。希望您能对软件和硬件如何协同工作以及启动计算机所需的文件有更多的了解。
    在这里插入图片描述

    展开全文
  • Linux内核由哪几个子系统组成

    千次阅读 2018-05-24 09:32:12
    *Linux内核由哪几个子系统组成?** Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序...

    *Linux内核由哪几个子系统组成?**

    Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。
    1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。
    2.内存管理(MM)允许多个进程安全的
    共享主内存区域。Linux
    的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余
    的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映
    射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。
    3.虚拟文件系统
    (Virtual File
    System,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件
    系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
    4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。
    5.进程间通讯(IPC) 支持进程间各种通信机制。

    内核分为进程管理系统、内存管理系统、I/O管理系统和文件管理系统等四个子系统.

    转载于:https://blog.51cto.com/13669173/2119711

    展开全文
  • 本书主要对 Linux 1.2.13 内核协议栈的全部源代码做了详细的分析, 该版本所有代码都在一个文件夹中,每种协议的实现都只有一个文件与之对应,分析该版本源代码可以方便读者迅速掌握 Linux 网络协议结构。...
  • Linux内核主要由那几个部分组成?

    万次阅读 2018-04-01 10:32:17
    linux内核分为进程管理系统 、 内存管理系统 、 i/o管理系统 和文件管理系统四个子系统。   linux内核主要由哪几个部分组成: Linux内核的主要模块分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理...

    linux内核分为进程管理系统 、 内存管理系统 、 i/o管理系统 和文件管理系统四个子系统。

     

    linux内核主要由哪几个部分组成:

    Linux内核的主要模块分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,系统的初始化(引导)、系统调用。

     

    展开全文
  •  如下图所示,Linux体系结构,从大的方面可以分为用户空间(User Space)和内核空间(Kernel Space)。  用户空间中包含了C库,用户的应用程序。在某些体系结构图中还包含了shell,当然shell脚本也是Linux...
  • 操作系统内核就是我们说的android了,不过他包括了linux内核了。操作系统服务就是android的一套结构了,给我们直观的就是那个有点炫的界面了。我们可以通过点击来实现我们想要的功能。用户应用就是我们常玩的QQ啊...
  • 本书对早期linux内核(v0.12)全部代码文件进行了详细、全面的注释和说明,旨在帮助读者用较短的时间对linux的工作机理获得全面而深刻的理解,为进一步学习和研究linux打下坚实的基础。虽然选择的版本较低,但该内核...
  • Linux 内核分析及应用

    千次阅读 2018-11-06 11:55:57
    本书分模块介绍了 Linux 操作系统的内核设计和实现,针对关键概念、算法和数据结构做了重点的讲解。同时,对诸多经典应用程序进行了剖析,如 Nginx、Memcached、Redis、LVS 等,讲解如何利用操作系统提供的底层支持...

    编辑推荐

    本书分模块介绍了 Linux 操作系统的内核设计和实现,针对关键概念、算法和数据结构做了重点的讲解。同时,对诸多经典应用程序进行了剖析,如 Nginx、Memcached、Redis、LVS 等,讲解如何利用操作系统提供的底层支持进行合理的应用设计和实现。

    内容简介

    本书由架构师亲力打造,分享了他十多年后端开发经验,特别是围绕 Linux 系统进行的服务开发经验。

    本书共8章,主要内容包括:

    • 第1章介绍 Linux 对进程和线程的实现原理,并分析了 Memcached 和 Nginx 工作进程池模型的实现;
    • 第2章介绍并发的概念以及 Linux 中的并发相关工具,然后分析常见开源软件的并发问题;
    • 第3章介绍 Linux 是如何进行内存管理的,分析了 Memcached 和 Redis 的内存管理机制;
    • 第4章介绍 Linux 系统对中断进行的封装和实现;
    • 第5章介绍 I/O 的全过程,以及某些开源系统中 I/O 相关调用的实现等;
    • 第6章介绍 Linux 文件系统的整体架构及核心概念,然后介绍 ext4 文件系统的特点,以及 TFS 小文件系统的设计思路;
    • 第7章介绍 Linux 进程隔离技术,以及 Docker 容器的部分实现;
    • 第8章介绍 Linux 网络层数据的流转过程,以及 lvs 如何在 netfilter 上定制,后分析了 Nginx 服务器 socket 监听初始化的过程。

    作者简介

    陈科,曾在阿里巴巴等多家互联网公司担任架构师、技术总监等职位,参与设计和开发了多个应对高并发、高可用的互联网系统,对 Linux 系统以及围绕 Linux 生态体系的开源软件有深入研究,热爱分享,在 UPYUN、DBA+、高可用架构群等组织的会议或者讨论组中做过专题分享。

    本书内容

    对本书的赞誉

    本书在分析 Linux 进程、并发、内存、中断、IO、网络的同时,还分析了目前大家熟知的 Nginx、Memcached、Redis、LVS 等知名开源软件,理论结合实践,让人受益匪浅。特别是结合了容器化技术的分析,让读者从底层了解容器化(Docker)的基本原理,在容器化火热的今天,不得不说作者特别贴心。这是一本开发人员、架构师都值得一看的增强内功的书。

    ——许泽彬,淘宝技术专家


    经过20多年的发展,Linux 已经成为互联网技术的基石之一。虽然关于 Linux 的书籍众多,但几乎是现代操作系统理念的介绍,或者在此之上结合 Linux 源码加以分析,从而使读者了解操作系统的演变和实现。本书的内容更贴合互联网时代,让读者重温 Linux 之外,作者更希望引发大家思考操作系统的魅力。每一章不仅介绍核心理念和实现,而且还带领大家拓展技术的延展性,重新思考 Nginx、Redis、LVS 等产品的技术发展脉络。饮水思源,思考技术的延展性的书籍少之又,本书是难得佳品。

    ——杨翔,广东三维家信息科技有限公司 CTO、前蚂蚁金服高级技术专家


    本书的作者是我多年的老友,其对技术的兴趣与钻研精神令我非常敬佩。本书很好地将 Linux 内核与现今流行的重要技术相结合,阐述了很多技巧,然而最令我欣赏的是作者对“知其然,知其所以然”的实践与布道。技巧可以让人即刻受益,然而在“思想”就显得渺小了,领悟了技术思想将使人终身受益!我们也看到很多老鸟们在会耍十八般武艺后,遇到了发展和晋升的瓶颈,归根到底是缺乏这种思想和实践。本书以实战的方式演绎了如何去“知其然”,更示范了如何去“知其所以然”,就如同名家教你如何临摹名画,引人入胜,发人深省。

    ——胡志强,前马云公益基金会平台总经理,阿里巴巴技术总监


    IT 大时代,技术浪潮席卷整个人类社会。作为一名程序员或者架构师,每天会面对纷繁的技术领域与挑战,掌握扎实的操作系统、数据结构与算法、编译原理、数学知识,是最基础、最重要的,直接决定个人职业生涯的未来。我与本书作者认识多年且有机会一同共事,一直以来对其深厚的技术底蕴、孜孜不倦的技术钻研,甚为佩服!本书对 Linux 内核源代码的分析深入浅出,娓娓道来,涵盖了 Linux 内核的各个重要方面,并且涉及目前业界热门的容器与虚拟化技术,如果读者能够沿着本书的脉络,结合 Linux 源代码阅读,一定能够开卷有益,收获良多!

    ——冯黎,前华为软件开放平台架构师


    对于从事 Linux 平台的开发者来说,了解 Linux 内核尤为重要,它不仅可以使我们对 Linux 更加了解,而且使我们分析问题会更加深入本质。本书从 Linux 内核分析到实际应用,结合 Nginx、Redis、Memcached 等常用应用的实际问题进行详尽的分析,特别是对于一些关键技术点,作者都给予了深入的剖析和评价,对于从事 Linux 平台的开发者来说本书无疑是一次知识盛宴。

    ——刘晓飞,前58同城首席架构师,技术总监


    设计和实现一款优秀的操作系统内核或者应用程序充满了挑战,也正因为如此,深入理解 Linux 内核以及运行在 Linux 内核之上的具有代表性的应用程序就显得非常有意义。我与本书作者陈科相识已久,见证了他多年战斗在一线,有着丰富的企业级系统架构经验。本书分模块介绍了 Linux 操作系统的内核设计和实现,针对关键概念、算法和数据结构做了重点的讲解;并结合诸多经典应用程序解析了如何利用操作系统提供的底层支持进行合理的设计和实现。Linux 是一个庞大且伟大的工程,如果你不满足于站在巨人的肩膀上,想要知其所以然,提升自己面对未知问题时的“迁移学习”能力,那么本书将是一个很好的起点。

    ——郁佳杰,贝贝网 CTO


    现在是一个 IOT 正在兴起的时代,我们的编程视角不断地放大,从普通的 PC 机到人手一部的智能机,再到各式各样的终端设备,这样的高速成长离不开底层的操作系统升级。以毫不夸张地说,Linux 系统占据了绝对的重要地位,我们任何的系统设计和架构最后都可以追溯到系统内核中。

    阿里巴巴最近10年在技术上突飞猛进,某种程度上正是得益于对 Linux 系统底层的深度定制和使用,这才能研发出一系列的中间件和云产品,支撑着 N 个双11。

    我和本书作者陈科认识好多年,每一次的交流我都能吸收到更多的技术灵感,我认为这正是本书能够带来的价值。掌握内核之后,理解和认识任何其他技术简直是不费吹灰之力。很多人会觉得研究内核没有用处,其实我们经常讲的高并发、多线程等,正是 Linux 赋予我们的能力。

    我已经要沉浸在这本书的乐趣中了,相信这本书可以让大家能够更快地掌握和理解 Linux 精髓,这是一件非常伟大的贡献!

    ——焦英俊,未达科技创始人,前阿里巴巴中文站首席架构师,技术总监


    本书作者拥有丰富的架构工作经验,是以架构师身份在学习、实践 Linux 的过程中总结出来的产物。本书内容涵盖了 Linux 重要概念的分析过程,引导读者一步步进入到 Linux 源码的世界,对刚接触 Linux 的工程师很有指导价值。

    ——金立,河狸家技术 VP


    在工程化领域,已有足够多的开源产品和组件,让我们快速搭建产品应用,然而产品质量、架构和运维的好坏,取决于我们开发人员对更多细节和实现原理的掌握,这又关乎自身的成长和发展。本书每个章节基本上是从问什么、什么是,开始介绍基本概念和实现机制,然后以常见开源产品的场景和案例进行问题分析,既适合于初级开发人员,又适合架构师和多年经验的老鸟。我与本书作者相识多年,他对技术的热情和“知其所以然”的钻研精神一直令我敬佩,本书结合了作者自身多年的实战经验,带着大家进行“知其然”的实践和思考,非常值得一读。

    ——张晓科,顶象科技风控技术负责人,前阿里巴巴风控技术专家


    编程如同写诗,程序员用一种精巧设计的“符号”输送给计算机,从而构建着这个信息世界;计算机是对空间和时间的形式化描述,是对描述性知识的精确表达;更形象地说计算机通过“符号”形式化的表述指令的计算过程。对计算机系统的本质进行挖掘,是我们提高技艺和兴趣所在,本书最大的特点就是以应用层和 Linux 内核的运行机制相结合的方式,站在程序应用的视角深入内核这个奇妙的世界,读来有一种醍醐灌顶的畅快感。

    ——徐兆朋,爱财科技集团技术负责人


    在互联网飞速发展的20年,新兴技术层出不穷,但是大道之间,以不变应万变。作为技术人员,大部分编写的软件都是运行在操作系统之上的,尤其是运行在 Linux 操作系统上。不管你是业务程序员还是底层中间件程序员,掌握好 Linux 内核都大有裨益。本书从实战角度出发,对 Linux 的实现进行剖析,推荐所有有志于成为系统架构师的技术人员阅读。

    ——郭秀军,吉利集团曹操专车 CTO


    Linux 诞生二十多年,已经成为开源运动的代名词,吸收了全世界优秀程序员的精华。我印象中的本书作者陈科是 Linux 的狂热分子,十年前我刚认识陈科,他就在钻研 Linux 源码,在阿里期间经常搞一些内部分享,攒了不少粉丝。本书沉淀了陈科这些年对 Linux 系统的从全局纵览到局部设计的深入理解,不同于市面上常见的 Linux 源码介绍书籍,本书不仅仅是讲解代码实现,更是对一些精妙的设计理念做了剖析,相信一定能让读者受益匪浅。

    ——大少,阿里巴巴集团研究员,天猫首席架构师

    前言

    随着计算机技术的发展,开发人员想要根据业务需求写出相关实现代码还是比较容易的,因为已经有了很多工具、组件、库等可帮助我们实现功能。开发人员很少会自己裸写代码,不会从底层到上层全部由自己来实现。于是,很多开发人员一旦遇到程序出现问题就会茫然失措,不知道该如何处理,甚至故障诊断和分析都成了一门高深的技术难题。

    我们做任何一件事情都应该知其然,并知其所以然。操作系统是计算机的基础,所有的应用程序都是运行在操作系统之上的,所以,不管开发人员使用什么语言,开发什么行业的应用,都应该了解操作系统的原理与实现细节。

    本人因为长期从事系统架构相关的工作,在涉及一些中间件或者基础组件的研发工作过程中,经常会与操作系统打交道,特别是 Linux 内核。我个人认为,所有应用开发人员都应该了解操作系统的实现原理和思路。Linux 是人类工程史上的一个奇迹(那么大的工程,那么多人在网络上维护,能保持那么高的可用性),Linux 内核作为一个开放源码的工程,在很多方面值得我们学习和借鉴。其实在工程领域,很多问题的解题思路是类似的,掌握内核的实现,对于我们更好地编写高性能、高可靠性的程序有很大帮助,也更加利于千里定位故障,秒杀 Bug。

    Linux 体系结构

    操作系统是所有应用程序生长的河床,它帮我们屏蔽各种硬件的细节,并且抽象出各种系统调用供应用开发人员来使用。

    下面来介绍一下本书将要介绍的 Linux 内核的体系结构(图1),以便于后续章节展开分析。

    图1 Linux 内核的体系结构

    整个 Linux 内核可以分为4层:

    • 驱动管理层,驱动并管理外部一些硬件设备,例如磁盘、网卡等。

    • 工具层,内核抽象出一些通用组件便于自己使用,例如并发管理中的一些锁、per-cpu 变量等工具,另外还有中断机制,也给进程管理、信号处理等提供了基础功能。

    • 系统能力层,操作系统的功能包括进程管理、内存管理、文件系统、I/O 管理、网络等,这些功能都是基于工具层和驱动管理层提供的能力来构建的。

    • 系统调用接口层(syscall),给应用程序开发人员提供相关接口。因为系统调用的使用成本较高,参数也比较多,需要对内核有较多了解,所以,又抽象出一些 libc 等库函数来封装系统调用,应用开发人员一般都是通过 libc 等库来与内核打交道的。

    推荐预备知识

    理论上说,只需具备一门编程语言的开发基础就能阅读本书,不过,为了更好地研究操作系统,我推荐大家先阅读下面的书籍:

    • 《80x86汇编语言程序设计》(沈美明等),与 CPU 打交道最好的方式还是汇编语言,另外,了解汇编语言也方便更好地掌握计算机体系结构,进而深入理解系统的工作原理。

    • 《Intel 开发手册卷3》,Intel 公司的开发手册,可以让读者了解 CPU 的工作原理、基本指令集等。CPU 相关的功能也是内核最为重要的部分之一。

    • 《自己动手编写操作系统》(于渊),该书通过编写一个简易系统,让读者更加了解硬件的工作原理。

    • 《Linux 内核完全注释》(v0.11)(赵炯),通过对0.11版本的 Linux 学习,可以了解早期的内核架构,这对学习新版本内核也有很大的帮助。

    • 《软件调试的艺术》(马特洛夫),作为一名程序员,掌握基本的调试技能是必须的。

    • 《程序员的自我修养:链接、装载与库》(潘爱民等),这本书有助于掌握编译、链接的原理,对了解操作系统编译、运行以及应用程序的装载原理有很大帮助。

    当然,掌握 C 语言也是必须的,毕竟 Linux 内核是用 C 语言开发的,如果是 C 语言新手,可以先阅读 Memcached 的源码,因为作者的代码写得比较清晰,易于理解,初学者都可以轻松上手。

    本书章节概述

    由于篇幅有限,本书并没有详细介绍 Linux 内核的所有知识点,比如系统的启动过程,虽然对于一个内核的实现来讲,系统启动是非常重要的,但本书考虑的场景都是围绕系统启动之后提供的功能来展开的,所以本书没有包括这部分内容。

    本书共分为8章,分别介绍 Linux 操作系统的各个模块。对于 Linux 内核来讲,各个模块之间虽然都是紧密结合的,但是从系统领域模型的角度,每一章都可以独立展开,读者既可以从头开始阅读,也可以选择自己感兴趣的章节进行学习。

    第1章介绍进程和线程的概念、历史、实现原理、应用场景等,然后介绍 Linux 对进程和线程的实现,以及调度的机制、进程 CPU 亲和度等,并分析了 Memcached 线程池模型和 Nginx 工作进程池模型的实现,最后介绍了进程调试分析监控等工具的用法,包括 gdb、coredump、strace、SystemTap、DTrace 等调试工具。

    第2章介绍并发的概念及其引发的相关问题,接着介绍操作系会在哪些场景遇到并发,进而分析 Linux 中的并发相关工具,如 atomicspin_lock、semaphore、mutex、读写锁、per-cpu、抢占、内存屏障、RCU 机制,最后介绍常见开源软件中的并发问题分析,如 Nginx 的原子性、Memcached 的互斥锁、Linux 中惊群问题分析、解决 MyCat 中的同步问题、伪共享问题解决方案等。

    第3章首先介绍内存在体系结构中的作用,以及在使用中会遇到什么问题,接着介绍 MMU 的内存管理机制、线性地址、物理地址、虚拟地址等。接下来分析 Linux 是如何进行内存管理的,包括整体架构以及伙伴算法、slab 分配器、kmalloc、vmalloc、mallc 等。Linux 栈内存如何分配,对于内核栈和线程栈 Linux 又是如何区分和管理的。最后介绍了 Memcached 和 Redis 是如何管理内存的。

    第4章首先介绍 x86 系统的中断机制,以及为什么要引入中断机制,接着介绍 Linux 系统如何对中断机制进行封装和实现,并且介绍为加速中断的处理过程,Linux 引入的机制,如软中断、tasklet、工作队列等,最后介绍系统调用、时钟中断、信号处理机制等实现方式。

    第5章阐述了 I/O 在计算机体系结构中的重要性,以及 I/O 产生的全过程,还介绍 I/O 调度器和多队列机制。最后介绍一些开源系统和操作系统中 I/O 相关调用的实现,比如:I/O 多路复用 epoll 调用、Redis 对 epoll 的封装、Nginx 读文件异步 I/O、零拷贝技术,主要围绕 mmap 和 sendfile 的比对以及 Mongodb、Kafka 对零拷贝技术的使用等。

    第6章以 vfs 为切入点,介绍 Linux 文件系统的整体架构以及文件系统的核心概念,并且介绍文件系统的主要功能:如安装、文件查找、读写等,简单介绍 ext4 文件系统,最后介绍 TFS 小文件系统的设计思路。

    第7章介绍 Intel VT 的硬件虚拟化技术,以及 Linux KVM 模块等虚拟化技术,然后介绍 chroot、namespace、cgroup 等容器虚拟化底层技术在 Linux 上的实现,最后,着重分析新版 Docker 容器拆分后,容器化模块 containerd 的实现。

    第8章围绕数据如何在 Linux 网络层流转来介绍 Linux 网络层的控制机制,首先简单介绍 lvs 如何在 netfilter 上进行定制,最后介绍 Nginx 服务器 socket 监听初始化的过程。

    本书精选了大量案例,相关代码可以下载,地址为 https://github.com/lingq1818/analysis_linux,其中包括本书使用的 Linux 内核源代码。

    致谢

    感谢我曾经的同事和领导们:庄涛、胡志强、何崚、吴国庆、刘晓飞、陈洁梅、郭秀军,等等,是你们对我工作的帮助和支持,才让我有机会深入了解 Linux 并有了总结思路。感谢吴怡编辑的辛勤工作和不断督促,让本书的出版成为可能。同时还要感谢许多我不知道名字的幕后工作人员为本书付出的努力。

    最后,感谢我的家人,是你们默默地支持和付出,才能让我在工作上不断前进,你们的爱永远是我前进的动力。

    第1章 进程与线程(上)
    第1章 进程与线程(下)
    第2章 并发(上)
    第2章 并发(下)
    第3章 内存管理(上)
    第3章 内存管理(下)
    第4章 中断机制
    第5章 输入输出(上)
    第5章 输入输出(下)
    第6章 文件系统
    第7章 Linux 的进程隔离技术与 Docker 容器
    第8章 Linux 网络层数据流分析(上)
    第8章 Linux 网络层数据流分析(下)

    阅读全文: http://gitbook.cn/gitchat/geekbook/5bd685c98b3f803a63efa052

    展开全文
  • tid=15 简介 作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中...Linux内核就是基于这个策略实现的。Linux进程1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。...
  • linux内核源码解析

    2018-03-30 21:36:46
    本书对 Linux 早期操作系统内核(v0.95)全部代码文件进行了详细全面的注释和说明,旨在使读者能够在尽量短的时间 内对 Linux 的工作机理获得全面而深刻的理解,为进一步学习和研究 Linux 系统打下坚实的基础。...
  • Linux内核系统由哪些部分组成的

    千次阅读 2020-12-30 15:34:15
    Linux内核的组成: Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。 Linux内核源代码的目录结构 Linux内核源代码包含如下目录。 arch:包含和硬件体系结构相关的代码...
  • 1.bochs+linux0.11+书(linux内核完全注释、linux内核完全剖析、linux内核设计的艺术) 2.sourcesinsight+linx2.X+书(linux内核情景分析) 阅读源码分为纵向阅读和横向阅读。纵向就是跟着内核的执行流程来读,...
  • Linux内核启动过程

    千次阅读 2020-06-29 11:09:38
    嵌入式linux内核的启动全过程主要分为三个阶段。第一阶段为内核自解压过程,第二阶段主要工作是设置ARM处理器工作模式、使能MMU、设置一级页表等,而第三阶段则主要为C代码,包括内核初始化的全部工作,下面是详细...
  • Linux内核就是基于这个策略实现的。Linux进程1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接...
  • Linux内核版本和发行版本

    千次阅读 2019-12-13 09:21:11
    Linux内核版本和发行版本 1.内核版本 内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。例如,程序本身不需要了解用户的主板芯片集或磁盘...
  • linux内核版本介绍

    千次阅读 2021-01-29 16:13:32
    Linux内核版本号由3组数字组成:第一个组数字.第二组数字.第三组数字 第一个组数字:目前发布的内核主版本。 第二个组数字:偶数表示稳定版本;奇数表示开发中版本。 第三个组数字:错误修补的次数。 可以使
  • linux内核安装教程

    千次阅读 2019-11-14 21:03:57
    linux内核安装教程 内核是操作系统的核心,是一个系统软件。负责管理系统中的进程、内存、设备驱动程序、文件和网络。 内核的组成:进程管理、定时器、中断管理、内存管理、模块管理、虚拟文件系统接口、文件系统、...
  • Linux内核分析及编程高清pdf版(2-1)

    千次下载 热门讨论 2010-04-19 09:20:37
    本书作者在整理自己多年研发笔记的基础上,以精心挑选的典型开发实例,向读者详细讲述了Linux内核源代码的各部分结构、原理及组成框架,主要分析了 Linux最新版本(2.6.11)的内核源代码,帮助读者深入理解Linux内核...
  • 3.3 Linux内核的组成3.3.1 Linux内核源代码的目录结构Linux内核源代码包含如下目录。arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、arm64、powerpc、mips等。Linux内核目前已经...
  • Linux内核简介

    万次阅读 多人点赞 2018-06-16 18:56:29
    大纲:理解Linux内核最好预备的知识点Linux内核的特点Linux内核的任务内核的组成部分哪些地方用到了内核机制?Linux进程 Linux创建新进程的机制Linux线程 内核线程地址空间与特权级别 虚拟地址与物理地址 特权级别...
  • 《嵌入式系统Linux开发实战..., 《嵌入式系统Linux内核开发实战指南(ARM平台)》共32章,分为四部分,每一部分的内容既相互独立,又彼此关联,读者可以根据自己的实际情况有选择地阅读,不必严格依照书中的章节顺序。
  • Linux-2.6.11内核源码

    2018-01-22 09:47:52
    Linux内核分析及编程》配套源码,本想设置资源分为0,好像最低只能为2
  • Linux 内核深度剖析与实践

    千次阅读 2018-04-12 10:41:40
    课程简介 Linux 作为最成功的开源项目,无论是在客户端...然后对内核的设备模型机制进行讲解,让读者理解 Linux 驱动的来龙去脉;接着手把手和读者一起定制一个开发板实践案例;最后和读者分享在工作中常用的调试...
  • Linux内核启动过程分析.pdf不错的资源
  • 深入分析 Linux 内核链表

    千次阅读 2018-12-11 11:53:24
    Linux内核链表中,需要用链表组织起来的数据通常会包含一个struct list_head成员,例如在[include/linux/netfilter.h]中定义了一个nf_sockopt_ops结构来描述Netfilter为某一协议族准备的getsockopt/setsockopt接口...
  • 1.4 Linux内核和传统Unix内核的比较 由于所有的Unix内核都同宗同源,并且提供相同的API,现代的Unix内核存在许多设计上的相似之处。Unix内核几乎毫无例外的都是一个不可分割的静态可执行库。也就是说,Unix必须以...
  • linux内核启动过程分析

    千次阅读 2018-10-30 09:36:45
    (4)为了解决打印信息太多,无效信息会淹没有效信息这个问题,linux内核的解决方案是给每一个printk添加一个打印级别,级别定义0~7分别代表8种输出的重要性级别(编程的时候要用相应的宏定义,不要直接用数字),0...
  • 目的只有一个:更好地理解内核 利用Linux内核中的面向对象编程思想去分析复杂的子系统、子系统交互 利用多任务编程的思想去分析Linux内核 本套课程预计分为20个左右的小模块,每个模块一个专题,每个专题会陆续发布...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,180
精华内容 58,072
关键字:

linux内核分为

linux 订阅