我正在尝试学习磁盘调度算法(SCAN和C-SCAN)在C语言中的实现,有没有人可以参考一下这些算法在C语言中实现的很好的源码,或者建议我在C语言上编程?
进一步深入:-*目标是编写一个程序来优化磁盘访问,以便将磁盘上的一组不连续的页面读到内存中,为此,我正在执行磁盘调度。
*我想指示磁盘上的页的读取顺序
发布于 2011-07-27 04:25:11
以有效的方式调度磁盘请求的逻辑应该在磁盘本身的域中考虑!优化从磁盘扇区读取数据的顺序不太可能是可移植或高效的。
但是,如果您有一个npages * PAGE_SIZE文件,那么您可以在为自己的内部磁盘读取提供服务时,尝试提高应用程序的性能。给定:
#define PAGE_SIZE ...
#define MAX_PAGE_READ ...
struct read_req {
unsigned int page;
/* any other book-keeping required */
};您可以在内部按page对请求进行排序(也可以选择合并邻居页面):
/* qsort-comparer for two read_req structs */
int cmp_req(const void *a, const void *b)
{
unsigned int pageA = ((struct read_req*)a)->page,
pageB = ((struct read_req*)b)->page;
return pageA == pageB ? 0 : pageA > pageB ? 1 : -1;
}
int service_reads(struct read_req *reqs, size_t nreqs)
{
size_t ii = 0;
/* sort read requests in ascending order */
qsort(reqs, nreqs, sizeof(reqs[0]), cmp_req);
while (ii < nreqs)
{
unsigned int start = reqs[ii].page;
size_t size = 1;
while (++ii < nreqs)
{
if (reqs[ii].page != (start + size)) break;
/* expand our read to include the next page,
* and break if we've read too much
*/
if (++size == MAX_PAGE_READ) break;
}
your_read_logic(start, size);
}
}https://stackoverflow.com/questions/6822871
复制相似问题