It'*_*ete 7 c linux embedded real-time rtos
我有一个具有一些软实时要求的项目.我有两个进程(我编写的程序)进行一些数据采集.在任何一种情况下,我都需要不断读入正在进入并处理它的数据.
第一个程序是严格的线程,第二个程序使用一个应该是线程的库,但我不知道幕后发生了什么.每个程序都由用户执行,并且(默认情况下)我看到每个程序的优先级为20,漂亮的值为0.每个程序使用大约30%的CPU.
就目前而言,两个进程都必须与一些后台进程争用,我想尽可能地为我的两个程序提供最好的CPU.我的主要问题是我有一个与之交谈的设备,它有一个64字节的硬件缓冲区,如果我没有及时读取它,我会得到溢出.我注意到这种情况每运行2-3小时就会发生一次.
根据我的研究(http://oreilly.com/catalog/linuxkernel/chapter/ch10.html),似乎有三种方法可以优先使用:
将nice值设置为较小的数字,因此为每个进程提供更多优先级.我可以使用nice命令在不对代码进行任何修改(或使用系统调用)的情况下执行此操作.
将sched_setscheduler()用于特定调度策略的整个过程.
使用pthread_setschedparam()分别设置每个pthread.
我遇到了以下障碍:
假设我选择3,如何防止低优先级线程被饿死?是否还有一种方法可以确保共享锁将优先级较低的线程提升到更高的优先级?假设我有一个实时的线程,SCHED_RR并且它与默认的SCHED_OTHER线程共享一个锁.当SCHED_OTHER线程获得锁定时,我希望它执行@更高优先级以释放锁定.我如何确保这一点?
如果SCHED_RR的一个线程创建另一个线程,新线程是自动SCHED_RR,还是我需要指定它?如果我有一个我已设置为SCHED_RR的进程,它的所有线程是否自动遵循此策略怎么办?如果SCHED_RR的进程产生子进程怎么办,它是否太自动SCHED_RR?
鉴于代码仅占用CPU的60%,这是否有任何问题?或者是否仍然存在CPU与后台进程共享的问题,我应该关注并可能导致我的缓冲区溢出?
抱歉这个冗长的问题,但我觉得它需要一些背景信息.在此先感谢您的帮助.
(1) pthread_mutex_setprioceiling
(2) 新创建的线程继承其创建线程的调度和优先级,除非它的线程属性(例如pthread_attr_setschedparam / pthread_attr_setschedpolicy)在您调用时被指示执行其他操作pthread_create。
(3) 既然你现在不知道是什么原因造成的,公平地说,任何人都很难有把握地说。