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

上海网站优化上网站建设规划书3000字

上海网站优化上,网站建设规划书3000字,江苏建设厅网站首页,云匠网接单参考#xff1a;深入分析LINUX内核源码 深入分析Linux内核源码 (kerneltravel.net) Linux 是一个庞大、高效而复杂的操作系统#xff0c;虽然它的开发起始于 Linus Torvalds 一个人#xff0c;但随着时间的推移#xff0c;越来越多的人加入了 Linux 的开发和对它的不断完善… 参考深入分析LINUX内核源码 深入分析Linux内核源码 (kerneltravel.net) Linux 是一个庞大、高效而复杂的操作系统虽然它的开发起始于 Linus Torvalds 一个人但随着时间的推移越来越多的人加入了 Linux 的开发和对它的不断完善。如何从整体上把握 Linux 内核的体系结构对于 Linux 的开发者和分析者都至关重要。 1.5.1 Linux 内核在整个操作系统中的位置 Linux 的内核不是孤立的必须把它放在整个系统中去研究如图 1.1 所示显示了 Linux 内核在整个操作系统的位置。 由图 1.1 可以看出Linux 操作系统由 4 个部分组成。 1用户进程 用户应用程序是运行在 Linux 操作系统最高层的一个庞大的软件集合。当一个用户程序在操作系统之上运行时它成为操作系统中的一个进程。 2系统调用接口 在应用程序中可通过系统调用来调用操作系统内核中特定的过程以实现特定的服务。 例如在程序中安排一条创建进程的系统调用则操作系统内核便会为之创建一个新进程。 系统调用本身也是由若干条指令构成的过程。但它与一般的过程不同主要区别是系统调用是运行在内核态或叫系统态而一般过程是运行在用户态。在 Linux 中系统调用是内核代码的一部分。 3Linux 内核 这是本书要讨论的重点。内核是操作系统的灵魂它负责管理磁盘上的文件、内存负责启动并运行程序负责从网络上接收和发送数据包等。简言之内核实际是抽象的资源操作到具体硬件操作细节之间的接口。 4硬件 这个子系统包括了 Linux 安装时需要的所有可能的物理设备。例如CPU、 内存、硬盘、 网络硬件等。 上面的这种划分把整个 Linux 操作系统分为 4 个层次。把用户进程也纳入操作系统的范围内是因为用户进程的运行和操作系统密切相关而系统调用接口可以说是操作系统内核的 扩充硬件则是操作系统内核赖以生存的物质条件。这 4 个层次的依赖关系表现为上层依 赖下层。 Linux内核的作用 从程序员的角度来讲操作系统的内核提供了一个与计算机硬件等价的扩展或虚拟的计算平台。它抽象了许多硬件细节程序可以以某种统一的方式进行数据处理而程序员则可 以避开许多硬件细节。从另一个角度讲普通用户则把操作系统看成是一个资源管理者在 它的帮助下用户可以以某种易于理解的方式组织自己的数据完成自己的工作并和其他人 共享资源。 Linux 以统一的方式支持多任务而这种方式对用户进程是透明的每一个进程运行起来就好像只有它一个进程在计算机上运行一样独占内存和其他的硬件资源而实际上内核在并发地运行几个进程并且能够让几个进程公平合理地使用硬件资源也能使各进程之间互不干扰安全地运行。 Linux 内核由 5 个主要的子系统组成如图 1.2 所示。 1 进程调度SCHED 控制着进程对 CPU 的访问。当需要选择下一个进程运行时由调度程序选择最值得运行的进程。可运行进程实际是仅等待 CPU 资源的进程如果某个进程在等待其他资源则该进程是不可运行进程。Linux 使用了比较简单的基于优先级的进程调度算法选择新的进程。 2 内存管理MM 允许多个进程安全地共享主内存区域。Linux 的内存管理支持虚拟内存即在计算机中运行的程序其代码、数据和堆栈的总量可以超过实际内存的大小操作系统只将当前使用的程序块保留在内存中其余的程序块则保留在磁盘上。必要时操作系统负责在磁盘和内存之间交换程序块。 内存管理从逻辑上可以分为硬件无关的部分和硬件相关的部分。硬件无关的部分提供了进程的映射和虚拟内存的对换硬件相关的部分为内存管理硬件提供了虚拟接口。 3 虚拟文件系统Virtul File SystemVFS 隐藏了各种不同硬件的具体细节为所有设备提供了统一的接口VFS 还支持多达数十种不同的文件系统这也是 Linux 较有特色的一部分。 虚拟文件系统可分为逻辑文件系统和设备驱动程序。逻辑文件系统指 Linux 所支持的文件系统如 ext2fat 等设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。 4 网络接口NET 提供了对各种网络标准协议的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序两部分。网络协议部分负责实现每一种可能的网络传输协议网络设备驱动程序负责与硬件设备进行通信每一种可能的硬件设备都有相应的设备驱动程序。 5 进程间通信IPC 支持进程间各种通信机制。从图 1.2 所示可以看出处于中心位置的是进程调度所有其他的子系统都依赖于它因为每个子系统都需要挂起或恢复进程。一般情况下当一个进程等待硬件操作完成时它被挂起当操作真正完成时进程被恢复执行。例如当一个进程通过网络发送一条消息时网络接口需要挂起发送进程直到硬件成功地完成消息的发送当消息被发送出去以后网络接口给进程返回一个代码表示操作的成功或失败。其他子系统内存管理虚拟文件系统及进程间通信以相似的理由依赖于进程调度。 各个子系统之间的依赖关系如下。 • 进程调度与内存管理之间的关系这两个子系统互相依赖。在多道程序环境下程序要运行必须为之创建进程而创建进程的第一件事就是要将程序和数据装入内存。 • 进程间通信与内存管理的关系进程间通信子系统要依赖内存管理支持共享内存通信机制这种机制允许两个进程除了拥有自己的私有内存还可存取共同的内存区域。 • 虚拟文件系统与网络接口之间的关系虚拟文件系统利用网络接口支持网络文件系统 NFS也利用内存管理支持 RAMDISK 设备。 • 内存管理与虚拟文件系统之间的关系内存管理利用虚拟文件系统支持交换交换进程swapd定期地由调度程序调度这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时内存管理向文件系统发出请求同时挂起当前正在运行的进程。 除了如图 1.2 所示的依赖关系以外内核中的所有子系统还要依赖一些共同的资源但在图中并没有显示出来。这些资源包括所有子系统都用到的过程例如分配和释放内存空间的过程打印警告或错误信息的过程还有系统的调试例程等。 Linux 内核源代码 为了深入地了解 Linux 的实现机制还必须阅读 Linux 的内核源代码下面是对有关源代码的介绍。 多版本的内核源代码 对不同的内核版本系统调用一般是相同的。新版本也许可以增加一个新的系统调用 但旧的系统调用将依然不变这对于保持向后兼容是非常必要的一个新的内核版本不能打破常规的过程。在大多数情况下设备文件将仍然相同而另一方面版本之间的内部接口有所变化。 Linux 内核源代码有一个简单的数字系统任何偶数内核如 2.0.30是一个稳定的版本而奇数内核如 2.1.42是正在发展中的内核。本书是基于稳定的 2.4.16 源代码的。 发展中的内核总是有最新的特点支持最新的设备尽管它们还不稳定也许不是你所想要的但它们是发展最新而又稳定的内核的基础。 目前较新而又稳定的内核版本是 2.2.x 和 2.4.x因为版本之间稍有差别因此如 果你想让一个新驱动程序模块既支持 2.2.x也支持 2.4.x就需要根据内核版本对模块进行条件编译。 对内核源代码的修改是以补丁文件的形式发布的。patch 实用程序用来对内核源文件进行一系列的修订例如如果你有 2.4.9 内核源代码而想移到 2.4.16你可以获得 2.4.16 的补丁文件应用 patch 来修订 2.4.9 源文件。例如 $ cd /usr/src/linux $ patch -p1 patch-2.4.16 继续往下看  Linux 内核源代码的结构 Linux 内核源代码位于/usr/src/linux 目录下其结构分布如图 1.3 所示 补充ubuntu中linux源码放在哪个路径 在Ubuntu中Linux源码的存放路径通常与内核的版本和安装方式有关。以下是一些常见的存放路径 /usr/src这是Ubuntu系统默认的源码保存路径。但需要注意的是使用ls命令查看该目录时里面可能只有几个header文件夹并没有源码。源码需要通过特定的步骤下载和安装。 /usr/src/linux-headers-$(uname -r)这个目录下存放的是与当前运行的Linux内核版本相对应的头文件。这些头文件对于编译与内核版本匹配的模块是必要的。 /usr/src/linux-source-$(uname -r)如果通过包管理器如apt安装了特定版本的Linux源码它通常会被解压到这个目录下。例如如果你安装了5.4.0版本的内核源码它会存放在/usr/src/linux-source-5.4.0目录下。 自定义路径如果你是从源代码手动编译安装的软件可执行文件通常都安装在/usr/local/bin目录下除非配置时指定了其他位置。同样源码也可以解压到自定义的路径下。 要查看当前运行的Linux内核版本可以使用uname -r命令。然后根据内核版本去查找对应的源码路径。如果系统中没有预装源码可以使用包管理器来下载和安装对应的内核源码包。 此外如果你想获取最新的内核源码或者特定版本的源码还可以使用源码管理工具如git来克隆Linux内核源码仓库。 每一个目录或子目录可以看作一个模块其目录之间的连线表示“子目录或子模块”的关系。下面是对每一个目录的简单描述。 include/ 目录包含了建立内核代码时所需的大部分包含文件这个模块利用其他模块重建内核。 init/ 子目录包含了内核的初始化代码这是内核开始工作的起点。 arch/ 子目录包含了所有硬件结构特定的内核代码如图 1.3所示arch/子目录下有 i386 和 alpha 模块等。 drivers/ 目录包含了内核中所有的设备驱动程序如块设备scsi 设备驱动程序等。 fs/ 目录包含了所有文件系统的代码如ext2vfat 模块的代码等。 net/ 目录包含了内核的连网代码。 mm/ 目录包含了所有的内存管理代码。 ipc/ 目录包含了进程间通信的代码。 kernel/ 目录包含了主内核代码。 图 1.3 显示了 8 个目录即 init、kernel、mm、ipc、drivers、fs、arch 及 net 的包含文件都在“include/”目录下。 在 Linux 内核中包含了 drivers、fs、arch 及 net 模块 这就使得 Linux 内核既不是一个层次式结构也不是一个微内核结构而是一个“整体式” 结构。因为系统调用可以直接调用内核层因此该结构使得整个系统具有较高的性能其缺点是内核修改起来比较困难除非遵循严格的规则和编码标准。 在图 1.3 中所示的模块结构代表了一种工作分配单元。利用这种结构我们期望 Linus Torvalds能维护和增强内核的核心服务即 init/、kernel/、mm/及 ipc/其他的模块 drivers、 fs、arch 及 net 也可以作为工作单元例如可以分配一组人对块文件系统进行维护和进一 步地开发而另一组人对 scsi 文件系统进行完善。图 1.3 所示类似于 Linux 的自愿者开发队伍一起工作来增强和扩展整个系统的框架。 从何处开始阅读源代码 像 Linux 内核这样庞大而复杂的程序看起来确实让人望而生畏它像一个很大的球没有起点和终点。在读源代码的过程中你会遇到这样的情况当读到内核的某一部分时又会涉及到其他更多的文件当返回到原来的地方想继续往下读时又忘了原来读的内容。在 Internet 上很多人为此付出了很大的努力制作出了源代码导航器这为源代码阅读提供了很好的条件下载站点为http://lxr.linux.no/source。下面给出阅读源代码的一些线索。 1系统的启动和初始化 在基于 Intel 的系统上当 loadlin.exe 或 LILO 把内核装入到内存并把控制权传递给内核时内核开始启动。关于这一部分看 arch/i386/kernel/head.S head.S 进行特定结构的设置然后跳转到 init/main.c 的 main例程。 2内存管理 内存管理的代码主要在/mm但特定结构的代码在 arch/*/mm。缺页中断处理的代码在mm/memory.c 而内存映射和页高速缓存器的代码在 mm/filemap.c。缓冲器高速缓存是在 mm/buffer.c 中实现而交换高速缓存是在 mm/swap_state.c 和 mm/swapfile.c 中实现。 3内核 内核中特定结构的代码在 arch/*/kernel调度程序在 kernel/sched.cfork 的代码 在 kernel/fork.ctask_struct 数据结构在 include/linux/sched.h 中。 4PCI PCI 伪驱动程序在 drivers/pci/pci.c 其定义在 include/linux/pci.h。每一种结构都有一些特定的 PCI BIOS 代码Intel 的在 arch/alpha/kernel/bios32.c。 5进程间通信 所 有 System V IPC 对 象 权 限 都 包 含 在 ipc_perm 数 据 结 构 中 这 可 以 在 include/linux/ipc.h 中找到 System V 消息是在 ipc/msg.c 中实现, 共享内存在 ipc/shm.c 中信号量在 ipc/sem.c 中管道在 ipc/pipe.c 中实现。 6中断处理 内核的中断处理代码是几乎所有的微处理器所特有的。中断处理代码在 arch/i386/kernel/irq.c 中其定义在 include/asm-i386/irq.h 中。 7设备驱动程序 Linux 内核源代码的很多行是设备驱动程序。Linux 设备驱动程序的所有源代码都保存 在/driver根据类型可进一步划分为 /block 块设备驱动程序如 ide在 ide.c。如果想看包含文件系统的所有设备是如何被初始 化的应当看 drivers/block/genhd.c 中的 device_setupdevice_setup不仅初始 化了硬盘当一个网络安装 nfs 文件系统时它也初始化网络。块设备包含了基于 IDE 和 SCSI 的设备。 /char 这是看字符设备如 tty串口及鼠标等驱动程序的地方。 /cdrom Linux 的所有 CDROM 代码都在这里如在这儿可以找到 Soundblaster CDROM 的驱动程序。 注意 ide CD 的驱动程序是 ide-cd.c放在 drivers/blockSCSI CD 的驱动程序是 scsi.c 放在 drivers/scsi。 /pci 这是 PCI 伪驱动程序的源代码在这里可以看到 PCI 子系统是如何被映射和初始化的。 /scsi 在这里可以找到所有的 SCSI 代码及 Linux 所支持的 scsi 设备的所有设备驱动程序。 /net 在这里可以找到网络设备驱动程序如 DECChip 21040 PCI 以太网驱动程序在 tulip.c 中。 /sound 这是所有声卡驱动程序的所在地。 关于pci参考 linux驱动之PCI和PCIE-提问篇_linux pcie驱动-CSDN博客 PCIPeripheral Component Interconnect是一种广泛采用的总线标准提供了许多优于其它总线标准的新特性。 在Linux系统中PCI设备通常通过PCI桥与CPU相连这些桥可以是Host/PCI桥、PCI-to-PCI桥或PCI/ISA桥。每种桥都有特定的功能例如Host/PCI桥连接CPU与PCI根总线而PCI-to-PCI桥则用于连接主总线和次总线。 在Linux中PCI设备驱动程序负责枚举和配置PCI设备。这包括从Host/PCI桥开始探测和扫描所有连接在PCI总线上的设备并递归地处理任何发现的PCI-PCI桥以枚举所有PCI设备。 什么是scsi SCSI是小型计算机系统接口。 SCSI全称为Small Computer System Interface是一种用于计算机和智能设备之间如硬盘、软驱、光驱、打印机、扫描仪等系统级接口的独立处理器标准。它定义了与大量设备主要是与存储相关的设备通信所需的接口和协议。在Linux中SCSI子系统用于与这些设备进行通信。Linux提供了一种分层架构来处理SCSI设备将高层的驱动器比如磁盘驱动器或光驱连接到物理接口如Fibre Channel或Serial Attached SCSISAS。 SCSI命令集是在Command Descriptor Block (CDB)中定义的包含了用来定义要执行的特定操作的操作代码以及大量特定于操作的参数。SCSI命令支持读写数据以及很多非数据命令如test-unit-ready设备是否已就绪、inquiry检索有关目标设备的基本信息、read-capacity检索目标设备的存储容量等。 8文件系统 EXT2 文 件 系 统 的 源 代 码 全 部 在 fs/ext2/ 目 录 下 而 其 数 据 结 构 的 定 义 在 include/linux/ ext2_fs.h,ext2_fs_i.h 及 ext2_fs_sb.h 中。虚拟文件系统的数据结构在 include/linux/fs.h 中描述而代码是在 fs/*中。缓冲区高速缓存与更新内核的守护进程的 实现是在 fs/buffer.c 中。 9网络 网络代码保存在/net 中大部分的 include 文件在 include/net 下BSD 套节口代码在 net/socket.c 中IP 第 4 版本的套节口代码在 net/ipv4/af_inet.c。一般的协议支持代码 包括 sk_buff 处理例程在 net/core 下TCP/IP 联网代码在 net/ipv4 下网络设备驱动程序在/drivers/net 下。 10模块 内核模块的代码部分在内核中部分在模块包中前者全部在 kernel/modules.c 中 而 数 据 结 构 和 内 核 守 护 进 程 kerneld 的 信 息 分 别 在 include/linux/module.h 和 include/linux/kerneld.h 中。如果想看 ELF 目标文件的结构它位于 include/linux/elf.h 中。 Linux 内核源代码分析工具 凡是尝试做过内核分析的人都知道Linux 的内核组织结构虽然非常有条理但是它毕竟是众人合作的结果在阅读代码的时候要将各个部分结合起来确实是件非常困难的事情。因为在内核中的代码层次结构肯定分多个层次那么对一个函数的分析肯定会涉及到多个函数而对每一个函数都可能有多层的调用一层层下来直接在代码文件中查找肯定会让你失去耐心和兴趣的。最后很多人只能望洋兴叹或者只是找一本书来看看基本原理 却不敢去说自己真正看过内核源代码。任何一本原理书只能是你阅读源代码的导航器绝不能代替源代码的阅读。 俗话说“工欲善其事必先利其器”。面对 Linux 这样庞大的源代码必须有相应工具的支持才能使分析有效地进行下去。 Windows 平台下的源代码阅读工具Source Insight 为了方便地学习 Linux 源程序我们不妨回到我们熟悉的 Windows 环境下。但是在 Windows 平台上使用一些常见的集成开发环境效果也不是很理想比如难以将所有的文件加进去查找速度缓慢对于非 Windows 平台的函数不能彩色显示。在 Windows 平台下有一个强大的源代码编辑器它的卓越性能使得学习 Linux 内核源代码的难度大大降低这便 是 Source Insight 3.0 它 是 一 个 Windows 平 台 下 的 共 享 软 件 可 以 从 http://www.sourceinsight.com/上下载 30天试用版本。由于 Source Insight是一个 Windows 平台的应用软件所以首先要通过相应手段把 Linux 系统上的程序源代码移到 Windows 平台 下这一点可以通过在 linux 平台上将/usr/src 目录下的文件拷贝到 Windows 平台的分区上 或者从网上或光盘中直接拷贝文件到 Windows 平台的分区上。 这个软件的安装非常简单双击安装文件名然后按提示进行即可。安装完成后就可启动该程序。这个软件使用起来也非常简单先选择 Project 菜单下的 new新建一个工程 输入工程名接着要求你把欲读的源代码加入可以加入整个目录后该软件就分析你所加的源代码。分析完后就可以进行阅读了。对于打开的阅读文件如果想看某一变量的定 义先把光标定位于该变量然后单击工具条上的相应选项该变量的定义就显示出来。对于函数的定义与实现也可以同样操作。
http://www.ho-use.cn/article/10820785.html

