2.0 KiB
2.0 KiB
alarmtest.c 测试
test0: 单次调用测试
函数: test0()
目的: 测试内核是否至少调用了一次 alarm 处理程序。
描述:
-
设置 alarm 每 2 个时钟周期触发一次。
-
在一个长循环中检查
count是否被处理程序修改。 -
如果
count > 0,测试通过;否则失败。
test1: 多次调用与寄存器恢复测试
函数: test1()
目的: 测试内核是否多次调用 alarm 处理程序,并确保处理程序返回后程序继续从中断点执行,且寄存器值未被破坏。
描述:
-
设置 alarm 每 2 个时钟周期触发一次。
-
在循环中调用
foo()函数,同时检查count是否达到 10。 -
验证
foo()的调用次数是否与循环计数一致。 -
如果
count < 10或寄存器值不一致,测试失败;否则通过。
test2: 防止重入调用
函数: test2()
目的: 测试内核是否防止 alarm 处理程序的重入调用。
描述:
-
设置 alarm 每 2 个时钟周期触发一次,处理程序为
slow_handler()。 -
在子进程中运行一个长循环,检查
count是否被修改。 -
如果
count > 1,测试失败;否则通过。
test3: 寄存器 a0 的完整性测试
函数: test3()
目的: 测试从 sys_sigreturn() 返回时,寄存器 a0 的值是否被修改。
描述:
-
设置 alarm 每 1 个时钟周期触发一次,处理程序为
dummy_handler()。 -
在触发 alarm 后检查寄存器
a0的值是否保持为初始值0xac。 -
如果
a0被修改,测试失败;否则通过。
处理程序说明
periodic()
-
增加
count值并打印 "alarm!"。 -
调用
sigreturn()返回。
slow_handler()
-
增加
count值并打印 "alarm!"。 -
如果
count > 1,测试失败并退出。 -
运行一个长循环以模拟慢速处理程序。
-
调用
sigreturn()返回。
dummy_handler()
- 立即卸载自身并调用
sigreturn()返回。