我正在尝试用C语言学习磁盘调度算法(SCAN和C-SCAN)的实现,有人可以参考C语言中这些实现的良好来源或建议我在C上编程吗?< / p>
进一步: - *目的是编写一个程序来优化磁盘访问,以便将磁盘上不连续的页面集读取到内存中,为此,我正在执行磁盘调度。
*我想在页面的读取序列上指示磁盘
答案 0 :(得分:2)
应该在磁盘本身的域中考虑以有效的方式调度磁盘请求的逻辑!优化从磁盘扇区读取数据的顺序不太可能是便携式或高效的。
但是,如果您的文件为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);
}
}