Linux内核体系结构
内核的职能:
- 与系统的硬件设备进行交互并对其加以控制
- 为应用程序提供运行环境
Linux的内存管理问题
- 地址空间
- 物理内存
- 内存映射
- 分页机制
- 交换机制
Linux的进程管理
- 进程
- 任务
- 内核线程
- 调度(一个在所有时候大部分正确的调度器要比一个在大多数时候完全正确的调度器更为重要,即缓慢运行的进程要优于精心选择调度策略或错误而停止运行的进程,中断利用了某个随机进程的资源)
- 上下文切换
进程间的通信
Linux支持许多进程间通信机制。信号(signal)和管道(pipe)是两种基本机制,Linux也支持系统V的IPC机制
- 进程可以忽略所生成的大多数信号,但有两个例外SIGSTOP和SIGKILL。sigstop信号导致进程终止执行,而sigkill信号导致进程退出并被忽略掉。
- 管道是未结构化的先进先出(first-in first-out,FIFO)单向数据流。已读取的数据会从管道中删除。
系统V的IPC机制
- 消息队列
- 信号量
- 共享内存
Linux对称多处理模型(SMP)
多处理系统由大量通过总线或网络进行通信的处理器进行通信的处理器组成。多处理系统分为两种类型:松耦合系统和紧耦合系统。
1.由独立工作的处理器组成。每个处理器都拥有自己的总线、内存和I/O子系统,并通过网络介质与其他处理器通信。松耦合系统可以是同构的也可以是异构的。
2.由多个共享内存、总线和设备(有时还包括cache)的处理器组成。有对称系统和非对称系统。对称系统所有任务被均匀地分散到全部处理器中。
3.多处理模型的问题
- 同步与数据串行化
- 锁、锁粒度和锁开销
- cache一致性
- 处理器亲和度
文件系统
Linux最重要的特性之一是可支持多种文件系统,可以很好地与其他操作系统共存。虚拟文件系统(Virtual File System,VFS)允许Linux支持多种常常会有很大差别的文件系统,每种文件系统都向虚拟文件系统提供一个公共的软件接口。通过Linux虚拟文件系统层可以透明地同时挂载许多不同类型的文件系统。
- ext2fs(高度的稳健性)
- LVM与RAID*廉价磁盘冗余阵列(Redundant Array of Inexpensive Disk)是一种磁盘卷管理机制*
- 磁盘卷组
- 设备相关文件(保存在/dev文件夹中、块设备和字符设备)
- devfs(devfs是驻留在root文件系统之上的特殊块设备节点和字符设备节点的一种替代系统)
许多性能问题都是由于内存不足而引起操作系统的交换。
提高I/O性能的技术
纯硬件相关的解决方案(例如使用每分钟具有更高转速的磁盘驱动器,从而提供了耕地的I/O延迟、更大的磁盘cache容量或I/O控制器cache容量),改进写操作的数据传输率
Linux虚存的性能问题
- 内存与地址空间
- VM区域
- 内核地址空间你
- 内核模块空间
- 内核映像空间
- 高端内存支持
- 分页与交换机制
- 替换策略
- 页面替换与内存平衡
- Linux页表
尽管Linux是一种虚存系统,但由于使用了多种地址类型,因此进程能够以一种公平的方式访问内存并运行至结束。Linux内核用于管理内存的数据结构很复杂,并且不同的内核功能需要不同的地址类型。Linux以及多数其他UNIX操作系统 都使用分页机制而不使用交换机制。各种系统对物理页面的管理方法不同,Linux体系结构中采用了三级页表的方法。这些页表可以实现虚址与物理地址的相互转换。
和大多数UNI操作系统一样,Linux也提供了一个通用的内存slab分配器,用来完成任意空间的内存分配。所有slab分配器的基本目标都是高效地分配和释放内存对象加以缓存。
VM的可调参数(所有这些参数都可以通过proc/sys/vm文件系统接口进行调优)
- dirty_background_ratio
- dirty_expire_centisecs
- dirty_ratio
- dirty_weiteback_sentisecs
- lower_zone_protection
- min_free_kbytes
- nr_pdflush_thread
- overcommit_memory
- overcommit_ratio
- page-cluster
- swappiness