导航:首页 > 源码编译 > 驱动系统协议栈算法

驱动系统协议栈算法

发布时间:2024-12-16 09:40:05

linux调度算法的核心思想是什么

第一部分:实时调度算法

什么是实时系统,POSIX 1003.b作了这样的定义:是指系统可以在有限响应时间内提供所需的服务级别。较可取被定义为由Donald乔利士的的:一个实时系统的程序的逻辑正确性不仅取决于计算的准确度,而且还对结果,如果系统时间的限制不能满足将是一个系统错误发生。

基于实时系统的实时性要求的不同,可分为软实时和硬实时两种。硬实时系统是指系统必须确保,在最坏情况下的服务时间,截止日期为事件的响应时间是在任何情况下,必须满足。如航天飞船的控制是这样一个系统的现实。所有其他实时系统的特点,可以称为软实时系统。如果清除,软实时系统是那些从统计学的角度来看,一个任务(在下面的讨论中,我们将有任务和过程不作出区分),以确保系统的处理时间,可以得到事件可以处理的最后期限到来之前,违反的最后期限,并不会带来一个致命的错误,如实时多媒体系统是一种软实时系统。

一台电脑系统的CPU和其他资源进行有效的调度和管理,以提供实时操作系统的支持。的多任务的实时系统中,资源的调度和管理更复杂的。下面讨论本文将从各种实时任务调度算法的分类的角度来看,普通的Linux操作系统进程调度和各种实时Linux系统,然后研究,以支持实时特点,普通的Linux系统的改进。实时领域的一些问题,并总结了各种实时Linux的Linux操作系统,归根到底是如何解决这些问题。

CPU的实时调度算法的分类

多种实时操作系统的实时调度算法可以分为以下三类Wang99] [Gopalan01]:基于优先级调度算法(优先级驱动调度PD),基于在共享的CPU使用率调度算法(分享驱动调度SD)的比例,以及基于时间的进程调度算法(时间驱动调度TD),下面这三种调度算法逐一介绍。

1.1

/>基于优先级的调度算法,基于优先级的调度算法,每个进程被分配一个优先级,每次的进程调度程序,调度程序总是具有最高的调度优先级的任务执行。根据不同的优先级分配方法,基于优先级的调度算法可以分为以下两种类型的Krishna01] [Wang99]:静态优先级调度算法

该算法得到这些系统中运行的所有进程都静态分配一个优先级。静态优先级分配的属性的应用程序,如任务循环中的用户优先级,或其他预先确定的政策。 RM(速率单调)的调度算法是一个典型的静态优先级的调度算法,根据执行的任务的调度优先级的周期的长度确定,那些具有小的执行周期的任务的优先级较高。

动态优先级调度算法:

该算法基于任务的资源需求动态地分配任务的优先级,资源分配和调度的目的更大的灵活性。非实时系统,这种算法有很多,如短作业优先级调度算法。任务的实时调度算法,EDF算法是使用最广泛的动态优先级调度算法,该算法根据他们的截止日期(截止日期)分配优先级的就绪队列中的每个任务,最近期限具有最高的优先级。

1.2

基于优先级调度算法的调度算法是简单而有效的,但这种算法的基础上按比例份额是一个硬实时调度,许多的情况下,不适合使用此算法:例如,软实时应用,如实时多媒体会议系统。对于软实时应用程序,共享资源调度算法(SD算法)的比例使用是更合适的。

比例共享调度算法是指对CPU使用率的比例共享调度算法,其基本思路是按照一定的权重(比率),需要一组调度安排任务,以使它们的权重成比例的执行时间。

要实现比例共享调度算法[Nieh01]有两种方法:第一种方法是调整的准备过程中出现的调度队列队第一频率,并安排一线队的过程中,执行第二种方法是连续调度进程就绪队列中投产,但根据调整分配一个进程的运行时间片分配的权重。

比例共享调度算法可以分为以下类别:循环赛,公平份额,公平排队,的彩票调度方法,(彩票)。

比例共享调度算法的一个问题是,它并没有定义任何优先的概念,所有的任务都根据其应用的CPU资源的比例共享系统过载时,执行的所有任务将较慢比例。因此,为了确保该系统的实时过程中获得一定量的CPU处理时间,一般采用的是动态权重的调整过程。