相关文章:

  • 做爰 网站贵阳城乡和住房建设厅网站
  • 菏泽网站建设服务wordpress调用媒体图片不同尺寸
  • 男做女爱网站做网站和自媒体哪个好
  • 用vs2010做免费网站模板下载地址网站移动端是什么问题吗
  • 金麦建站官网wordpress seo模板
  • 广西网站建设策划昭阳区住房和城乡建设管理局网站
  • 网站开发文档范例微网站建设包含哪些内容
  • 广元市建设银行网站c2c代表网站
  • 广州机械网站建设外包北京定制网站价格
  • 网站广告怎么放如何优化关键词排名到首页
  • 如何创建博客网站莱芜一中贴吧
  • 网站建设系统 开源商城版网站制作
  • 算卦网站开发网站开发飞沐
  • 无锡企业网站的建设电力公司在哪个网站做推广最好
  • 赣县城乡规划建设局网站wordpress菜单.html
  • wordpress全站模板外贸营销俱乐部
  • 怎么才能提高网站点击量 免费wordpress get_category_parents
  • 花都五屏网站建设php做网站多少钱
  • 网站手机端做app开发公司网站开发 建设
  • 昆明公司网站开发工作室怎么开
  • 网站制作网站建设单位东营网站建设服务电话
  • 个人网站建设论文绪论常州网站建设软件
  • 北京电商网站开发平台网站排名易下拉排名
  • 如何调整网站板块位置济南正规网站制作品牌
  • 推广网站哪家做的好福州网站制作培训
  • 人工智能的网站python 可以做网站吗
  • 搜索引擎中 哪些网站可以获得更好的排名海外服务器价格
  • 在线免费建网站网站地址栏
  • 软件公司做网站吗阿里企业邮箱登录
  • 知名网站定制报价七牛云 wordpress