当前位置: 首页 > news >正文

要建一个网站该怎么做网络营销是什么部门

要建一个网站该怎么做,网络营销是什么部门,wordpress网站下方,wordpress免费网站国外原文地址#xff1a;牛客网论坛最具争议的Linux内核成神笔记#xff0c;GitHub已下载量已过百万 1、前言 Linux内核是一个操作系统#xff08;OS#xff09;内核#xff0c;本质上定义为类Unix。它用于不同的操作系统#xff0c;主要是以不同的Linux发行版的形式。Linu…原文地址牛客网论坛最具争议的Linux内核成神笔记GitHub已下载量已过百万 1、前言 Linux内核是一个操作系统OS内核本质上定义为类Unix。它用于不同的操作系统主要是以不同的Linux发行版的形式。Linux内核是第一个真正完整且突出的免费和开源软件示例。Linux 内核是第一个真正完整且突出的免费和开源软件示例促使其广泛采用并得到了数千名开发人员的贡献。 Linux 内核由芬兰赫尔辛基大学的学生 Linus Torvalds 于 1991 年创建。随着程序员调整其他自由软件项目的源代码以扩展内核的功能它迅速取得了进展。Torvalds 首先使用 80386 汇编语言编写的任务切换器以及终端驱动程序然后将其发布到 Comp.os.minix Usenet 组。它很快被 Mini社区所改编为该项目提供了见解和代码。 Linux 内核越来越受欢迎因为 GNU 自己的内核 GNU Hurd 不可用且不完整而 Berkeley Software DistribuTIonBSD操作系统仍然受到法律问题的困扰。在开发人员社区的帮助下Linux 0.01 于 1991 年 9 月 17 日发布。 想知道什么是 Linux 内核上真正的不是那种时髦的创新吗 在科技行业创新这个词几乎和革命一样到处泛滥所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux 内核被称为创新但它又被称为现代计算中最大的奇迹一个微观世界中的庞然大物。 撇开营销和模式不谈Linux 可以说是开源世界中最受欢迎的内核它在近 30 年的生命时光当中引入了一些真正的规则改变者。 Cgroups2.6.24 早在 2007 年Paul Menage 和 Rohit Seth 就在内核中添加了深奥的控制组cgroups功能cgroups 的当前实现是由 Tejun Heo 重写的。这种新技术最初被用作一种方法从本质上来说是为了确保一组特定任务的服务质量。 例如你可以为与你的 WEB 服务相关联的所有任务创建一个控制组定义cgroup为例行备份创建另一个 cgroup 再为一般操作系统需求创建另一个 cgroup。然后你可以控制每个组的资源百分比这样你的操作系统和 WEB 服务就可以获得大部分系统资源而你的备份进程可以访问剩余的资源。 然而cgroups 如今变得这么著名是因其作为驱动云技术的角色容器。事实上cgroups 最初被命名为进程容器。当它们被 LXC、CoreOS 和 Docker 等项目采用时这并不奇怪。 就像闸门打开后一样“容器” 一词就像成为了 Linux 的同义词一样微服务风格的基于云的“应用”概念很快成为了规范。如今已经很难摆脱 cgroups 了它们是如此普遍。每一个大规模的基础设施如果你运行 Linux 的话可能还有你的笔记本电脑都以一种合理的方式使用了 cgroups这使得你的计算体验比以往任何时候都更加易于管理和灵活。 例如你可能已经在电脑上安装了 Flathub 或 Flatpak或者你已经在工作中使用 Kubernetes 和/或 OpenShift。不管怎样如果“容器”这个术语对你来说仍然模糊不清则可以 通过 Linux 容器从背后获得对容器的实际理解。 LKMM4.17 2018 年Jade Alglave、Alan Stern、Andrea Parri、Luc Maranget、Paul McKenney 以及其他几个人的辛勤工作的成果被合并到主线 Linux 内核中以提供正式的内存模型。Linux 内核内存[一致性]模型LKMM子系统是一套描述 Linux 内存一致性模型的工具同时也产生用于测试的用例特别命名为 klitmus。 随着系统在物理设计上变得越来越复杂增加了更多的中央处理器内核高速缓存和内存增长等等)它们就越难知道哪个中央处理器需要哪个地址空间以及何时需要。例如如果 CPU0 需要将数据写入内存中的共享变量并且 CPU1 需要读取该值那么 CPU0 必须在 CPU1 尝试读取之前写入。类似地如果值是以一种顺序方式写入内存的那么期望它们也以同样的顺序被读取而不管哪个或哪些 CPU 正在读取。 即使在单个处理器上内存管理也需要特定的任务顺序。像 x y 这样的简单操作需要处理器从内存中加载 y 的值然后将该值存储在 x 中。在处理器从内存中读取值之前是不能将存储在 y 中的值放入 x 变量的。此外还有地址依赖x[n] 6 要求在处理器能够存储值 6 之前加载 n。 LKMM 可以帮助识别和跟踪代码中的这些内存模式。它部分是通过一个名为 herd 的工具来实现的该工具以逻辑公式的形式定义了内存模型施加的约束然后列举了与这些约束一致性的所有可能的结果。 低延迟补丁2.6.38 很久以前在 2011 年之前如果你想在 Linux 上进行多媒体工作你必须得有一个低延迟内核。这主要适用于录音时添加了许多实时效果如对着麦克风唱歌和添加混音以及在耳机中无延迟地听到你的声音。有些发行版如 Ubuntu Studio可靠地提供了这样一个内核所以实际上这没有什么障碍这只不过是当艺术家选择发行版时的一个重要提醒。 然而如果你没有使用 Ubuntu Studio或者你需要在你的发行版提供之前更新你的内核你必须跳转到 rt-patches 网页下载内核补丁将它们应用到你的内核源代码编译然后手动安装。 后来随着内核版本 2.6.38 的发布这个过程结束了。Linux 内核突然像变魔术一样默认内置了低延迟代码根据基准测试延迟至少降低了 10 倍)。不再需要下载补丁不用编译。一切都很顺利这都是因为 Mike Galbraith 编写了一个 200 行的小补丁。 对于全世界的开源多媒体艺术家来说这是一个规则改变者。从 2011 年开始事情变得如此美好到 2016 年我自己做了一个挑战在树莓派 v1型号 B上建造一个数字音频工作站DAW结果发现它运行得出奇地好。 RCU2.5 RCU即 读-拷贝-更新(Read-Copy-Update)是计算机科学中定义的一个系统它允许多个处理器线程从共享内存中读取数据。它通过延迟更新但也将它们标记为已更新来做到这一点以确保数据读取为最新内容。实际上这意味着读取与更新同时发生。 典型的 RCU 循环有点像这样 删除指向数据的指针以防止其他读操作引用它。等待读操作完成它们的关键处理。回收内存空间。 将更新阶段划分为删除和回收阶段意味着更新程序会立即执行删除同时推迟回收直到所有活动读取完成通过阻止它们或注册一个回调以便在完成时调用。 虽然 RCU 的概念不是为 Linux 内核发明的但它在 Linux 中的实现是该技术的一个定义性的例子。 对于 Linux 内核创新的问题的最终答案永远是协作。你可以说这是一个好时机也可以称之为技术优势称之为黑客能力或者仅仅称之为开源但 Linux 内核及其支持的许多项目是协作与合作的光辉范例。 它远远超出了内核范畴。各行各业的人都对开源做出了贡献可以说都是因为 Linux 内核。Linux 曾经是现在仍然是自由软件的主要力量激励人们把他们的代码、艺术、想法或者仅仅是他们自己带到一个全球化的、有生产力的、多样化的人类社区中。 你最喜欢的创新是什么 这个列表偏向于我自己的兴趣容器、非统一内存访问NUMA和多媒体。无疑列表中肯定缺少你最喜欢的内核创新。在评论中告诉我。 1.1内核在操作系统中的位置 为了更具象地理解内核不妨将Linux计算机想象成有三层结构 硬件物理机这是系统的底层结构或基础是由内存RAM、处理器或 CPU以及输入/输出I/O设备例如存储、网络和图形组成的。其中CPU 负责执行计算和内存的读写操作。Linux 内核操作系统的核心。没错内核正处于核心的位置它是驻留在内存中的软件用于告诉 CPU 要执行哪些操作。用户进程这些是内核所管理的运行程序。用户进程共同构成了用户空间。用户进程有时也简称为进程。内核还允许这些进程和服务器彼此进行通信称为进程间通信或 IPC。 系统执行的代码在CPU上以以下两种模式之一运行:内核模式或用户模式。运行在内核态的代码可以不受限制地访问硬件而用户态会限制SCI对CPU和内存的访问。内存也有类似的分离(内核空间和用户空间)。这两个小细节构成了一些复杂操作的基础比如安全保护构建容器和虚拟机的权限分离。 这也意味着如果进程在用户模式下失败损失是有限且无害的并且可以由内核修复。另一方面由于内核进程要访问内存和处理器内核进程的崩溃可能会导致整个系统的崩溃。因为用户进程之间会有适当的保护措施和权限要求所以一个进程的崩溃通常不会造成太多问题。 此外由于Linux内核在实时补丁期间可以连续工作因此在应用补丁进行安全修复时不会出现宕机。 1.2Linux 内核的作用是什么 内容有以下四项作用 内存管理追踪记录有多少内存存储了什么以及存储在哪里进程管理确定哪些进程可以使用中央处理器CPU、何时使用以及持续多长时间设备驱动程序充当硬件与进程之间的调解程序/解释程序系统调用和安全防护从流程接受服务请求 正确实现时内核对用户是不可见的它在自己的小世界(称为内核空间)中工作从中分配内存跟踪所有内容的存储位置。用户看到的东西(比如Web浏览器和文件)叫做用户空间。这些应用程序通过系统调用接口(SCI)与内核交互。 可以这样理解:内核就像一个忙碌的私人助理为高管(硬件)服务。助理的工作是将员工和公众(用户)的信息和请求(流程)传递给高管记住存储的内容和位置(内存)并确定谁可以在任何给定的时间访问高管以及会议时间有多长。 1.3学习Linux内核准备工作 熟悉C语言这个是最基本的了解编译连接过程如果写过ld、lcf类的链接文件最好这样就能理解类似percpu变量的实现方法学过或者自学过计算机组成原理或者微机原理知道smp、cpu、cache、ram、hdd、bus的概念明白中断、dma、寄存器这样才能理解所谓的上下文context、barrier是什么 **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 ---- 帮助、说明文档。2、为什么要学习 Linux 内核 大部分程序员可能永远没有机会开发Linux内核或者驱动Linux那么我们为什么还需要学习Linux内核呢Linux的源代码和架构都是开放的我们可以学到很多操作系统的概念和实现原理。Linux的设计哲学体系继承了UNIX现在整个设计体系相当稳定和简化这是大部分服务器使用Linux的重要原因。 那学习Linux内核的原因就在于此。 进一步了解内核的原理有助于你更好地使用命令和程序设计让你的面试和开发更上一层楼。但是不建议直接看源代码因为Linux代码太大容易丢失。 而最好的办法是先了解一下Linux内核机制知道基本的原理与流程。 不过Linux内核机制也非常复杂而且其中互相关联。 比如说进程运行要分配内存内存映射涉及文件的关联文件的读写需要经过块设备从文件中加载代码才能运行起来进程。这些知识点要反复对照才能理清。 但是一旦攻克你会发现Linux这个复杂的系统开始透明起来。 3、如何学习Linux内核 内核的知识就像下面的绳结一样一环扣一环我们要解开它们就必须要先找到线头也就是内核中的函数接口。初学阶段我们一般不深入的研究内核代码会使用内核的接口函数就不错了。 下面提供了如何学习这些内核函数的方法就像解绳子一样 在我们学习Linux内核之前我们首先需要掌握以下几点 (1)如何学习内核先了解Linux内核由哪些组成 (2)须知Linux内核源码下载的链接 组织结构 (3)重点需要学习地知识点有哪些 (4)最后依据我为大家提供的的学习资料开启我们的Linux内核学习之旅。 (5)全网最牛Linux内核Makefile系统文件详解(纯文字代码) (6)全网最详细的Intel CPU体系结构分析(内核源码) (7)深入理解Linux Kernel内核整体架构(图文详解) (8)QEMU调试Linux内核环境搭建 (9)网友说Linux驱动讲不彻底原来这才是Linux驱动 (10)一文让你深度了解Linux内核架构和工作原理 (11)从Linux内核看socket底层的本质(IO) (12)Linux用户空间与内核空间通信(Netlink通信机制) 3.1学习资料 1系统调用接口【视频讲解】 SCI 层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样这个接口依赖于体系结构甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现并在 ./linux/arch 中找到依赖于体系结构的部分。 2操作系统原理【视频讲解】 操作系统英语Operating System缩写OS是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。根据运行的环境操作系统可以分为桌面操作系统手机操作系统服务器操作系统嵌入式操作系统等。 【 强烈推荐阅读】一文带你彻底了解零拷贝Zero-Copy技术(图解) Linux操作系统学习——启动 Linux操作系统学习——内核运行 Linux操作系统学习——内核初始化 操作系统原理(一)操作系统原理与概述(流程图) 操作系统原理(二)Linux操作系统基础的常用命令 操作系统原理(三)Linux操作系统I/O机制原理(流程图详解) 操作系统原理(四)内存管理RAID磁盘阵列与配置 操作系统原理(五)内存管理之磁盘高速缓存机制原理 操作系统原理(六)存储管理之页式、段式、段页式存储 系统操作原理(七)进程的状态和转换(五态模型) 操作系统原理(八)进程同步的几种方式及基本原理 操作系统原理(九)处理器调度基本准则和实现原理 系统操作原理(十)多进程多线程并发执行中的死锁问题 系统操作原理(十一)操作系统原理进程同步的几种方式及基本原理 系统操作原理(十二)趣谈操作系统原理存储管理之页式、段式、段页式存储 系统操作原理(十三)操作系统通过实战理解CPU上下文切换 汇编语言基础(十一)汇编语言基础知识(图文代码) 汇编语言入门(十二)汇编指令入门级整理这些你必须要知道 汇编语言指令(十三)汇编语言的所有指令总结一篇就够了 汇编语言进阶(十四)ARM体系结构处理器机制原理与实现 汇编语言进阶(十五) ARM指令集与汇编语言程序设计 3内存管理专题【视频讲解】 内核管理的另一个重要资源是内存。为了提高效率如果虚拟内存由硬件管理那么内存就按照所谓的内存分页法(大多数架构是4KB)来管理。Linux包括管理可用内存的方式和用于物理和虚拟映射的硬件机制。但是内存管理需要管理4KB以上的缓冲区。Linux提供了4KB缓冲区的抽象比如slab分配器。这种内存管理模式以4KB缓冲区为基数然后从中分配结构并跟踪内存页面的使用情况比如哪些页面已满哪些页面未完全使用哪些页面为空。这允许该模式根据系统需求动态调整内存使用。为了支持多个用户使用内存有时会耗尽可用内存。因此可以将页面移出内存放入磁盘。这个过程称为交换因为页面是从内存交换到硬盘的。内存管理的源代码可以在。/linux/mm。 【 强烈推荐阅读】尽情阅读技术进阶详解mmap原理 内存是什么一文让你了解内存是怎么实现的 嵌入式开发必备技能Linux内核源码组织结构 一文了解Linux内存管理malloc、free 实现原理 内存管理系列(一)Linux操作系统内存管理(思维导图详解) 内存管理系列(二)Linux内存管理原理知识大总结 内存管理系列(三)学完操作系统内存管理能回答这8个问题吗 内存管理系列(四)理解 Memory barrier内存屏障 内存管理系列(五)内存回收之LRU链表机制原理 内存管理系列(六)虚拟内存和物理内存机制原理 内存管理系列(七)Malloc缺页中断不同情况处理总结及反向映射RMAP 内存管理系列(八)C/C开发中的Malloc函数的实现原理 内存管理系列(九)深入理解glibc malloc内存分配器实现原理 内存管理系列(十)操作系统是如何对内存进行管理的内存与CPU之间的关系 内存管理系列(十一)为什么Linux需要虚拟内存虚拟内存对操作系统有哪些作用 内存管理系列(十二)用户态内存内存映射函数Mmap的好处 内存管理系列(十三)内存管理详解虚拟地址空间-MMU 内存管理系列(十四)C语言中的Malloc/free是如何分配内存的 内存管理系列(十五)从虚拟寻址到开源项目Linux下的内存管理详解 内存管理系列(十六)一文带你了解虚拟内存、内存分页、分段、段页式内存管理 内存管理系列(十七)Linux应用程序究竟消耗了多少内存 内存管理系列(十八)虚拟地址到物理地址是什么时候开始映射 内存管理系列(十九)浅析Linux内存管理中SLAB分配器(源码分析) 内存管理系列(二十)基于Linux内存管理的内存分配(伙伴算法和slab算法) 内存管理系列(二十一)探索内存原理的内存映射文件(图文详解) 内存管理系列(二十二)吊打字节面试官CPU缓存一致性协议MESI 内存管理系列(二十三)深入理解Linux内核页表映射分页机制原理 内存管理系列(二十四)谈谈物理内存与虚拟内存之间的映射(超详细~) 内存管理系列(二十五)内存管理C/C开发中的malloc函数的实现原理 内存管理系列(二十六)熬夜肝翻Linux内存管理所有知识点(图解) 内存管理进阶部分(一)brk/kmalloc/vmalloc系统调用分析 内存管理进阶部分(二)不连续内存分配器原理 内存管理进阶部分(三)页表缓存(TLB)与巨型页 内存管理进阶部分(四)TLB表项格式及管理 内存管理进阶部分(五)ASID原理/VMID原理 内存管理进阶部分(六)处理器对巨型页的支持 内存管理进阶部分(七)标准巨型页原理及查看 内存管理进阶部分(八)LRU算法与反向映射 内存管理进阶部分(九)缺页异常分析 内存管理进阶部分(十)写时复制缺页异常 内存管理进阶部分(十一)do_ page_ fault函教分析 内存管理进阶部分(十二)文件映射缺页中断 内存管理进阶部分(十三)匿名页面缺页异常 内存管理进阶部分(十四)内存反碎片技术 内存管理进阶部分(十五)内存碎片整理算法 内存管理进阶部分(十六)虚拟可移动区域技术原理 内存管理进阶部分(十七)内存检测与死锁检测 内存管理进阶部分(十八)内核调优参数 内存管理进阶部分(十九)/proc/sys/kernel/ 内存管理进阶部分(二十)/proc/sys/ vm/ 内存管理进阶部分(二十一)/proc/sys/fs/ 内存管理进阶部分(二十二)内存屏障与内核互斥原理 内存管理进阶部分(二十三)编译器屏障 内存管理进阶部分(二十四)处理器屏障 内存管理进阶部分(二十五)ARM64处理器内存屏障分析 内存管理进阶部分(二十六)内存与Kasan工具分析 内存管理进阶部分(二十七)五大常见内存访问错误 内存管理进阶部分(二十八)Kasan内核检测工具应用 内存管理进阶部分(二十九)页回收原理机制 内存管理进阶部分(三十)发起页回收 内存管理进阶部分(三十一)计算扫描页数 内存管理进阶部分(三十二)收缩活动页链表 内存管理进阶部分(三十三)回收不活动页 内存管理进阶部分(三十四)页交换与回收slab缓存 内存管理进阶部分(三十五)缓存着色 内存管理进阶部分(三十六)内存缓存数据结构 内存管理进阶部分(三十七)空闲对象链表及着色 内存管理进阶部分(三十八)内核调试方法printk/oops分析 内存管理实战操作(一) SIab块分配器实现 内存管理实战操作(二)进程地址空间在内核(VMA实现) 内存管理实战操作(三)内存池原理及实现 内存管理实战操作(四) perf性能分析工具 内存管理实战操作(五)perf原理机制与安装配置 内存管理实战操作(六)perf采集数据命令-29种工具应用 内存管理实战操作(七)perf采集数据至火焰图分析 4进程管理专题【视频讲解】 进程管理的重点是流程的实施。在内核中这些进程称为线程代表单个处理器虚拟化(线程代码、数据、堆栈和CPU寄存器)。在用户空间中通常使用术语进程但是Linux实现没有区分这两个概念(进程和线程)。内核SCI提供了一个应用程序编程接口(API)来创建一个新的进程(forkexec或可移植操作系统接口[POSIX]函数)停止进程(killexit)并进行通信和同步(signal或POSIX机制)。 进程管理还包括处理活动进程之间共享CPU的需求。内核实现了新的调度算法无论多少个线程争夺CPU都可以在固定的时间内运行。这种算法被称为O(1) scheduler这意味着它调度多个线程所用的时间与调度一个线程所用的时间相同。O(1)调度器也可以支持多处理器(称为对称多处理器或SMP)。您可以在中找到流程管理的源代码。/linux/kernel以及。/linux/arch。 进程管理系列(一)Linux进程管理原理详解(代码演示) 进程管理系列(二)十分钟让你像大佬一样快速了解进程状态(二种模型) 进程管理系列(三)作为互联网程序员应该了解Linux进程六种状态吗 进程管理系列(四)五分钟让你快速了解Linux进程管理实时调度与SMP 进程管理系列(六)浅析Linux的进程优先级(代码演示) 进程管理系列(七)进程管理|浅析C语言中并发同步与原子操作锁三者是什么关系 进程管理系列(八)进程管理|深入理解Linux进程述符和进程状态 进程管理系列(九)一文读懂Linux内核中的任务间调度策略 进程管理系列(十)Linux内核之进程和线程的创建和派生 进程管理系列(十一)基于Linux有几种进程状态 进程管理系列(十二)操作系统的几种CPU调度策略 进程管理系列(十二)Linux 进程管理之调度和进程切换 进程管理系列(十三)一文搞懂六大进程通信机制原理(全网最详细) 进程管理系列(十四)超详细的Socket通信原理和实例讲解(白嫖走起~) 进程管理系列(十五)这是一份很全很全的IO基础知识与概念 进程管理系列(十六)深入理解Linux内核进程的管理与调度(全知乎最详细) 进程管理基础(十七)Linux内核源码组织结构分析 进程管理基础(十八)Linux内核(五大子系统关系) 进程管理基础(十九)内核源码目录结构详解 进程管理基础(二十)如何快速掌握阅读内核源码方法与技巧 存储器结构与分区存储管理(一)主存储器结构及技术指标 存储器结构与分区存储管理(二)分配策略与分区回收 存储器结构与分区存储管理(三)页表与交换技术 存储器结构与分区存储管理(四)物理内存与虚拟内存 x86_ _ARM处理器架构(一)x86架构整体部件分析 x86_ _ARM处理器架构(二)ARM处理器架构分析 x86_ _ARM处理器架构(三)64位通用寄存器结构 x86_ _ARM处理器架构(四) 汇编基础与寻址方式 x86_ _ARM处理器架构(五)SMP架构与NUMA架构 x86_ _ARM处理器架构(六)ARM Cortex-A9处理器架构 x86_ _ARM处理器架构(七)ARM常用指令系统详解 进程原理与生命周期及系统调用(一)写时复制原理 进程原理与生命周期及系统调用(二)进程内存布局 进程原理与生命周期及系统调用(三)进程堆栈管理 进程原理与生命周期及系统调用(四)系统调用实现 进程原理与生命周期及系统调用(五)调度器及CFS调度器 进程原理与生命周期及系统调用(六)实时调度类及SMP和NUMA 进程原理与生命周期及系统调用(七)task_ struct数据结构分析 进程原理与生命周期及系统调用(八)进程内核do_ fork()/kernel_ _clone()函数分析 进程原理与生命周期及系统调用(九)RCU机制及内存优化屏障 进程原理与生命周期及系统调用(十)内核内存布局和堆管理. 进程原理与生命周期及系统调用(十一)实战操作:内核数据结构(链表和红黑树) 5网络协议栈专题【视频讲解】 协议栈英语Protocol stack又称协议堆叠是计算机网络协议套件的一个具体的软件实现。协议套件中的一个协议通常是只为一个目的而设计的这样可以使得设计更容易。因为每个协议模块通常都要和其他两个通信它们通常可以想象成是协议栈中的层。最低级的协议总是描述与硬件的物理交互。每个高级的层次增加更多的特性。用户应用程序只是处理最上层的协议。使用最广泛的是英特网协议栈由上到下的协议分别是应用层HTTPTELNETDNSEMAIL等运输层TCPUDP网络层IP链路层WI-FI以太网令牌环FDDI等物理层。 在实际中协议栈通常分为三个主要部分媒体传输和应用。一个特定的操作系统或平台往往有两个定义良好的软件接口一个在媒体层与传输层之间另一个在传输层和应用程序之间。 媒体到传输接口定义了传输协议的软件怎样使用特定的媒体和硬件“驱动程序”。例如此接口定义的TCP/IP传输软件怎么与以太网硬件对话。这些接口的例子包括Windows和DOS环境下的ODI和NDIS。 应用到传输接口定义了应用程序如何利用传输层。例如此接口定义一个网页浏览器程序怎样和TCP/IP传输软件对话。这些接口的例子包括Unix世界中的伯克利套接字和微软的Winsock。 【 强烈推荐阅读】嵌入式必备如何学习Linux内核网络协议栈 趣谈网络协议栈(一)套接字缓冲区原理 趣谈网络协议栈(二)数据包是如何处理的过程 趣谈网络协议栈(三)七层模型下三层数据通信 趣谈网络协议栈(四)传输的Arp报文结构 趣谈网络协议栈(五)Socket编程常用函数的原理及代码实现 趣谈网络协议栈(六)学习select和poll函数的内核实现 趣谈网络协议栈(七)Epoll从用户态到内核态过程分析 趣谈网络协议栈(八)套接字发送网络数据的过程 6设备驱动专题【视频讲解】 设备驱动程序是一种计算机程序用于操作或控制连接到计算机的特定类型的设备。驱动程序提供了通往硬件设备的软件接口从而使操作系统和其他计算机程序可以访问硬件功能而无需知道有关所使用硬件的确切细节。 驱动程序通过硬件连接到的计算机总线或通信子系统与设备进行通信。当调用程序调用驱动程序中的例程时驱动程序向设备发出命令。设备将数据发送回驱动程序后驱动程序可以调用原始调用程序中的例程。驱动程序依赖于硬件且特定于操作系统。它们通常提供任何必要的异步时间相关的硬件接口所需的中断处理。 设备驱动基础架构(一)I/0体系结构 设备驱动基础架构(二)系统总线(PC1、ISA、SCSI、 USB等) 设备驱动基础架构(三)与外设交互及控制设备 设备驱动基础架构(四)访问设备详解 设备驱动基础架构(五)内核块设备详解 设备驱动基础架构(六)块设备1/0操作集合及 源码分析 设备驱动基础架构(七)通用磁盘及分区源码分析 Linux设备模型(一)深度剖析LDM Linux设备模型(二)LDM数据结构分析 Linux设备模型(三)设备驱动程序原理与实现 Linux设备模型(四)kobject结构分析 Linux设备模型(五)kobj_ _type/内核对象集合 Linux设备模型(六)sysfs文件及属性 Linux设备模型(七)轮询sysfs属性文件 字符设备操作(一)主设备与次设备 字符设备操作(二)打开设备文件 字符设备操作(三)分配与注册字符设备 字符设备操作(四)写文件操作实现 字符设备操作(五)open/release方法 字符设备操作(六)read/wr ite方法 字符设备操作(七)Iseek/po11方法 字符设备操作(八)填充file_ operations结构体 块设备操作(一)块设备表示与数据结构 块设备操作(二)向系统添加磁盘及分区 块设备操作(三)打开块设备文件 块设备操作(四)B10数据结构 块设备操作(五)1/0调度 块设备操作(六)ioctl 系统调用 块设备操作(七)总线系统模块 块设备操作(八)ISA总线 块设备操作(九)PCI/PCI-E总线 块设备操作(十)USB总线 块设备操作(十一)通用驱动程序模型 浅谈设备驱动(一)操作系统 I/O 流程详解 浅谈设备驱动(二)Linux操作系统学习之字符设备 浅谈设备驱动(三)结合设备信息集合探究设备和驱动是如何绑定的 7文件系统【视频讲解】 虚拟文件系统(VFS)是Linux内核的一个非常有用的方面因为它为文件系统提供了一个通用的接口抽象。VFS在SCI和内核支持的文件系统之间提供了一个交换层(参见图4)。 文件系统类型与文件模型研究(零)一文让你彻底了解Linux内核文件系统(大总结) 文件系统类型与文件模型研究(一)磁盘文件系统(DF) 文件系统类型与文件模型研究(二)网络文件系统(NF) 文件系统类型与文件模型研究(三)i node 文件系统类型与文件模型研究(四)链接 文件系统类型与文件模型研究(五)AP|编程接口 文件系统类型与文件模型研究(六)VFS数据结构 文件系统类型与文件模型研究(七)超级块(super_ block) 文件系统类型与文件模型研究(八)挂载描述符 (mount结构体) 文件系统类型与文件模型研究(九)索引结点(inode结构体) 文件系统类型与文件模型研究(十)目录项缓存(dentry结构体) 文件系统类型与文件模型研究(十一)文件系统调用打开/关闭文件 文件系统类型与文件模型研究(十二)文件系统调用创建/删除文件 文件系统类型与文件模型研究(十三)文件系统调用读/写文件实现 文件系统类型与文件模型研究(十四)文件回写技术原理/接口实现 文件系统类型与文件模型研究(十五)挂载文件系统系统调用mount处理流程 文件系统类型与文件模型研究(十六)挂载文件系统绑定挂载/挂载命名空间 文件系统类型与文件模型研究(十七)挂载文件系统挂载/注册rootfs文件系统 磁盘文件系统(一)Ext2文件系统 磁盘文件系统(二)Ext2物理结构 磁盘文件系统(三)Ext2数据结构分析 磁盘文件系统(四)Ext2文件系统操作 磁盘文件系统(五) Ext4_ 日志JBD2 磁盘文件系统(六)Ext4文件系统特性 磁盘文件系统(七)Ext4文件系统数据结构 磁盘文件系统(八)Ext4_日志JBD2 数据同步(一)内核定时器 数据同步(二)原子操作与屏障 数据同步(三)自旋锁机制 数据同步(四)自旋锁的实现与变体 数据同步(五)spin_ lock()/raw_ spin_ lock() 函数分析 数据同步(六)互斥锁 数据同步(一)mutex数据结构分析 数据同步(一)互斥锁的快速与慢速通道 数据同步(一)乐观自旋锁等待机制 数据同步(一)mutex_ un lock()函数分析 数据同步(一)读写锁与RCU 8网络堆栈 网络堆栈的设计遵循模拟协议本身的分层架构。回想一下互联网协议(IP)是传输协议(通常称为传输控制协议或TCP)下的核心网络层协议。TCP是上面的套接字层通过SCI调用。套接字层是网络子系统的标准API它为各种网络协议提供了一个用户接口。从原始帧访问到IP协议数据单元(PDU)再到TCP和用户数据报协议(UDP)套接字层提供了一种标准化的方式来管理连接并在各种端点之间移动数据。内核网络源代码可以在。/linux/net。 9设备驱动程序 Linux内核很多代码都在设备驱动里可以运行特定的硬件设备。Linux源码树提供了一个驱动子目录该子目录又进一步划分为各种支持设备如蓝牙、I2C、串口等。设备驱动程序的代码可以在。/Linux/驱动程序。 10依赖体系结构的代码 虽然Linux很大程度上独立于运行的架构但为了正常运行和实现更高的效率一些元素必须考虑架构。的。/linux/arch子目录定义了内核源代码中依赖于架构的部分其中包含了各种特定于架构的子目录(它们共同构成了BSP)。对于典型的桌面系统使用x86目录。每个架构子目录包含许多其他子目录每个子目录专注于内核的特定方面如引导、内核、内存管理等。这些依赖于架构的代码可以在。/linux/arch。 如果Linux内核的可移植性和效率不够好的话Linux还提供了一些其他的特性不能归入以上几类。作为生产操作系统和开源软件Linux是测试新协议及其增强的良好平台。Linux支持大量的网络协议包括典型的TCP/IP以及高速网络的扩展(大于1千兆以太网[GbE]和10 GbE)。Linux还可以支持诸如流控制传输协议(SCTP)之类的协议它提供了比TCP更高级的特性(它是传输层协议的继承者)。Linux也是一个动态内核支持动态添加或删除软件组件。它们被称为可动态加载的内核模块可以由用户根据需要在引导时插入(目前一个特定的设备需要这个模块)也可以在任何时候插入。Linux的最新增强是可以作为其他操作系统使用的操作系统(称为hypervisor)。最近内核被修改并被称为基于内核的虚拟机(KVM)。这一修改为用户空间启用了一个新的接口允许其他操作系统在启用KVM的内核上运行。除了运行Linux的其他实例Microsoft Windows也可以虚拟化。唯一的限制是底层处理器必须支持新的虚拟化指令。 11依赖体系结构的代码 虽然Linux很大程度上独立于运行的架构但为了正常运行和实现更高的效率一些元素必须考虑架构。的。/linux/arch子目录定义了内核源代码中依赖于架构的部分其中包含了各种特定于架构的子目录(它们共同构成了BSP)。对于典型的桌面系统使用x86目录。每个架构子目录包含许多其他子目录每个子目录专注于内核的特定方面如引导、内核、内存管理等。这些依赖于架构的代码可以在。/linux/arch。 如果Linux内核的可移植性和效率不够好的话Linux还提供了一些其他的特性不能归入以上几类。作为生产操作系统和开源软件Linux是测试新协议及其增强的良好平台。Linux支持大量的网络协议包括典型的TCP/IP以及高速网络的扩展(大于1千兆以太网[GbE]和10 GbE)。Linux还可以支持诸如流控制传输协议(SCTP)之类的协议它提供了比TCP更高级的特性(它是传输层协议的继承者)。Linux也是一个动态内核支持动态添加或删除软件组件。它们被称为可动态加载的内核模块可以由用户根据需要在引导时插入(目前一个特定的设备需要这个模块)也可以在任何时候插入。Linux的最新增强是可以作为其他操作系统使用的操作系统(称为hypervisor)。最近内核被修改并被称为基于内核的虚拟机(KVM)。这一修改为用户空间启用了一个新的接口允许其他操作系统在启用KVM的内核上运行。除了运行Linux的其他实例Microsoft Windows也可以虚拟化。唯一的限制是底层处理器必须支持新的虚拟化指令。 12面试题/经验 【 强烈推荐阅读】从事十年嵌入式转内核开发(23K到45K),给兄弟们的一些建议 谈谈Linux内核的学习路线具体要怎么学 2022年嵌入式开发想进互联网大厂你技术过硬吗 嵌入式Linux内核学习经验总结一篇让你掌握方法 盘点Linux内核(驱动开发嵌入式内核人群)必问的面试题 2022春招大厂-嵌入式开发经典笔试面试题目大整理 面试题一 1、什么是Linux? 2、Unix和Linux有什么区别 3、什么是 Linux 内核 4、Linux的基本组件是什么 5、Linux 的体系结构 6、BASH和DOS之间的基本区别是什么 7、Linux 开机启动过程 8、Linux系统缺省的运行级别 9、Linux 使用的进程间通信方式 10、Linux 有哪些系统日志文件 11、Linux系统安装多个桌面环境有帮助吗? 12、什么是交换空间 13、什么是root帐户? 14、什么是LILO 15、什么是BASH 16、什么是CLI 17、什么是GUI 18、开源的优势是什么 19、简单 Linux 文件系统 20、Linux 的目录结构是怎样的 21、什么是 inode 22、什么是硬链接和软链接 23、RAID 是什么? 24、一台 Linux 系统初始化环境后需要做一些什么安全工作 25、什么叫 CC 攻击什么叫 DDOS 攻击 26、什么是网站数据库注入 27、Shell 脚本是什么 28、可以在 Shell 脚本中使用哪些类型的变量 29、Shell 脚本中 if 语法如何嵌套? 30、Shell 脚本中 case 语句的语法? 31、Shell 脚本中 for 循环语法 32、Shell 脚本中 while 循环语法 33、如何使脚本可执行? 34、在 Shell 脚本如何定义函数呢 35、判断一文件是不是字符设备文件如果是将其拷贝到 /dev 目录下 36、添加一个新组为 class1 然后添加属于这个组的 30 个用户用户名的形式为 stdxx 其中 xx 从 01 到 30 37、写一个 sed 命令修改 /tmp/input.txt 文件的内容 38、用户进程间通信主要哪几种方式? 39、通过伙伴系统申请内核内存的函数有哪些? 40、Linux 虚拟文件系统的关键数据结构有哪些?(至少写出四个) 41、对文件或设备的操作函数保存在那个数据结构中? 42、Linux 中的文件包括哪些? 43、创建进程的系统调用有那些? 44、调用 schedule()进行进程切换的方式有几种? 45、Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的? 46、进程调度的核心数据结构是哪个? 47、如何加载、卸载一个模块? 48、模块和应用程序分别运行在什么空间? 49、Linux 中的浮点运算由应用程序实现还是内核实现? 50、模块程序能否使用可链接的库函数? 51、TLB 中缓存的是什么内容? 52、Linux 中有哪几种设备? 53、字符设备驱动程序的关键数据结构是哪个? 54、设备驱动程序包括哪些功能函数? 55、如何唯一标识一个设备? 56、Linux 通过什么方式实现系统调用? 57、Linux 软中断和工作队列的作用是什么? 58、Linux开机启动过程 59、Linux系统缺省的运行级别 60、Linux系统是由那些部分组成 61、硬链接和软链接有什么区别 62、如何规划一台Linux主机步骤是怎样 63、查看系统当前进程连接数 64、如何在/usr目录下找出大小超过10MB的文件? 65、添加一条到192.168.3.0/24的路由网关为192.168.1.254 66、如何在/var目录下找出90天之内未被访问过的文件? 67、如何在/home目录下找出120天之前被修改过的文件? 68、在整个目录树下查找文件“core”如发现则无需提示直接删除它们。 69、有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下该用户应如何做? 70、每周一下午三点将/tmp/logs目录下面的后缀为*.log的所有文件rsync同步到备份服务器192.168.1.100中同样的目录下面crontab配置项该如何写 71、找到/tmp/目录下面的所有名称以s1.jpg结尾的普通文件如果其修改日期在一天内则将其打包到/tmp/back.tar.gz文件中 72、配置mysql服务器的时候配置了auto_increment_increment3请问这里的3意味着什么 73、详细说明keepalived的故障切换工作原理 74、什么是系统调用 75、进程和线程的区别 76、进程有哪几种状态? 77、进程间的通信方式 78、线程间的同步的方式 79、进程的调度算法 80、操作系统的内存管理主要是做什么 81、常见的几种内存管理机制 82、快表和多级页表 83、分页机制和分段机制的共同点和区别 84、逻辑(虚拟)地址和物理地址 85、CPU 寻址了解吗?为什么需要虚拟地址空间? 86、什么是虚拟内存(Virtual Memory)? 87、局部性原理 88、虚拟存储器 89、虚拟内存的技术实现 90、页面置换算法 面试题二 1、绝对路径用什么符号表示当前目录、上层目录用什么表示主目录用什么表示? 切换目录用什么命令 2、怎么查看当前进程怎么执行退出怎么查看当前路径 3、怎么清屏怎么退出当前命令怎么执行睡眠怎么查看当前用户 id查看指定帮助用什么命令 4、Ls 命令执行什么功能 可以带哪些参数有什么区别 5、建立软链接(快捷方式)以及硬链接的命令。 6、目录创建用什么命令创建文件用什么命令复制文件用什么命令 7、使用哪一个命令可以查看自己文件系统的磁盘空间配额呢 8、查看文件内容有哪些命令可以使用 9、随意写文件命令怎么向屏幕输出带空格的字符串比如”hello world”? 10、终端是哪个文件夹下的哪个文件黑洞文件是哪个文件夹下的哪个命令 11、移动文件用哪个命令改名用哪个命令 12、复制文件用哪个命令如果需要连同文件夹一块复制呢如果需要有提示功能呢 13、删除文件用哪个命令如果需要连目录及目录下文件一块删除呢删除空文件夹用什么命令 14、Linux 下命令有哪几种可使用的通配符分别代表什么含义? 15、用什么命令对一个文件的内容进行统计(行号、单词数、字节数) 16、Grep 命令有什么用 如何忽略大小写 如何查找不含该串的行? 17、Linux 中进程有哪几种状态在 ps 显示出来的信息中分别用什么符号表示的 18、怎么使一个命令在后台运行? 19、利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进程的信息 20、哪个命令专门用来查看后台任务? 21、把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令? 22、终止进程用什么命令? 带什么参数? 23、怎么查看系统支持的所有信号 24、搜索文件用什么命令? 格式是怎么样的? 25、查看当前谁在使用该主机用什么命令? 查找自己所在的终端信息用什么命令? 26、使用什么命令查看用过的命令列表? 27、使用什么命令查看磁盘使用空间 空闲空间呢? 28、使用什么命令查看网络是否连通? 29、使用什么命令查看 ip 地址及接口信息 30、查看各类环境变量用什么命令? 31、通过什么命令指定命令提示符? 32、查找命令的可执行文件是去哪查找的? 怎么对其进行设置及添加? 33、通过什么命令查找执行命令? 34、怎么对命令进行取别名 35、du 和 df 的定义以及区别 36、awk 详解 37、当你需要给命令绑定一个宏或者按键的时候应该怎么做呢 38、如果一个linux新手想要知道当前系统支持的所有命令的列表他需要怎么做 39、如果你的助手想要打印出当前的目录栈你会建议他怎么做 40、你的系统目前有许多正在运行的任务在不重启机器的条件下有什么方法可以把所有正在运行的进程移除呢 41、bash shell 中的hash 命令有什么作用 42、哪一个bash内置命令能够进行数学运算 43、怎样一页一页地查看一个大文件的内容呢 44、数据字典属于哪一个用户的 45、怎样查看一个linux命令的概要与用法假设你在/bin目录中偶然看到一个你从没见过的的命令怎样才能知道它的作用和用法呢 13内核书籍 《深入了解Linux内核》《Linux就该这么学》《Linux内核完全注释V3.0书签版》《Linux命令行大全 - 绍茨 (william E.shotts)》《Linux命令速查手册》《Linux性能优化大师》《Linux环境编程从应用到内核》《Linux集群和自动化运维 余洪春》《Linux驱动程序开发实例(第2版)》《Linux高级程序设计(第3版)》《构建高可用Linux服务器(第4版)》 书籍免费领取地址https://docs.qq.com/doc/DTkZRWXRFcWx1bWVx 4、怎么阅读源码 Linux庞大而复杂其核心包括进程管理、内存管理、网络、文件系统和arch-entity2 驱动这些都依赖于内核提供的各种库和接口、各种内核机制以及arch下可能对应的汇编。没有这些基础要流畅的阅读代码就有点困难了。 Linux的代码量很大而且是在gcc的基础上开发的针对各种场景做了大量的优化。所以第二件事就是要熟悉gcc下C的扩展用法要有一个好的代码查看工具。推荐源洞察。 内核运行在特定的硬件平台上所以对于底层涉及的部分有不同的arch实现包括大量的汇编操作所以以arm为例。如果想研究内核相应部分的代码就必须多读熟悉arm的官方文档。 而且代码和资料基本都是英文的一般词汇和专业词汇都有所以英语基础好很重要。这个没有捷径就是多读书当然也有积累的方法后面会讲到。 每个模块都有很多细节。可能你年轻的时候记性好吧。你开发一个模块的时候都读了好几遍了所有的细节都不是很清楚。可能3、5年后再看就很难记住了所以需要想办法形成积累。否则可能会忘记看辛苦又低效。 内核编程有自己的风格和一些公认的规则尤其是命名、排版、代码文件分类等。有些可能不符合规则也可能很好但如果大家都这样用那自然就是所谓的艺术了熟悉这些艺术有助于举一反三的学习其他模块的代码。 内核的代码量与日俱增模块也越来越复杂所以可维护性对于内核来说也是非常重要的。所以在如何更有利于以后的维护上做了很多努力。内核是操作系统的核心部分其稳定性和性能自然非常重要。它用了很多技巧来应对。研究这些积累起来有利于进一步理解其原理。 边看代码边写注释和笔记。看了多少模块就注释多少模块慢慢形成一个积累。这样的方式有什么好处呢 记录你看代码过程中不熟悉或者不清晰的地方或者你看明白了但是怕忘记的地方这样等你下次再来看你能很快回忆起来且不断刺激你的记忆神经能让你记忆的更牢固。记录内核中用法的好处或者有疑问的地方这样你再次来看的话可能会有新的体会能在之前看代码的基础上形成一个不断积累的过程理解会更加深刻。当你将内核代码模块看的越来越多时你会越看越轻松当然是不是也会惊讶一下。轻松的是这个模块我看过用法我熟悉惊讶的是这个我虽然看过好多次理解竟然有点不对。反反复复不断进行下去。 查看代码的工具 我这里推荐是source insight, 我一直用的3.5版本的。这里主要提几点技巧。 3.5里面默认只支持一部分文件格式那么比如makefile是不支持的arm汇编是不支持的shell好像也是不支持的所以这一部分的支持要自己添加。 内核里面用了大量的宏以及一些gnu c的扩展关键字这些需要在source insight里面添加 上这样你同步代码就不会有一些不认识的情况当然除了source insight本身的一些bug外。 source insight自建快捷键以及扩展功能这些网上也有很多好的可以参考能提高效率。 5、Linux内核体系 4.1Linux内核体系结构简析简析 顶部是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间下面是内核空间Linux内核就位于这里。GNU C库(glibc)也在这里。它为内核提供了一个系统调用接口也为用户空间应用程序和内核之间的转换提供了一个机制。这非常重要因为内核和用户空间应用程序使用不同的受保护地址空间。每个用户空间进程使用自己的虚拟地址空间而内核占用一个单独的地址空间。 Linux内核可以进一步分为3层。最上面是系统调用接口实现一些基本功能比如读写。系统调用接口下面是内核代码可以更准确的定义为独立于架构的内核代码。这些代码对于Linux支持的所有处理器架构都是通用的。在这些代码下面是依赖于架构的代码它构成了通常称为BSP(板支持包)的部分。这些代码用作给定架构的处理器和平台特定代码。 Linux内核实现了许多重要的架构属性。在更高或更低的层次上内核被分成几个子系统。Linux也可以看做一个整体因为它会把这些基础服务都集成到内核中。这与微内核的架构不同微内核提供一些基本的服务比如通信、I/O、内存、进程管理等。更具体的服务被插入到微内核层中。每个内核都有自己的优点但这里不讨论这个。 随着时间的推移Linux内核在内存和CPU使用上的效率很高非常稳定。但对于Linux来说最有意思的是在这个规模和复杂度的前提下它仍然具有良好的可移植性。经过编译后Linux可以在大量具有不同架构约束和要求的处理器和平台上运行。例如Linux可以运行在带有内存管理单元(MMU)的处理器上也可以运行在不提供MMU的处理器上。linux内核的UClinux移植提供了对非MMU的支持。 Linux内核的主要组件有系统调用接口、进程管理、内存管理、虚拟文件系统、网络堆栈、设备驱动程序、硬件架构的相关代码。 4.2内核模块 如果Windows已经安装了所有可用的驱动程序而您只需要打开所需的驱动程序怎么办?这本质上就是内核模块为Linux所做的。内核模块也称为可加载内核模块(LKM)对于保持内核在不消耗所有可用内存的情况下与所有硬件一起工作是必不可少的。 模块通常向基本内核添加诸如设备、文件系统和系统调用等功能。lkm的文件扩展名是。ko它通常存储在/lib/modules目录中。由于模块的特性您可以通过在启动时使用menuconfig命令将模块设置为加载或不加载或者通过编辑/boot/config文件或者使用modprobe命令动态加载和卸载模块来轻松定制内核。第三方和封闭源代码模块在某些发行版中可用如Ubuntu默认情况下可能不会安装因为这些模块的源代码不可用。该软件的开发商(即nVidia、ATI等。)不提供源代码而是自己搭建模块编译所需。用于分发的ko文件。虽然这些模块像啤酒一样是免费的但它们不像语音一样是免费的所以它们没有包含在一些发行版中因为维护者认为它通过提供非自由软件来“污染”内核。内核并不神奇但对于任何一台正常的电脑都是必不可少的。Linux内核不同于OS X和Windows因为它包含内核级驱动程序并使许多东西“开箱即用”。我希望你能更多地了解软件和硬件是如何配合工作的以及启动电脑所需的文件。 5学习Linux内核 学习linux内核不像学习语言。一个月或者三月就能掌握C或者java。学习linux内核需要循序渐进掌握正确的linux内核学习路线非常重要。本文将分享一些学习linux内核的建议。 很多同学接触Linux不多对Linux平台的开发更是一无所知。而现在的趋势越来越表明作为一 个优秀的软件开发人员或计算机IT行业从业人员掌握Linux是一种很重要的谋生资源与手段。下来我将会结合自己的几年的个人开发经验及对 Linux更是类UNIX系统及开源软件文化谈谈Linux的学习方法与学习中应该注意的一些事。 就如同刚才说的很多同学以前可能连Linux是什么都不知道对UNIX更是一无所知。所以我们从最基础的讲起对于Linux及UNIX的历史我们不做多谈直接进入入门的学习。 Linux入门是很简单的问题是你是否有耐心是否爱折腾是否不排斥重装一类的大修。没折腾可以说是学不好Linux的鸟哥说过要真正了解Linux的分区机制对LVM使用相当熟练没有20次以上的Linux装机经验是积累不起来的所以一定不要怕折腾。 由于大家之前都使用Windows所以我也尽可能照顾这些“菜鸟”。我的推荐如果你第一次接触Linux那么首先在虚拟机中尝试它。虚拟机我推荐Virtual Box我并不主张使用VM原因是VM是闭源的并且是收费的我不希望推动盗版。当然如果你的Money足够多可以尝试VM但我要说的是即使是VM不一定就一定好。付费的软件不一定好。首先Virtual Box很小巧Windows平台下安装包在80MB左右而VM动辄600MB虽然功能强大但资源消耗也多何况你的需求Virtual Box完全能够满足。所以还是自己选。如何使用虚拟机是你的事这个我不教你因为很简单不会的话Google或Baidu都可以英文好的可以直接看官方文档。 现在介绍Linux发行版的知识。正如你所见Linux发行版并非LinuxLinux仅是指操作系统的内核作为科班出生的你不要让我解释我也没时间。 我推荐的发行版如下 UBUNTU适合纯菜鸟追求稳定的官方支持对系统稳定性要求较弱喜欢最新应用相对来说不太喜欢折腾的开发者。Debian相对UBUNTU难很多的发行版突出特点是稳定与容易使用的包管理系统缺点是企业支持不足为社区开发驱动。Arch追逐时尚的开发者的首选优点是包更新相当快无缝升级一次安装基本可以一直运作下去没有如UBUNTU那样的版本概念说的专业点叫滚动升级保持你的系统一定是最新的。缺点显然易见不稳定。同时安装配置相对Debian再麻烦点。Gentoo相对Arch再难点考验使用者的综合水平从系统安装到微调内核编译都亲历亲为是高手及黑客显示自己技术手段按需配置符合自己要求的系统的首选。 Slackware与Gentoo类似 CentOS社区维护的RedHat的复刻版本完全使用RedHat的源码重新编译生成与RedHat的兼容性在理论上来说是最好的。如果你专注于Linux服务器如网络管理架站那么CentOS是你的选择。 LFS终极黑客显摆工具完全从源代码安装编译系统。安装前你得到的只有一份文档你要做的就是照文档你的说明一步步一条条命令一个个软件包的去构建你的Linux完全由你自己控制想要什么就是什么。如果你做出了LFS证明你的Linux功底已经相当不错如果你能拿LFS文档活学活用再将Linux从源代码开始移植到嵌入式系统我敢说中国的企业你可以混的很好。 你得挑一个适合你的系统然后在虚拟机安装它开始使用它。如果你想快速学会Linux我有一个建议就是忘记图形界面不要想图形界面能不能提供你问题的答案而是满世界的去找去问如何用命令行解决你的问题。在这个过程中你最好能将Linux的命令掌握的不错起码常用的命令得知道同时建立了自己的知识库里面是你积累的各项知识。 再下个阶段你需要学习的是Linux平台的C/C开发同时还有Bash脚本编程如果你对Java兴趣很深还有Java。同样建议你抛弃掉图形界面的IDE从VIM开始为什么是VIM而不是Emacs我无意挑起编辑器大战但我觉得VIM适合初学者适合手比较笨脑袋比较慢的开发者。Emacs的键位太多太复杂我很畏惧。然后是GCCMakeEclipseJavaC或者。虽然将C列在了Eclipse中但我并不推荐用IDE开发C因为这不是Linux的文化容易让你忽略一些你应该注意的问题。IDE让你变懒懒得跟猪一样。如果你对程序调试测试工作很感兴趣GDB也得学的很好如果不是GDB也是必修课。这是开发的第一步注意我并没有提过一句Linux系统API的内容这个阶段也不要关心这个。你要做的就是积累经验在Linux平台的开发经验。我推荐的书如下C语言程序设计谭浩强的也可以。C语言白皮书当然更好。C推荐C Primer PlusJava我不喜欢就不推荐了。工具方面推荐VIM的官方手册GCC中文文档GDB中文文档GNU开源软件开发指导电子书汇编语言程序设计让你对库链接内嵌汇编编译器优化选项有初步了解不必深度。 如果你这个阶段过不了就不必往下做了这是底线最基础的基础否则离开不要霍霍Linux开发。不专业的Linux开发者作出的程序是与Linux文化或UNIX文化相背的程序是走不远的不可能像BashVIM这些神品一样。所以做不好干脆离开。 接下来进入Linux系统编程不二选择APUEUNIX环境高级编程一遍一遍的看看10遍都嫌少如果你可以在大学将这本书翻烂里面的内容都实践过有作品你口头表达能力够强你可以在面试时说服所有的考官。可能有点夸张但APUE绝对是圣经一般的读物即使是Windows程序员也从其中汲取养分Google创始人的案头书籍扎尔伯克的床头读物。 这本书看完后你会对Linux系统编程有相当的了解知道Linux与Windows平台间开发的差异在哪它们的优缺点在哪我的总结如下做Windows平台开发很苦微软的系统API总在扩容想使用最新潮最高效的功能最适合当前流行系统的功能你必须时刻学习。Linux不是Linux系统的核心API就100来个记忆力好完全可以背下来。而且经久不变为什么不变因为要同UNIX兼容符合POSIX标准。所以Linux平台的开发大多是专注于底层的或服务器编程。这是其优点当然图形是Linux的软肋但我站在一个开发者的角度我无所谓因为命令行我也可以适应如果有更好的图形界面我就当作恩赐吧。另外Windows闭源系统做了什么你更本不知道永远被微软牵着鼻子跑想想如果微软说Win8不支持QQ那腾讯不得哭死。而Linux完全开源你不喜欢可以自己改只要你技术够。另外Windows虽然使用的人多但使用场合单一专注与桌面。而Linux在各个方面都有发展尤其在云计算服务器软件嵌入式领域企业级应用上有广大前景而且兼容性一流由于支持POSIX可以无缝的运行在UNIX系统之上不管是苹果的Mac还是IBM的AS400系列都是完全支持的。另外Linux的开发环境支持也绝对是一流的不管是C/CJavaBashPythonPHPJavascript。。。。。。就连C#也支持。而微软除Visual Stdio套件以外都不怎么友好不是吗 如果你看完APUE的感触有很多希望验证你的某些想法或经验推荐UNIX程序设计艺术世界顶级黑客将同你分享他的看法。现在是时候做分流了。 大体上我分为四个方向网络图形嵌入式设备驱动。 如果选择网络再细分我对其他的不是他熟悉只说服务器软件编写及高性能的并发程序编写吧。相对来说这是网络编程中技术含量最高的也是底层的。需要很多的经验看很多的书做很多的项目。 我的看法是以下面的顺序来看书 APUE再深读 – 尤其是进程线程IPC套接字多核程序设计 - Pthread一定得吃透了你很NBUNIX网络编程 – 卷一卷二TCP/IP网络详解 – 卷一 再看上面两本书时就该看了TCP/IP 网络详解 – 卷二 我觉得看到卷二就差不多了当然卷三看了更好努力争取看了Lighttpd源代码 - 这个服务器也很有名了Nginx源代码 – 相较于ApacheNginx的源码较少如果能看个大致很NB。看源代码主要是要学习里面的套接字编程及并发控制想想都激动。如果你有这些本事可以试着往暴雪投简历为他们写服务器后台想一想全球的魔兽都运行在你的服务器软件上。Linux内核TCP/IP协议栈 – 深入了解TCP/IP的实现 如果你还喜欢驱动程序设计可以看看更底层的协议如链路层的写什么路由器网卡网络设备的驱动及嵌入式系统软件应该也不成问题了。当然一般的网络公司就算百度级别的也该毫不犹豫的雇用你。只是看后面这些书需要时间与经验所以35岁以前办到吧跳槽到给你未来的地方 图形方向我觉得图形方向也是很有前途的以下几个方面 Opengl的工业及游戏开发国外较成熟。 影视动画特效如皮克斯也是国外较成熟。 GPU计算技术可以应用在浏览器网页渲染上GPU计算资源利用上由于开源的原因有很多的文档程序可以参考。如果能进火狐开发或google做浏览器开发应该会很好 。 嵌入式方向嵌入式方向没说的Linux很重要 掌握多个架构不仅X86的ARM的单片机什么的也必须得懂。硬件不懂我预见你会死在半路上我也想走嵌入式方向但我觉得就学校教授嵌入式的方法我连学电子的那帮学生都竞争不过。奉劝大家一定得懂硬件再去做如果走到嵌入式应用开发只能祝你好运不要碰上像NokiaHp这样的公司否则你会很惨的。 驱动程序设计软件开发周期是很长的硬件不同很快。每个月诞生那么多的新硬件如何让他们在Linux上工作起来这是你的工作。由于Linux的兼容性很好如果不是太低层的驱动基本C语言就可以搞定系统架构的影响不大因为有系统支持你可能做些许更改就可以在ARM上使用PC的硬件了所以做硬件驱动开发不像嵌入式对硬件知识的要求很高。可以从事的方向也很多如家电啊特别是如索尼日立希捷富士康这样的厂子很稀缺的。 内核是IT开发人员的加分项一个计算机系统是一个硬件和软件的共生体它们互相依赖不可分割。计算机的硬件含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它自身是不能工作的。完成这个控制工作的软件就称为操作系统在Linux的术语中被称为“内核”也可以称为“核心”。Linux内核的主要模块或组件分以下几个部分存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信以及系统的初始化引导、系统调用等。 Linux 内核实现了很多重要的体系结构属性。在或高或低的层次上内核被划分为多个子系统。Linux 也可以看作是一个整体因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同后者会提供一些基本的服务例如通信、I/O、内存和进程管理更具体的服务都是插入到微内核层中的。 随着时间的流逝Linux 内核在内存和 CPU 使用方面具有较高的效率并且非常稳定。但是对于 Linux 来说最为有趣的是在这种大小和复杂性的前提下依然具有良好的可移植性。Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个例子是 Linux 可以在一个具有内存管理单元MMU的处理器上运行也可以在那些不提供MMU的处理器上运行。Linux 内核的uClinux移植提供了对非 MMU 的支持。 在IT行业 如嵌入式开发驱动开发Android开发c开发Java开发如果接触到底层方面 那么 懂得内核会使自己的开发工作产生对应的效益。 懂得内核会让自己更加了解底层的原理与开发源码。 内核是面试的加分项 内核是走向专家的必经之路 不管你是不是做内核开发内核技术是储备技能开阔视野扩展技术面的不二选择。 要转向内核开发嵌入式开发人员需要掌握以下知识 \1. C语言编程C语言是内核开发的主要编程语言需要熟练掌握其语法和编程技巧。\2. 操作系统原理需要了解操作系统的基本原理包括进程管理、内存管理、文件系统等。\3. Linux内核需要深入了解Linux内核的架构、模块、驱动程序等。\4. 设备驱动开发需要掌握设备驱动的开发流程和技术包括字符设备、块设备、网络设备等。\5. 调试技能需要掌握调试技能包括使用调试工具、分析内核崩溃等。\6. 硬件知识需要了解硬件的基本原理和操作包括处理器、内存、外设等。\7. 开源社区需要了解开源社区的文化和开发流程以便更好地参与内核开发。总之转向内核开发需要广泛的知识储备和实践经验需要不断学习和探索。 个人建议参加零声教育的培训学习效率会高很多有目的性的参加培训缩短周期快速成型才是时代所需。Linux内核源码学习。 内核学习路线推荐喜欢研究内核想在内核这块深入学习的可以参考。 操作系统原理/汇编专题 1操作系统原理 进程管理进程状态与切换、进程互斥与同步、处理器调度、进程死锁 内存管理 存储结构、分区存储管理、段式管理、页式管理、虚拟存储 设备管理磁盘高速缓存、RAID磁盘阵列、I/O缓冲 文件管理文件组织结构、堆文件原理、存储空间管理、文件目录管理 2汇编语言精讲 x86/x86_64体系结构x86/x86_64体系结构、汇编语言基础、数据传送、算法运算、寻址、过程与条件处理、浮点处理与指令编码 ARM体系结构ARM核微处理器、ARM常用指令系统、ARM汇编程序及调试、异常中断/复位处理程序/SWI异常中断、RealView MDK安装与配置、ARM汇编与C混合实现、数据加载与存储指令实现 进程管理专题 1进程基础 Linux内核源码组织结构 进程原理及进程状态 生命周期及系统调用写时复制原理、进程内存布局、进程堆栈管理、系统调用实现 task_struct数据结构分析 2 进程调度 调度策略SCHED_DEADLINE、SCHED_FIFO、SCHED_RR、SCHED_NORMAL 进程优先级调度优先级、静态优先级、正常优先级、实时优先级 调度类分析stop_sched_class、dl_sched_class、rt_sched_class、cfs_sched_class、idle_shced_class SMP调度迁移线程/隔离处理器、限期调度类的处理器负载均衡、实时调度类的处理器负载均衡、公平调度类的处理器负载均衡 内存管理专题 1内存原理 SMP/NUMA模型组织 物理内存组织结构与模型 页表/页表缓存页表框架目录结构、TLB表项格式与管理、地址空间标识符ASID、虚拟机标识符VMID 处理器缓存缓存结构与策略、SMP缓存一致性、高速缓存与TLB控制 内存映射数据结构分析、创建内存映射、删除内存映射、系统调用实现 2虚拟内存 块分配器内存分配器原理、页分配与页释放、SLAB块分配器、SLOB块分配器、SLUB块分配器、系统调度接口 页模块大全标准巨型页、透明巨型页、LRU算法与反向映射、页直接与异步回收原理、回收不活动页执行方案、页交换原理、回收slab缓存原理、页错误异常处理、内存碎片整理、发起内存回收、交换区数据结构/创建/激活、内存耗尽技术原理、缺页异常校正方法、KASAN检测工具、处理交换缺页异常、内存屏障与内核互斥技术。 3内存系统调用 kmalloc/vmalloc 内存池原理与实现操作 内存优化参数与实现 页缓存的实现 块缓存的实现 4 perf性能分析工具 perf原理机制与安装配置 perf采集数据命令29种工具应用 perf采集数据至火焰图分析 网络协议栈专题 1 网络基础架构 ICMP协议 用户数据报协议(UDP) 传输控制协议(TCP) 流控制传输协议(SCTP) 数据报拥塞控制协议(DCCP) IPv4策略路由选择 无线子系统模块802.11 MAC帧结构分析、扫描/身份验证/关联、mac80211接收与传输实现、高吞吐量(802.11n)、网状网络(802.11s) IPv4重定向消息/FIB表 2网络协议栈 ARP地址解析协议 用户数据报协议(UDP) 传输控制协议(TCP) 高级路由选择组播路由选择、策略路由选择、多路径路由选择 接收/发送IPv4数据包 接收/发送IPv6数据包 InfiniBand栈的架构RDMA远程直接内存访问 结构、InfiniBand组件与编址、InfiniBand功能与数据包 协议栈注册/接收包/发送包流程方案 3系统API调用 POSIX网络API调用 epoll内核原理与实现 网络系统参数配置 设备驱动专题 1设备驱动子系统 I/O机制原理 资源分配与管理 字符设备子系统 块设备子系统 网络接口卡驱动 2 Linux设备模型 深度剖析LDMLDM数据结构、设备驱动程、kobject结构、kobj_type、内核对象集合 设备模型和sysfssysfs文件及属性、允许轮询sysfs属性文件、 3字符设备操作 主设备与次设备 打开设备文件 分配与注册字符设备 写文件操作实现open/release方法、read/write方法、llseek/poll方、填充file_operations结构 插入和删除模块 4 块设备操作 块设备表示与数据结构 BIO数据结构 ioctl系统调用 总线模块 ISA总线、PCI/PCI-E总线、USB总线、VESA总线、I2C总线 5 网卡设备驱动 数据结构套接字缓冲区结构、网络接口结构 缓冲区管理与并发控制 ISA网络驱动程序 ATM异步传输模式 网络吞吐量 内核组件专题 1时间管理 通用时间子系统 高分辨率定时器 动态时钟数据结构 定时器系统调用 2页与块缓存 页缓存结构操作与实现 块缓存结构与实现 地址空间数据结构与页树 3数据同步 数制同步机制 inode同步与拥塞 强制回写与完全同步 4内核活动 中断类型/硬件IRQ irq_desc数据结构 处理IRQ与软中断 创建/注册/执行tasklet 等待队列与完成量 文件系统专题 1虚拟文件系统VFS 文件系统类型与文件模型研究 数据结构超级块super_block、挂载描述符mount结构体、索引结点inode结构体、目录项dentry结构体 文件系统调用 打开/关闭文件、 创建/删除文件、 读/写文件、 文件回写技术原理/接口实现 挂载文件系统系统调用mount处理流程、绑定挂载/挂载命名空间、挂载/注册rootfs文件系统无 持久文件系统proc文件系统proc数据结构、装载proc/管理proc数据项、数据读取与写入实现、 简单文件系统顺序文件、调度文件系统、伪文件系统 2磁盘文件系统 Ext2文件系统物理结构与数据结构、创建文件系统、操作文件系统 Ext3文件系统 Ext4文件系统 日志JBD2 3用户空间文件系统 Fuse架构设计与原理 Fuse内核五大队列 Fuse用户空间流程与实现方案 内核项目实战专题 1-Linux内核编译与系统更换实现方法 2-进程间通信/管理权限/优先级实现方案 3-NIC网卡驱动实现 4-mmap系统调用/映射用户内存实现 5-Linux内存参数系统实现 6-调试与性能优化(debugfs/printk/ftrace) 7-Slab块分配器内存分配实现机制 8-tasklet/内线线程与定时器实现 9-Linux内核proc文件系统实现 10-Linux内核防火墙iptables实现 6、Linux内核视频讲解 1、深度剖析Linux内核SMP负载均衡-----视频讲解地址2、深度剖析Linux内核ARM64处理器架构-----视频讲解地址3、深度剖析Linux内核ARM异常处理-----视频讲解地址4、深度剖析Linux内核CFS调度器-----视频讲解地址5、深度剖析Linux内核量化负载计算能力-----视频讲解地址6、深度剖析Linux内核进程及生命周期-----视频讲解地址7、深度剖析Linux内核CPU域初始化实现-----视频讲解地址8、深度剖析Linux内核蓝牙子系统架构-----视频讲解地址9、深度剖析Linux内核USB系统架构-----视频讲解地址10、深度剖析Linux内核IO体系结构与访问设备-----视频讲解地址11、深度剖析Linux内核进程管理机制-----视频讲解地址12、深度剖析Linux内核MLFQ经典调度算法-----视频讲解地址13、深入剖析Linux内核伙伴系统实现及API调度实战-----视频讲解地址14、深入剖析Linux内核哈希表与运行队列-----视频讲解地址15、深入剖析Linux内核NUMA调度器-----视频讲解地址16、深度剖析Linux内核perf性能优化分析-----视频讲解地址 7、内核项目实战 //www.bilibili.com/video/BV1yX4y1Z7Db/) 9、深度剖析Linux内核USB系统架构-----视频讲解地址10、深度剖析Linux内核IO体系结构与访问设备-----视频讲解地址11、深度剖析Linux内核进程管理机制-----视频讲解地址12、深度剖析Linux内核MLFQ经典调度算法-----视频讲解地址13、深入剖析Linux内核伙伴系统实现及API调度实战-----视频讲解地址14、深入剖析Linux内核哈希表与运行队列-----视频讲解地址15、深入剖析Linux内核NUMA调度器-----视频讲解地址16、深度剖析Linux内核perf性能优化分析-----视频讲解地址 7、内核项目实战 [外链图片转存中…(img-9tFSPfan-1686314048832)] [外链图片转存中…(img-qWN2Cuyp-1686314048835)] 以上就是Linux内核学习路线关于学习Linux内核的建议希望对小伙伴们有帮助。
http://www.yingshimen.cn/news/60864/

