标签: Linux - STEMHA's Blog

Linux内存管理

进程的用户空间划分

Linux-块设备驱动程序

概述

Linux块设备处理程序的组织是相当复杂的,在此不可能详细介绍内核块设备I/O子系统中包含的所有函数
我们主要说明下面几个问题:

  • Linux块设备I/O子系统的体系结构是什么?
  • 块设备I/O子系统的主要组件有哪些?有哪些作用?
  • 打开一个块设备文件时内核执行的步骤有哪些?
  • 内核如何对块设备和块设备的请求进行管理?->这部分在内核中称为块I/O层

Linux文件系统注册、安装与卸载

概述

当内核被编译时,就已经确定了可以支持哪些文件系统,这些文件系统在系统引导时,在 VFS 中进行注册。如果文件系统是作为内核可装载的模块,则在实际安装时进行注册,并在模块卸载时注销。

  • VFS的初始化函数用来向VFS注册,即填写文件注册表file_system_type数据结构。每一个文件系统类型在注册表中有一个登记项,记录该文件系统的类型名、文件系统特性、指向对应的VFS超级块读取函数的地址及已注册项的链指针等。
  • 函数register_filesystem()用于注册文件系统类型,函数unregister_filesystem()用于注销一个文件系统类型。

Linux-VFS中的数据结构

前言

VFS(虚拟文件系统)四大对象:struct super_block 超级块、struct inode 索引节点、struct dentry 目录项、struct file 文件对象
VFS采用的是面向对象的设计思想,使用一簇数据结构来代表通用文件对象。所以内核中的数据结构都使用C结构体实现。

  • 超级块super_block对象,代表一个具体的已安装文件系统。
  • 索引节点inode对象,代表一个具体文件。
  • 目录项dentry对象,代表一个目录项,是路径的一个组成部分。
  • 文件file对象,代表有进程打开的文件。

每个主要对象中都包含一个操作对象,这些操作对象描述了内核针对主要对象可以使用的方法:

  • super_operations对象:包含内核针对特定文件系统所能调用的方法。
  • inode_operations对象:包含内核对特定文件所能调用的方法。
  • dentry_operations对象:包含内核对特定目录所能调用的方法。
  • file_operations对象:包含进程针对已打开文件所能调用的方法。

操作对象作为一个指针结构体被实现,此结构体中包含指向操作其父对象的函数指针。对于其中许多方法来说,可以继承使用VFS提供的通用函数,如果通用函数提供的基本功能无法满足需要,就必须使用实际文件系统的独有方法填充这些函数指针,使其指向文件系统实例。

Linux-特殊文件系统

前言

网络和磁盘文件系统能够使用户处理存放在内核之外的信息。
特殊文件系统可以为系统程序员和管理员提供一种容易的方式来操作内核的数据结构并实现操作系统的特殊特征。

Linux-虚拟文件系统

linux设计思想

Linux作为一个最著名的自由软件,几乎处处体现了“自由”的思想,你可以编译适合自己系统要求的内核,或者轻松添加别人开发的新的模块。只要你有实力,你还可以自己写一个新的Linux 支持的文件系统。
Linux 不仅支持多种文件系统,而且还支持这些文件系统相互之间进行访问。Linux成功的关键因素之一是它具有与其他操作系统和谐共存的能力,你能够透明的安装具有其他操作系统文件格式的磁盘分区(比如Windows系统)。这一切都要归功于神奇的虚拟文件系统。

Linux模块(modules)

前言

Linux 是一个整体式的内核(Monolithic Kernel)结构,也就是说,整个内核是一个单独的、非常大的程序。

  • 从实现机制来说,我们又把它划分为5个子系统(前一篇文章有介绍),内核的各个子系统都提供了内部接口(函数和变量),这些函数和变量可供内核所有子系统调用和使用。

Linux 的整体式结构决定了要给内核增加新的成分也是非常困难,因此Linux 提供了一种全新的机制—可装入模块(Loadable Modules,以下简称模块)

  • 用户可以根据自己的需要,在不需要对内核进行重新编译的条件下,模块能被动态地插入到内核或从内核中移走。

模块的特点

  • 模块本身可以不被编译入内核映像,从而控制了内核的大小。
  • 模块一旦被加载,它就和内核中的其他部分完全一样。

我们需要知道什么?

什么是模块?为什么要使用模块?

Linux内核的组成

概述

Linux内核主要由进程调度(SCHED)内存管理(MM)虚拟文件系统(VFS)网络接口(NET)进程间通信(IPC)5个子系统组成。

Linux内核的编译及加载

编译内核需要做什么?

  1. 查找并且下载一份内核源代码
  2. 配置内核。
  3. 编译内核和模块。
  4. 配置启动文件。

Linux内核目录文件说明

前言

Linux内核也是一个抢占式多任务内核。这意味该内核可以暂停一些任务来保证任何应用都有机会来使用CPU。比如:

如果一个应用正在运行但是正在等待一些数据,内核会把这个应用暂停并允许其他的程序使用新释放的CPU资源,直到数据到来。
否则的话,系统就会浪费资源给那些正在等待数据或者其他程序执行的的任务。
内核将会强制程序去等待或者停止使用CPU。没有内核的允许,应用程序不能脱离暂停或者使用CPU。

Linux设计思想是“一切皆文件”:

设备作为文件显示在/dev文件夹下,如果一个用户想要访问在存储卡上的数据,他们能通过设备文件访问这些数据。

已编译的Linux内核:

在引导文件夹(/boot),用户会看到诸如“vmlinux”或者“vmlinuz”的文件。这两者都是已编译的Linux内核。
以“z”结尾的是已压缩的。“vm”代表虚拟内存。
SPARC处理器的系统上,用户可以看见一个zImage文件。部分用户可以发现一个bzImage文件,这是一个已压缩的Linux内核。
这些引导文件都是不能更改的,除非用户知道他们正在做什么。否则系统会变成无法引导,启动不了。

Linux内核是所有Linux系统的核心。如果有任何恶意代码控制或破害了内核的任何一部分,那么系统会严重受损,文件可能被删除或损坏,私人信息可能被盗等等。

注意事项: 绝不在内核源代码内移动文件,除非你知道你在做什么。否则,编译会由于丢失文件失败。

内核在操作系统目录下的路径一般为:/usr/src/

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×