进程调度实验

一:内核级线程调度

1,当我insmod该进程(led-on),


led0被点亮,任务管理器查看: 该进程占用cpu99%


2,当我insmod该进程(led-off),



led0周期性闪烁,任务管理器查看:两个进程分别占用cpu49.7%


3,当我insmod该进程(dead),



led0停止闪烁,(灯灭了),系统死机,任务管理器调不出来。



二:用户级线程调度

2.1插入s3c2440xxx.ko驱动模块,

2.2创建设备文件节点,

2.3执行应用程序led-on并放到后台,


2.4执行应用程序led-off并放到后台,


2.5查看任务管理器:用示波器测量得出led管脚周期为10ms,占空比为50%,

2.6执行应用程序led-nothing并放到后台,

2.7查看任务管理器:用示波器测量得出led管脚周期为15ms,占空比为33%,偶尔变到66.6%



结论:

            现象1,用户程序无sleep并且有while(1),用户线程能来回切换,说明这个切换是有东西在管的,到时间了就强迫退出

            现象2,当3个应用程序共同影响led时,应用程序轮番对其进行操作,所以周期由10ms变成了15ms,占空比不是50%了,说明多任务对其产生了影响

            现象3,占空比一般为33%,但有时变到66.6%,说明任务调度可能不是沿一个方向旋转,而是双向的!



三:应用程序调用驱动ioctl

3.1,

3.2,如下图为开启了一个while(1):


3.3,如下图为开启了两个while(1),显示的200us为两个while(1)即两个应用程序的切换时间。


四:用双踪检测出相邻两个GPIO翻转的时间差为300ns

            for(iii = 0 ;iii <4; iii++)
            {
leds_all_on();
leds_all_off();
            }


可见,翻转周期约为2.75us,


五:内核级线程切换

代码shine2:

代码shine4:

代码shine6:

实验结果1(当插入shine2和shine4两个模块):

实验结果2(当插入shine6,shine2和shine4三个模块):

实验结论:

通过该实验可以得出内核级线程切换花费的时间为5ms。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值