linux实时线程调度bug,linux中采用用户级线程模拟实现EDF和RMS两种处理机实时调度算法之改进...
原算法中被选中任务每运行一个时间单位便将控制权交给主线程。再判断是否需要切换实时任务。实际上不需这样频繁的时钟中断。
故改进成。只在需要重新调度任务时才返回主控线程。且统计出线程切换次数(主线程切换不计)。
//编译
// pthread库不是Linux系统默认的库,所以在编译中需加-lpthread参数(posix线程库 )
gcc -lpthread -lm test.c -o test.out
#include "math.h"
#include "sched.h"
#include "pthread.h"
#include "stdlib.h"
#include "semaphore.h"
//@author vince
typedef struct{
char task_id;
int call_num; //times has been called
int ci; //processing time
int ti; //T
int ci_left;
int ti_left; //time left to next T
int flag; //isActive,0_no,2_yes
int arg; //argument
pthread_t th; //thread
}task;
void proc(int *args);
void idle();
int select_proc();
int task_num=0;
int idle_num=0;
int alg; //1 for EDF, 2 for RMS
int curr_proc=-1; //index
int demo_time=100; //time for show
task *tasks;
pthread_mutex_t proc_wait[100]; //the one be chosed is unlocked
pthread_mutex_t main_wait,idle_wait;
float sum=0;
pthread_t idle_proc;
int i;
int switchCount=0;
int main(int argc,char **argv)
{
pthread_mutex_init(&main_wait,NULL);
pthread_mutex_lock(&main_wait); //
pthread_mutex_init(&idle_wait,NULL);
pthread_mutex_lock(&idle_wait); //
printf("Please input number of real time tasks : \n");
scanf("%d",&task_num);
tasks=(task*)malloc(task_num*sizeof(task));
for(i=0;ir)
{ //unschedulable
printf("(sum=%lf > r=%lf),not schedulable!\n",sum,r);
exit(2);
}
pthread_create(&idle_proc,NULL,(void*)idle,NULL);
//create idle proc
for(i=0;i0)
{
//pthread_mutex_lock(&proc_wait[*args]); //wait to be chosed
if(idle_num!=0)
{
printf("idle(%d)",idle_num);
idle_num=0;
}
printf("%c%d",tasks[*args].task_id,tasks[*args].call_num);
tasks[*args].ci_left--;
if(tasks[*args].ci_left==0)
{
printf("(%d)",tasks[*args].ci);
tasks[*args].flag=0;
tasks[*args].call_num++;
//pthread_mutex_unlock(&main_wait); //wake up main proc
//pthread_mutex_lock(&proc_wait[*args]);
}
int j;
//once it process,count rather than count in main(),coz it need to select in right here!
for(j=0;j");
idle_num++;
int j;
//once it process,count rather than count in main(),coz it need to select in right here!
for(j=0;jtasks[j].ti_left){
temp1=tasks[j].ti_left;
temp2=j;
break; }
case 2: //RMS
if(temp1>tasks[j].ti){
temp1=tasks[j].ti;
temp2=j; }
}
}
}
return temp2;
}
欢迎讨论。
linux实时线程调度bug,linux中采用用户级线程模拟实现EDF和RMS两种处理机实时调度算法之改进...相关推荐
- linux实时线程调度bug,Linux实时调度 - kworker线程无法运行并导致性能影响
我有一个应用程序,一些线程被固定到使用CPU亲和力的特定核心 . 我试图将这些线程移动到实时优先级策略,其中SCHED_FIFO / SCHED_RR具有这些策略中系统上可用的最低优先级: param ...
- Linux下的LWP(轻量级进程)、进程 、 线程、用户级线程、内核线程
一.定义 再看正文之前我要先强调一下几点: 1. Linux中没有真正的线程,但windows中确实有线程 2. Linux中没有的线程是由进程来模拟实现的(又称作:轻量级进程) 3. 所以在Linu ...
- linux ucontext 类型,协程:posix::ucontext用户级线程实现原理分析 | WalkerTalking
在听完leader的课程后,对其中协程的实现方式有了基本的了解,无论的POSIX的ucontex,boost::fcontext,还是libco,都是通过保存和恢复寄存器状态,来进行各个协程上下文的保 ...
- 【解决】Linux (centos7)扩容磁盘不显示扩容后的磁盘或者磁盘大小两种情况
[解决]Linux (centos7)扩容磁盘不显示扩容后的磁盘或者磁盘大小两种情况: 情况一:修改原来磁盘大小,一般是增加,特别是在虚拟化中 情况二:新增磁盘 情况一:修改原来磁盘大小后,系统磁盘 ...
- 内核级线程(KLT)和用户级线程(ULT)
文章目录 进程和线程 内核级线程(Kemel-Level Threads, KLT 也有叫做内核支持的线程) 纯内核级线程特点 用户级线程(User-Level Threads ULT) 纯用户级线程 ...
- 操作系统--用户级线程和内核级线程
在多线程操作系统中,各个系统的实现方式并不相同.在有的系统中实现了用户级线程,有的系统中实现了内核级线程 1.内核级线程: (1)线程的创建.撤销和切换等,都需要内核直接实现,即内核了解每一个作为可调 ...
- 应用退出前不让线程切换_用户级线程和内核级线程,你分清楚了吗?
前天晚上有个伙伴私信我说在学进程和线程,问我有没有好的方法和学习教程,刚好我最近也在备相关的课. 班上不少学生学的还是很不错的.拿班上小白和小明的例子吧(艺名哈).小明接受能力很强,小白则稍差些. 关 ...
- 利用用户级线程提高多线程应用的性能
随着处理器往多核的发展,多线程被越来越多的应用到软件的开发中.但是如果没有正确的使用多线程,反而可能会导致软件性能的下降. 多线程程序中一个影响程序性能的因素就是同步.对于windows系统来说,最快 ...
- php内li背景色,CSS_css中ul li的背景小图标属性设置的两种情况,这里我们分两种情况列出: ① - phpStudy...
css中ul li的背景小图标属性设置的两种情况 这里我们分两种情况列出: ①当标题前的图标是很长的一绺而不是单独的一个点或者类似图标时,在定义背景图background要定义在 里.因为很长,所以放 ...
最新文章
- AI大厂迎最冷冬天?网传阿里拟裁员2万人,净利下滑高管离职
- c 和java 内存,C分配和内存开销
- windbg基本命令
- 七种方式求斐波那契(Fibonacci)数列通项
- 乙肝疫苗该怎么打(转)
- (实用)Ubuntu 开启NFS服务
- Android安全笔记-Service基本概念
- android 加载更多动画效果,Android实践之带加载效果的下拉刷新上拉加载更多
- 基于windows10+Anaconda3+Python搭建配置TensorFlow、Keras、Jupyter Notebook库,下载Kaggle狗猫数据集完成原始数据直接训练和数据增强后训练
- the7主题 一个强大的wordpress 主题 html5拖拽式建站系统
- Python 北京房价预测实验报告 深度学习 tensorflow keras
- podman的配置以及命令详解
- excel 公式常见错误怎么处理
- 彩色飘带字体怎么制作?AE教程教给你
- python编程中,各种随机种子seed设置总结
- android_基础_Edittext的setSelection属性
- mysql的安装与初始化
- 工程光学第一、二、六章学习总结
- 如何搭建企业邮箱服务器
- 【论文笔记】DSCN:基于深度孪生神经网络的光学航空图像变化检测模型