培训要求原文:
主题:QT3.3.8b编程在Linux2.4.18内核中的运行机制
关键词:进程、线程、消息(事件)、信号-槽、任务调度、时间片、c++类库、设备
要求:从CPU运行机理出发讲述应用程序的运行过程
拟内容概要:
上午:
1、学习本课程的意义,Linux以及Qt的优势
2、举例说明嵌入式Linux上Qt开发平台的搭建
3、背景知识介绍:X Window系统、KDE与GNOME,qt与gtk对比,基于桌面Linux的Qt与Qt/e对比等
4、Linux背景知识,进/线程,任务调度,NFS文件系统等
下午:
1、Qt特别之处,相对于MFC以及Java的优势
2、Qt框架简介
3、信号/槽机制,Meta-Object系统,组件布局等知识以及实践经验总结
意见:
主要要体现程序的运行机制!
上午,1、2、3点简略,最多45分钟。4点详细讲进/线程,任务调度,消息机制(重点突出时间片运行),简单讲存储管理与文件系统。
下午,1、2点简略,最多45分钟。3点详细讲,信号/槽机制,线程切换、消息循环(以QT4类库为准)。简单讲Meta-Object系统,组件布局等知识以及实践经验总结。
思考:
这个题目本身是不是有点儿外行?
1、在Linux平台上可以运行万万千千中类库编写出来的程序,而他们“内核中的运行机制”是一样的?
2、我是不是该深入调查下再做评论,因为只有完全懂Qt源码才有资格评论这个论题。
时间片
1、Windows CE的时间片
1.1如何抢占?
1.1 怎么抢占,优先级与抢占之间的详细关系?
If several threads of different priority levels are ready for execution, the thread
with the highest priority level as of the time of scheduling is made available for
execution .
非抢占式的是怎么样的?
2、Linux的时间片
2.1如何抢占?
当一个进程进入TASK_RUNNING状态,内核会检查它的优先级是否高于当前正执行的进程,如果是,调度程序会被唤醒,抢占。此外,当一个进程的时间片变为0时,他会被抢占,调度程序被唤醒以选择一个新的进程。
问题1:有没有可能优先级很低的线程一直得不到执行?
问题2:时间片怎么会变成0,难道是开始执行,“时间片”开始减小
(1)在Linux 2.4和以前的版本,内核是不可抢占的,也就是说,如果当前任务运行在内核态,即使当前有更紧急的任务需要运行,当前任务也不能被抢占。因此那个紧急任务必须等到当前任务执行完内核态的操作返回用户态后或当前任务因需要等待某些条件满足而主动让出CPU才能被考虑执行;
(2)在Linux 2.6中,内核已经可以抢占,因而实时性得到了加强。但是内核中仍有大量的不可抢占区域, 如由自旋锁 (spinlock)保护的临界区,以及一些显式使用preempt_disable失效抢占的临界区。
时间片
I/O消耗型不需要长的时间片,而处理器消耗型的进程则希望越长越好
2011-01-08 21:41:28
互斥量、信号量、条件变量时Linux下线程同步的三种方法,
互斥锁一个明显的缺点是它只有两种状态:锁定和非锁定。
而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。
使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。一旦其它的某个线程改变了条件变量,它将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程。这些线程将重新锁定互斥锁并重新测试条件是否满足。一般说来,条件变量被用来进行线承间的同步。