Linux操作系统由系统的启动、进程调度、虚拟内存管理器、文件系统、设备驱动程序等多个组成
设备驱动程序中使用的函数也用在内核上,并且影响着内核,因此离开内核就无法制作设备驱动程序。
省略
内核是有效管理系统资源的资源管理者
-
处理器管理 通过管理处理器,使得处理器满足操作系统的处理要求,使其有效分担和执行各个进程中必要的处理器功能
-
进程管理 进程是程序执行的最小单位,内核通过进程调度器负责进程的创建、撤销,并管理进程和外部环境的交互
-
内存管理 系统的内存是最核心的部分,。内存管理是决定系统性能的重要要素,提供虚拟地址空间的方式,使各个进程在独立的空间上执行任务。虚拟内存以管理为基础,结合存储器可提供大于实际物理内存的内存空间
-
文件系统管理 Linux内核利用虚拟文件系统(VFS),支持当前的大部分文件系统类型
-
设备的控制 应用程序必须通过硬件才能与用户交互,处PCU和内存外,应用程序必须得到硬件的支持才能够完成各种操作。设备驱动程序负责与硬件相关的各种操作,而设备驱动程序则是内核必须实现的功能之一
-
网络管理
2.2.3Linux内核的特点
特点归纳如下:
- 单一的(Monolithic)内核
- 非抢占型和抢占型(2.6内核)
- 虚拟内存系统
- 支持无MMU 2.6内核支持没有MMU(存储器管理单元)的系统
- 虚拟文件系统(VFS) linux中可以使用ext2甚至日志文件系统jfs的多种文件系统,也可以处理在windows中运行的NTFS文件系统和DOS文件系统
- 利用模块扩展内核
- 内核线程
- 支持多线程
- 支持多处理器
- 强大的网络功能
- GPL许可
2.2.4 内核源代码结构
省略
2.3设备驱动程序
2.3.1 向内核请求资源处理的方法
应用程序向内核发出资源处理请求的方法大致分为两大类。第一是系统调用方式,第二是利用文件输出输入方式使用设备驱动程序的方法
1.系统调用方式
所谓系统调用方式,指制定系统控制所需的调用规则后,利用软件中断服务功能,使内核执行应用程序发出的处理请求
2.文件形态的设备驱动程序
以文件输入输出函数控制硬件。向表示硬件的设备文件指定应用程序的输入输出,从而调用内核内部链接设备文件的设备驱动程序服务程序,处理完请求再把控制流交还给应用程序
2.3.2模块和设备文件
1.模块
模块——在内核被启动后运行的状态下即动态加载或清除设备驱动程序
只有模块方式才能支持连接在PCI、USB、PCMCIA上的设备PNP功能。只有带MMU的CPU才能支持模块方式,并且内核的版本要一致。
2.设备文件
普通文件的目的在于保存数据,而设备文件的目的在于提供系统或硬件的信息。此类设备文件上保存的信息包括3种类型,分别为设备类型信息和主设备号和次设备号。
应用程序以open()函数打开设备文件,内核在相应的设备文件上得到主设备号,并寻找相应设备号所处理的设备驱动程序。也有不存在设备文件的设备驱动程序,包括网络设备驱动程序。
2.3.3 设备驱动程序的类型
设备驱动程序处理各个硬件的方式与硬件的类型有关。
Linux中使用的设备驱动程序大体上包括字符结构、块结构和网络结构:
- 字符 控制长短不一致字符序列的设备驱动程序,应用程序直接呼叫的、没有缓存的设备驱动程序
- 块 通过一定大小的缓存处理数据的设备,由内核内部的文件系统进行管理,没有内部缓存的设备驱动程序
- 网络 与网络层连接的设备驱动程序
1.字符设备驱动程序
应用程序中使用open()、close()、read()、write()等文件处理函数,并且以普通文件方式处理设备文件,从而控制硬件。常见的文件结构为流(stream),与字符设备驱动程序连接的设备文件也是流。即利用文件节点指定设备文件的特定处理位置,并且可以读取设备的处理位置
2.块设备驱动程序
除了特殊情况(分区),应用程序中不直接使用块设备驱动程序。块设备驱动程序是支持文件系统的结构,以文件系统实现与应用策划给你写的连接
3.网络涉笔驱动程序
略