面向数据空间的进程调度策略
1 引言
随着嵌入式设备(如 PDA、打印机、游戏机和手机等)的广泛使用,要实现高性能,就需要一个能充分利用底层硬件组件的优化操作系统(OS)。传统通用操作系统中的进程调度器与嵌入式操作系统中的调度器存在显著差异,嵌入式操作系统的调度器可以根据应用的特定需求进行定制。
以往的研究分别孤立地利用编译器支持(如针对数组密集型应用的循环和数据转换)和操作系统优化(如不同的进程调度策略),而在嵌入式系统中,考虑操作系统与编译器之间的交互可以取得更好的效果。例如,编译器可以在编译时静态分析应用代码,并将有用信息传递给操作系统调度器,以提高运行时性能。本文主要关注有助于提高数据缓存性能的信息,通过编译器分析和重构进程代码,以最大化缓存中的数据重用。
这种策略在嵌入式环境中是可行的,因为在许多情况下,将嵌入式应用编写为一组协作进程(而不是一个大的整体代码)可以提高模块化和可维护性,这些轻量级进程通常被称为线程。在数组密集型嵌入式应用中,同一应用中不同进程之间存在大量的数据共享。
2 方法
2.1 整体思路
进程调度算法采用面向数据空间的方法,基本思想是重构进程代码以提高数据缓存局部性。首先假设每个进程操作同一个数组,将该数组逻辑划分为数据块(data tiles),然后按顺序访问这些数据块,并为每个进程确定在每个时间片内要执行的一组迭代(iteration tile)。这样可以明显增加缓存中的数据重用,因为在相应的时间片内,进程操作的是同一组数组元素。
2.2 数据块形状和大小的选择
数据块的大小决定了每个时间片内的工作量。选择较小的块大小会导致频繁的进程