进程管理测试(1)
来源:互联网 发布:下载电脑软件 编辑:程序博客网 时间:2024/06/06 20:23
有了之前的了解,可以对进程管理进行一个测试。在测试之前,还需要做一些准备工作。
首先,需要增加一个刷新调度因子的程序,如果没有这个程序,调度因子将一直为0。
void Proc_alarm(void){ int i; for( i = 1 ; i < PROC_MAX ; i++) { if( !proc_pool[i].proc_stat ) continue; if( proc_pool[i].proc_alarm ) proc_pool[i].proc_alarm--; proc_pool[i].proc_sched_factor += 5; }}
在每次调用这个程序,调度因子加5,这个函数主要在时钟中断处理程序中调用,所以之前的时钟处理程序也要进行修改。
void Clk_do_clock(void){ ticks++; Clk_msg(); Proc_alarm(); if( --proc_current->proc_cpu_time < 1 ) /* 进程时间消耗完,需要进行调度 */ { proc_current->proc_cpu_time = 0; Proc_sched(); }}
每次时钟中断发生后,首先计算调度因子,然后递减进程的CPU时间,如果进程的CPU时间耗尽,则进行任务调度。
做了以上的准备后,可以进行测试了。
#define STACK_SIZE 512byte_t stack1[STACK_SIZE];byte_t stack2[STACK_SIZE];int app1(void){ long i = 0; char msg[32]; for(;;) { sprintf(msg,"app1.%8ld ",i++); Con_write_string(60,5,msg); } return 0;}int app2(void){ long i = 0; char msg[32]; for(;;) { sprintf(msg,"app2.%8ld ",i++); Con_write_string(60,6,msg); } return 0;}void main(void){ Disable_irq(); Proc_initial(); Clk_initial(); Enable_irq(); Proc_create("app1",app1,0,MAKE_STACK(stack1,STACK_SIZE)); Proc_create("app2",app2,0,MAKE_STACK(stack2,STACK_SIZE)); for(;;) { Cpu_hlt(); } }
一些辅助程序如下:
#define Disable_irq() do{ asm{ cli } }while(0)#define Enable_irq() do{ asm{ sti } }while(0)
#define MAKE_STACK(sp,size) (void *)(((uint_t)(sp) + (size)) & (~7))
_Cpu_hlt:db 0f4hdb 0f4hdb 0f4hdb 0f4hdb 0f4hret
f4h是停机指令的机器码,这个指令是稍后的CPU才支持,BC31不能识别,所以就直接采用机器码编程。这个程序主要作用是在系统没有其他进程是,可以让CPU停止运行,减少能量消耗。
测试的方式是建立两个死循环的程序,这两个程序向屏幕的指定位置输出不断变化的字符串。按照正常的理解,这两个程序是不能同时执行的,但是在Lenix下,就可以做到同时运行。也就是说,Lenix实现了一个基本多任务管理。
看看Lenix运行的截图:
- 进程管理测试(1)
- Linux进程管理(1)
- 进程管理(3-1)
- 进程管理(二)进程
- 处理机管理(进程管理)
- 操作系统之进程管理(1)
- 操作系统——进程管理(1)
- linux操作系统-3进程管理(1)
- linux程序管理和进程(1)
- 操作系统之进程管理(1)
- LINUX进程管理-1
- LINUX进程管理-1
- Linux进程管理(1)
- Linux 进程管理(1)
- 进程管理1
- 进程管理(一)
- 进程管理(二)
- Linux进程管理(-)
- My PMP
- 如何导出命令帮助--linux
- Android Actionbar学习笔记(三)-----修改Actionbar的样式
- 随笔· Hadoop相关
- 如何在Android中实现Search Activity
- 进程管理测试(1)
- Beating the Talent Crunch With a Distributed Team
- combobox只读属性
- 【刘剑领导力】卓越领导魅力的十大行为秘籍-卓越领导网
- NPN和PNP作为开关管的设计技巧以及全系列三极管参数
- C++中的vector使用范例
- 数据库索引的使用(转自百度分享)
- sqlserver2000 导出数据至 oracle
- 关于SmartUpload在WebLogic集群下上传文件的共享方案