相关文章:

  • 建造网站需要什么买微信公众号多少钱一个
  • 深圳北网站建设广西住房建设厅网站首页
  • 网站制作费用贵不贵外国人的做视频网站吗
  • 深圳做二维码网站建设手机网站建设 豆丁
  • 合肥电商网站开发正一品网站建设
  • 注册安全工程师建设工程网站长腿蜘蛛wordpress
  • 广西住房和城乡建设厅官方网站做网站销售电销好做吗
  • 网站收录低的原因苏州代运营公司排名
  • 我下载的免费网站模版源代码是加密的怎么做网站dns加速
  • 建站之星怎么安装新乡网页设计公司
  • 德清县新巿镇城市建设网站做网站找投资人
  • 建设一元云购类网站网上注册公司价格
  • 备份整个网站godaddy服务器做网站
  • 医疗网站建设需要什么资质apache wordpress配置
  • 企业网站定制开发公司内部管理软件叫什么
  • 首先确定网站建设的功能定位南通企业做网站
  • 重庆专业网站建设公司哪家好兼职工厂网站建设
  • 谷歌搜索引擎大全杭州seo优化公司
  • html5做个网站多少钱google chrome谷歌浏览器
  • 运城做网站设计的公司印度网站建设多少钱
  • 广州住建网站专业机票网站建设
  • 海南企业建站想做网络推广的公司
  • 做婚宴的网站有哪些宁波seo哪家好
  • 企业网站如何做网警备案wordpress做视频网站
  • 网站域名不合法山西建设工程协会网站
  • 网站主机 分为深圳网站建设公司哪家好
  • 网页制作网站制作软件开发培训机构价格
  • 微信打不开网站企业网站建设定制开发
  • 问答系统网站建设适合手机端的wordpress
  • 简洁企业网站模板忻州网站建设费用