1.3。基于时间进程调度算法的调度算法

对于那些具有稳定,简单的系统已知输入,您可以使用时间驱动(驱动时间时间:TD)数据处理,它可以提供一个良好的预测。这种调度算法本质上是一个设计定型的离线静态调度方法。在系统的设计阶段,所有处理的情况下,在明确的制度,每个任务切换的开始和结束的时间提前做出了明确的安排和设计。该算法是适用于小型嵌入式系统,自动化控制系统,传感器和其他应用环境。

该算法的优势是良好的可预测性任务的执行,但最大的缺点是缺乏灵活性,而且会有一个任务需要执行,而CPU保持空闲。

一般的Linux系统CPU调度

一般的Linux系统支持实时和非实时两种进程,实时进程与普通进程方面具有绝对的优先权。相应地,实时进程调度策略SCHED_FIFO或SCHED_RR,普通进程SCHED_OTHER调度策略。

每个任务调度算法的实现在Linux四种调度参数,它们是rt_priority优先政策(尼斯),计数器。调度进程调度的基础上,这四个参数。

SCHED_OTHER调度策略,调度程序总是会选择优先级+计数器的值进程调度的执行。从逻辑分析存在SCHED_OTHER调度策略调度处理来执行,其特征在于,所述优先级是一个固定的调度周期(历元),在每个调度周期内的过程中的优先级,计数器的值的大小的影响这一刻已经确定变量值的过程中被创建时,它代表了进程的优先级,也代表数量的时间片,通过该方法可以得到在每个调度周期内,计数器是一个动态值,它反映了当前调度周期的过程中,剩余的时间片。在每个调度周期的开始,分配给优先级值计数器,那么每一次进程被调度运行计数器的值?减少。当计数器的值是零,这个过程已经运行的时间片调度期内,不再参与调度周期进程调度。当所有的进程都用完了时间片调度期结束,然后一遍又一遍。此外,可以看出在Linux系统中的调度周期是不固定的,它的量是动态变化的,例如,在运行的进程的数目和它们的优先级值?可以影响一个划时代的长度。有一点值得注意的是,在2.4内核中,首要任务是不错的替换两个类似的作用。

按比例分担的调度策略调度策略SCHED_OTHER可见的性质,它的这种设计方法,以确保进程调度的公平性 - 一个低优先级进程,在每个时代也将得到他们的份额那些CPU的执行时间,此外,它也提供了不同的进程的优先级,进程执行时间可以得到更多的具有高优先级值。

对于实时的过程中,他们使用基于实时优先级rt_priority的优先级调度策略,但相同的实时优先级的进程调度方法是根据不同的调度策略,

BR /> SCHED_FIFO:不同的进程,根据静态优先级排队,然后在相同的优先级队列,先准备好运行的第一谁调度和运行的进程不会被终止,直到发生以下情况:1。高优先级的进程篡夺了CPU;自己的资源请求受阻;自己主动放弃CPU(呼叫SCHED_YIELD);

SCHED_RR是这样的:这个调度策略SCHED_FIFO与上述完全相同,除了时间片分配给每个进程,正在实施的过程中,给执行时间片,时间片的长度可以通过sched_rr_get_interval调用

由于Linux系统本身是一个桌面导向的系统,因此,它是用于在实时应用中的一些问题:/> /> Linux系统调度单位是10ms,所以它不能提供精确的定时中断; p>当一个进程调用系统调用进入内核模式运行,它不能被抢占;

Linux内核实现大量采用了封闭中断操作损失;

由于使用虚拟内存技术,当发生页面错误时,从硬盘中读取的数据交换的需要,但硬盘读取和写入的存储位置的随机性,将导致随机读取和写入时间,这在某些情况下,会影响实时任务期限;

虽然Linux的进程调度器还支持实时优先级,但由于缺乏有效的实时任务调度机制和调度算法;其网络子协议处理和其它设备的中断处理,调度伴有相应的过程和自己的有没有明确的调度机制;

各种实时Linux系统
Home>的的

3.1 RT-Linux和RTAI

