- 论坛徽章:
- 0
|
Project 2
虚拟存储(Virtual Memory)
练习目的:
学习Linux如何实现虚拟存储。与体系结构无关的通用存储模型是所有Linux虚拟存储实现的基础,但是任何特定的实现都依赖于特定的硬件平台。本练习集中于i386的实现。介绍解释了存储管理程序的设计。而且还将学习代码细节,修改虚拟存储代码以检测系统缺页错误的发生频率。此外本实验牵涉到系统调用的相关知识,包括学习如何产生一个系统调用以及怎样通过往内核中增加一个新函数从而在内核空间中实现对用户空间的读/写。
任务要求:
1. 设计并实现一个新的内核函数pedagogictime(),该函数通过使用一个引用参数的调用返回当前的系统时间。如果flag参数是TRUE,那么内核函数就应该把当前的系统时间打印在stdout上。
函数应该具有如下原型:
int pedagogictime(int flag,struct timeval *curent_time);
新函数基本上和gettimeofday()类似,当然忽略时区参数,并有一个标志来控制把信息打印到控制台。该函数如果执行成功,就返回TRUE;否则就返回FALSE。
2. 编写一个用户空间程序来测试pedagogictime(),该程序给新系统调用函数创建一个stub。
3. 修改存储管理软件以便可以判断特定进程或者整个系统产生的缺页情况。需要定义一个新的缺页系统调用,它应该达到以下目标:
设置缺页频率参数。例如,应该指定在计算机缺页平均值时将考虑的引用流窗口的大小。
报告当前缺页率,这样就可以编写一个用户程序使用这些数据来创建一个性能监测程序。
4. 编写一个用户空间程序,它周期性的调用缺页系统调用来检测当前的缺页率。然后根据时间绘制缺页图。最后,阅读有关vmstat命令的内容来了解如何设计报告程序。 |
|