RT-Linux是新墨西哥大学的研究(新墨西哥州技术学院)[RTLinuxWeb] [Barabanov97。其基本思路是,在Linux系统上的硬实时支持,它实现了一个微内核实时操作系统(也被称为RT-Linux的实时子系统),而普通的Linux系统作为一个低优先级任务在操作系统中运行。在正常的Linux系统的另一个任务可以沟通,通过FIFO和实时任务。 RT-Linux的框架如图1所示:

图1 RT-Linux的结构

RT-Linux的关键技术是软件模拟硬件中断控制器。当Linux系统不时阻止CPU中断,实时定量RT-Linux的子系统的请求拦截,爱不释手,而事实上并没有真正阻止硬件中断,从而避免了由于中断造成的封由系统在一段时间内没有响应,从而在改进的实时。当传递给Linux内核的RT-Linux的一个硬件中断到达截取的中断,并确定是否有一个实时子系统中断例程来处理或处理。此外,的最小定时的精度在正常的Linux系统是确定系统的实时时钟的频率,Linux的系统时钟被设置到时钟中断每秒100,所以在Linux的系统定时的精度10毫秒,即时钟周期10ms时,RT-Linux的实时时钟设置为单触发状态,可以提供更多的十几微秒调度粒度。

RT-Linux实时子系统的任务调度优先级驱动算法,RM,EDF等,也可用于其他调度算法。

RT-Linux的专有系统,重型工作,的确是一个不错的选择,但他只提供了CPU资源的调度和实时系统和Linux系统的关系不是非常密切,因此开发人员可以充分利用已在Linux系统中,如协议栈实现的功能。 RT-Linux的工业控制等实时任务简单和硬实时要求的环境,但大量的工作需要做,如果你想应用的多媒体处理。

意大利实时应用程序接口(RTAI)来自RT-Linux的,它是在设计和RT-Linux的思想相同。这是原来的设计中,为了解决问题,RT-Linux的不同版本的Linux之间很难很难移植,RTAI在Linux上定义的实时硬件抽象层,这个抽象层接口提供实时任务Linux系统的相互作用,这可以增加一点可以Linux内核源代码到Linux内核的实时支持。

3.2。 KURT-Linux的

KURT-Linux的堪萨斯大学开发的,它可以提供实时微秒精度[KurtWeb] [斯里尼瓦桑]。与RT-Linux的单独实现一个实时内核,KURT-Linux是常用的Linux系统的基础上实现的,这也是第一个基于Linux的实时系统可以使用普通的Linux系统调用。

KURT-Linux系统分为三种状态:正常状态,实时状态和混合状态,在正常状态下,它使用普通的Linux实时运行状态实时调度策略任务,实时和非实时任务的混合状态,可以执行实时状态可以被用来为实时的要求更加严格。

为了提高Linux系统的实时特性,有必要提高精度的时钟系统的支持。但是,如果只是简单地增加时钟频率将导致调度负载的增加,从而严重降低系统的性能。为了解决这个矛盾,KURT-Linux中使用的时钟精度的方法[UTIMEWeb]提高Linux系统UTIME,时钟芯片设置为单次触发状态(单拍模式),也就是每个时钟芯片设置超时,然后再次超时事件发生时,在时钟中断的处理程序所需的时钟芯片设置一个超时。其基本思想是一个精确的时间意味着我们需要的时钟中断发生时,我们需要一个更精确的时间,以达到这样的精度,但并不一定需要系统时钟频率。它采用了CPU时钟计数器时间戳计数器(TSC)提供准确的CPU频率精度的时间。

KURT-Linux的实时任务调度,使用静态CPU的实时调度算法,基于时间(TD)。实时任务需要实时事件发生在设计阶段就必须清楚列明。该算法可以实现更好的调度任务,对于那些谁周期。

KURT-Linux的相RT-Linux的优势之一是,你可以使用系统调用的Linux系统,它最初是专为硬实时支持,但因为它是简单的实现将使用一个简单的时间驱动调度取代Linux的调度,实时进程调度的影响等非实时任务,在某些情况下会发生实时任务的截止日期是脆弱的不符合的,也被称为严格的实时系统(快地实时)。基于KURT-Linux的应用程序:艺术(ATM参考交通系统),多媒体播放软件。 KURT-Linux的另一种方法,需要频繁的时钟芯片编程

3.3。 RED-Linux的

RED-Linux是加州大学尔湾,实时Linux系统的发展[REDWeb] [Wang99],它将支持实时调度和Linux实现相同的操作系统内核。它支持三种类型的调度算法,即:时间驱动优先Dirven,分享驱动。

为了提高系统的调度粒度,RED-Linux的学习RT-Linux的软件模拟中断的管理机制,并增加频率的时钟中断。 RED-Linux的中断仿真程序只是简单地中断会在队列中排队一个硬件中断到来时,并没有进行实际的中断处理程序。

另外,为了解决Linux的内核模式的过程中不能被中断,RED-Linux的插入Linux内核抢占点原语的众多功能,使这一进程在内核模式下,也在一定程度上被抢占。通过这种方法提高了内核的实时特性。

RED-Linux的设计目标是提供常规调度框架可以支持多种调度算法,系统为每个任务增加几个属性,进程调度的基础上:

优先级:作业的优先级;

开始时间:工作的开始时间;

完成时间:工作的结束时间; BR p>预算:资源的数量在操作过程中要使用的工作;

调整值?这些属性和调度根据什么优先使用的这些属性值几乎所有的调度算法。在这种情况下,三种不同的调度算法无缝地一起耦合到一个统一的。

Ⅱ 芯片行业BSP驱动开发1年总结

背景:作为半导体领域的一家领先企业,我从事BSP驱动开发工作。

目的:总结开发经验,构建嵌入式体系架构,并深入了解工程项目的本质。

首先,我专注于Norflash模块驱动管理,其主要功能包括XIP(执行在非易失性存储器中)和存储数据。作为SRAM的备份,Norflash直接充当代码执行介质。

我遇到了三个主要的工程项目挑战:

1. 外挂新型号Norflash到主核芯片。

2. 在实际应用中,Norflash运行的代码出现故障,需要进行调试。

3. 为J-LINK烧录算法开发所需的flashloader。

在初次接触项目时,我面临了不小的挑战,但通过以下几个步骤,我成功地完成了Norflash的接入:

1. 首先,我定位到运行在SRAM中的Norflash代码。

2. 通过硬件ID识别不同型号Norflash参数,通过SPI接口循环发送9F命令,获取ID号,遍历链表找到相应参数。

3. 参考Norflash数据手册,设置如DTR模式的mmy值、四线读模式的wrap值。

4. 测试整块Norflash的读写擦除功能。

5. 通过逻辑分析仪进行DEBUG,查找并修复波形问题。

对于Flashloader项目,我了解到它是RAM中的Flash操作代码。通过J-LINK工具下载代码,将bin文件烧录到FLASH。理解为RAM上的最小系统,包括norflash驱动、cache、pmu电源、timer时钟系统。

第三方库代码移植,包括NFC和支付宝SDK,涉及适配I2C或SPI驱动,实现硬件通信,并完善API接口。

FAE协同联调工作,包括确认客户需求、复现问题、上报研发。通过流程图理解显示流程。

GIT工具熟练使用,从拉取代码、更新、提交到查看修改记录等操作。

总体感受:全面的技术锻炼,FAE与研发的培养模式对新人非常宝贵。嵌入式系统框架包括主核MCU及其外设,操作系统管理内存和外设,支持基础协议栈、算法和应用层。

阅读全文

与驱动系统协议栈算法相关的资料

热点内容
中国移动app如何关闭家庭宽带 浏览:896
如何举报泄露信息的app 浏览:107
驱动程序模块化编译 浏览:298
压缩空气质量抽查记录 浏览:690
android判断语句 浏览:301
柬埔寨服务器2g怎么样 浏览:142
程序员培训的学校 浏览:463
动漫绝对命令 浏览:76
雅思app怎么样 浏览:825
online用什么服务器好 浏览:5
电脑下载服务器连接中断怎么办 浏览:807
抖音好友服务器维护中是什么意思 浏览:192
app怎么开通转账撤回功能 浏览:64
python根据文件名读取文件 浏览:512
linux查看tomcat目录 浏览:732
妄想山海服务器怎么删除 浏览:347
卖出的艺术pdf 浏览:837
glsl在线编译器 浏览:28
楼层柱子上下加密 浏览:1002
兴强数控编程 浏览:162