Linux是分时操作系统,不是实时的

linux是很典型的分时系统。 但是在一些特殊领域。 也可以把linux做成实时系统的

 

分时系统是指,在一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户通过自己的终端,以交互方式使用计算机,共享主机中的资源
分时操作系统具有以下几个优点: 
同时性,独立性,及时性,交互性.

 

1.实时操作系统定义
  实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。因而,提供及时响应和高可靠性是其主要特点。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。
  实时操作系统是保证在一定时间限制内完成特定功能的操作系统。例如,可以为确保生产线上的机器人能获取某个物体而设计一个操作系统。在“硬”实时操作系统中,如果不能在允许时间内完成使物体可达的计算,操作系统将因错误结束。在“软”实时操作系统中,生产线仍然能继续工作,但产品的输出会因产品不能在允许时间内到达而减慢,这使机器人有短暂的不生产现象。一些实时操作系统是为特定的应用设计的,另一些是通用的。一些通用目的的操作系统称自己为实时操作系统。但某种程度上,大部分通用目的的操作系统,如微软的Windows NT或IBM的OS/390有实时系统的特征。这就是说,即使一个操作系统不是严格的实时系统,它们也能解决一部分实时应用问题。
  2.实时操作系统的特征
  1)多任务;
  2)有线程优先级
  3)多种中断级别
  小的嵌入式操作系统经常需要实时操作系统,内核要满足实时操作系统的要求。
  3.实时操作系统的相关概念
  (1)基本概念
  代码临界段:指处理时不可分割的代码。一旦这部分代码开始执行则不允许中断打入;
  资源:任何为任务所占用的实体;
  共享资源:可以被一个以上任务使用的资源;
  任务:也称作一个线程,是一个简单的程序。每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。典型地,每个任务都是一个无限的循环,每个任务都处在以下五个状态下:休眠态,就绪态,运行态,挂起态,被中断态;
  任务切换:将正在运行任务的当前状态(CPU寄存器中的全部内容)保存在任务自己的栈区,然后把下一个将要运行的任务的当前状态从该任务的栈中重新装入CPU的寄存器,并开始下一个任务的运行;
  内核:负责管理各个任务,为每个任务分配CPU时间,并负责任务之间通讯。分为不可剥夺型内核于可剥夺型内核;
  调度:内核的主要职责之一,决定轮到哪个任务运行。一般基于优先级调度法;
  (2)关于优先级的问题
  任务优先级:分为优先级不可改变的静态优先级和优先级可改变的动态优先级;
  优先级反转:优先级反转问题是实时系统中出现最多的问题。共享资源的分配可导致优先级低的任务先运行,优先级高的任务后运行。解决的办法是使用“优先级继承”算法来临时改变任务优先级,以遏制优先级反转。
  (3)互斥
  虽然共享数据区简化了任务之间的信息交换,但是必须保证每个任务在处理共享共享数据时的排他性。使之满足互斥条件的一般方法有:关中断,使用测试并置位指令(TAS),禁止做任务切换,利用信号量。
  因为采用实时操作系统的意义就在于能够及时处理各种突发的事件,即处理各种中断,因而衡量嵌入式实时操作系统的最主要、最具有代表性的性能指标参数无疑应该是中断响应时间了。中断响应时间通常被定义为:
  中断响应时间=中断延迟时间+保存CPU状态的时间+该内核的ISR进入函数的执行时间[2]。
  中断延迟时间=MAX(关中断的最长时间,最长指令时间) + 开始执行ISR的第一条指令的时间[2]。

 

分时操作系统  【词语】:分时操作系统
  【注音】:fēn shí cāo zuò xì tǒng
  【英文】:Time-sharing Operating System
  【释义】:使一台计算机同时为几个、几十个甚至几百个用户服务的一种操作系统。把计算机与许多终端用户连接起来,分时操作系统将系统处理机时间与内存空间按一定的时间间隔,轮流地切换给各终端用户的程序使用。由于时间间隔很短,每个用户的感觉就像他独占计算机一样。分时操作系统的特点是可有效增加资源的使用率。例如UNIX系统就采用剥夺式动态优先的CPU调度,有力地支持分时操作。
  产生分时系统是为了满足用户需求所形成的一种新型 OS 。它与多道批处理系统之间,有着截然不同的性能差别。用户的需求具体表现在以下几个方面: 人—机交互 共享主机 便于用户上机 
  分时系统的基本思想 
  时间片 :是把计算机的系统资源(尤其是 CPU时间)进行时间上的分割,每个时间段称为一个时间片,每个用户依次轮流使用时间片。 
  分时技术:把处理机的运行时间分为很短的时间片,按时间片轮流把处理机分给各联机作业使用。 
  分时操作系统:是一种联机的多用户交互式的操作系统。一般采用时间片轮转的方式使一台计算机为多个终端服务。对每个用户能保证足够快的响应时间,并提供交互会话能力。 
  设计目标: 对用户的请求及时响应,并在可能条件下尽量提高系统资源的利用率。 
  适合办公自动化、教学及事务处理等要求人机会话的场合。 
  工作方式: 
  一台主机连接了若干个终端;每个终端有一个用户在使用;交互式地向系统提出命令请求;系统接受每个用户的命令;采用时间片轮转方式处理服务请求;并通过交互方式在终端上向用户显示结果;用户根据上步结果发出下道命令 
  分时系统实现中的关键问题:及时接收。及时处理。 
  特征: 
  交互性:用户与系统进行人机对话。 
  多路性:多用户同时在各自终端上使用同一CPU。 
  独立性:用户可彼此独立操作,互不干扰,互不混淆。 
  及时性:用户在短时间内可得到系统的及时回答。 
  影响响应时间的因素:终端数目多少、时间片的大小、信息交换量、信息交换速度

 

inux是分时系统,不过可以改成实时的如:UCOS就是linux修改而来的实时系统

 

http://wenwen.soso.com/z/q170987868.htm

 

http://linux.sheup.com/linux/linux5163.htm

  • 实时操作系统 (Real-time OS) 是相对于分时操作系统 (Time-Sharing OS) 的一个 概念。在一个分时操作系统中,计算机系统的资料会被平均的分配给系统内所有的工作。对于这些工作而言,它们似乎是在一个速度较慢、资源较少的虚拟系统上工作。 而这个虚拟系统所拥有的资源会和真实系统内等待执行的工作数有关。简单的说,如 果有 n 个工作要做,每一个工作就会分到 n 分之一的资源。 

    然而在一个实时操作系统之中,系统内有多少工作并不是那么重要。我们关心的 事一个工作在多少的时间内可以被完成。和分时操作系统最大的不同之处在于 “时限(deadline)”这个概念,实时操作系统通常会要求每一个工作在交付给系 统的时候同时也给定一个时限。实时操作系统的任务不只是要求完成每一个工作, 并且要按时给定的时限完成每一个工作。 

    所以我们可以看出这二个概念的不同之处,分时操作系统的重点在于”公平”, 而实时操作系统的重点在于”时限(timing constraint)”“。 

    任何时候。我不是开玩笑,当一个实时操作系统中的每一个工作都有相同的时限时, 它应该和分时操作系统用相同的方式工作。分时操作系统和实时操作系统的分野在于工作的特性而非操作系统工作的模式。 

    在很多的书及文献上我们可能会看到”硬实时(hard real-time)”和”软实时 ( soft real-time)”这二个名词。不同的人会给它们不同的意义,但大致来说它们是一组相对的概念。硬实时对满足时限的要求会比软实时来的严格。有些人会从 工作的特性上来分,硬实时工作 (hard real-time task) 通常指不能有任何差 错的工作而软实时则是指比较容许差错的工作。例如我们常会用核能电厂和看 VCD 为例,用在核能电厂的实时操作系统如果出了差错可能会导致严重的损害,然而 VCD Player 出了些差错不过是让使用者认清他所用的程序不够好而已。所以前者 是硬实时,后者是软实时。 

    但在大多数的状况下,分野并不是如此的清楚。做 VCD Player 的厂商当然不 希望它的 Player 老是出错,它也会希望 Player 用一个硬实时操作系统来驱动。 所以硬实时和软实时的差别可能只是分类学上的问题而已。 

    然而对于一般的应用而言,实时操作系统的意义在那里呢? 我们使用流览器看一 个网站时,如果结果在 0.5 秒内出现,我们可能会觉得非常舒服。如果结果在 2 秒才出现,可能会觉得有些延迟。但如果花上 30 秒才出现,那可能就没有人会等 到结果出现了。 

    对于我们而言,等个 3,5 秒可能觉得没什么。但也许 Bill Gates 不这么想, 他会算给你听他的一秒值多少钱! 所以不同的人可能会对延迟有不同的看法。即 时操作系统最大的优势就在于他可以为不同的工作提供”不同等级的服务( differentiated service)”。 

    一个对实时系统常有的误解是实时系统是一个高效率 (high performance) 的 系统,它会跑得比一般操作系统来的快,overhead 来得小。这其实是市场策略宣 传造成的影响。一大堆非常小的操作系统宣称它们是嵌入式实时操作系统 (embedded real-time OS),这么一来”嵌入”、”实时”和”小”就被莫名其 妙的连起来了。实事上这三个是完全不相干的概念。”嵌入”指的是操作系统可 以在一些资源受限的环境,例如没有 disk,的情况下工作。”小”是指因为功能 简单,要求不多,所以操作系统可以写的很小,减少不必要的额外负担。这些都 和”实时”的概念完全没有关系。不幸的是,即使是学有专精的计算机工程师也常 把它们混为一谈。 

    为什么不用? 实时操作系统和分时操作系统并不是完全互斥的概念,我前面说过如 果一个实时操作系统中所有的工作都有相同的时限,那它应该会制造出和分时作业 系统相同的结果。 

    所以一个系统可以同时执行分时和实时的工作另一个常有的误解是实时的工作 应该比分时的工作先执行。这其实是不对的,实时的工作只是要求在时限内完成 而已,一个时限在 10 秒之后的工作没有道理一定要在现在立刻执行。太早完成 它没有任何好处,有时还会造成系统不必要的负担。 

    实时操作系统的优势在于它知道目前系统资源使用的状况,它能比起分时作业 系统更精准的控制系统资源的使用。对于分时操作系统而言,它无法预测一个工 作到底还须要花多少时间才能完成。因此对于比较重要的工作,唯一的方法就是 尽快的完成它。而实时操作系统可以预测工作完成的时间,因此它可以轻易的决 定工作要在什么时间被执行。 

    所以实时操作系统所做的事,不过就是一个更强大的 renice 指令而已。在 renice 中,你只能指定一个叫优先权 (priority) 的值。优先权越高的工作 在分时系统中会分到更多的时间,但多多少呢? 没人能回答这个问题,因为在 分时操作系统中不把它视为一个重要的事。 

    而实时操作系统的 renice 指定可以指定一大堆的参数,你可以指定前述的 时限 (deadline),优先权 (priority)。还可以指定工作在单工状态下执行所 需的时间 (execution time)、工作应该在什么时候允许开始执行 (start time) 、什么时候就不应该再继续下去了(finish time)。当然过去二十年来在实时作 业系统理论上的发展使得我们还有更多更多的可能性来实作实时操作系统的 renice 指令。但简单的说,我们得到的是一个更强大的 renice 指令。它可以被用来更 精准的调整系统的整体效能。这也就是我为什么会认为,为什么不用实时作业系 统。 

    我的看法是,在将来的操作系统,实时会是一个和网络一样、是系统标准的功能。 

    和 Linux 其它领域一般,有一大堆的人都试图为 Linux 加上实时的功能。每个人 都有不同的看法,每个人看的角度也不相同,所以产生了各式各样的”real-time Linux OS”。在这里,我们看到了开放原始码 (open source) 在这个领域优势所 在。我们可以想见在不久的将来,这些各有专精的系统会自然的合并成一套非常好 用的实时操作系统。而不是相互用市场的策略恶性竞争。所以 open source 可以 提供我们一套更新、更好、更实用的实时操作系统。 

    接下来,我们先简介一下现存的各种 real-time Linux OS。 


      NMT RT-Linux 
      NMT 是新墨西哥科技大学(New Mexico Technology) 的缩写。这一套系统可以说是 所有 Real-time Linux 的鼻祖。它目前已经发展到 3.0 版。这个系统是由 Victor Yodaiken 和它的学生 Michael Barabanov 所完成。这个系统的概念是”架空” Linux kernel,使得它的 real-time 行程得以尽快的被执行。下面的图例说明了 NMT RT-Linux 和其它类似产品的系统架构。 

    你可以看到基本上RT-Linux 中的实时工作(realtime task) 其实并不是 一个 Linux 的行程,而是一个 Linux 的可加载式核心模块( loadable kernel module)。 


    之所以要如此做的原因在于 Linux 是一个很大的系统,且在设计的时候并没 有考虑 real-time 的需求。举个例说,单一个 Linux 系统呼叫可能会花上超过 10ms 的时间。对有些像工业控制的应用而言,它们对时间的要求通常在 1ms 的 等级上,Linux 根本无法满足这种需求。所以 NMT RT-Linux 采用一个比较简单 的做法,它干脆不用直接 Linux 的任何功能,而把需要高度时间精确度的工作 写成一个驱动程序的型式,然后直接用 PC 时序芯片 (timer chip) 所产生的中 断呼叫这个驱动程序。如此一来,不管 Linux 系统呼叫的时间有多长都没有关系 了。 

    从这个角度看,NMT RT-Linux 其实是一个实时驱动程序的架构,算不上是真 正的 real-time Linux. 但由于它出现的早,且其架构很符合自动控制的需求。 使用者非常的多,且多半是有关自动控制的应用。 


      RTAI 
      RTAI 是 Real-Time Application Interface 的缩写。顾名思义知道它是一套可 以用来写实时应用程序的界面。大致而言,RTAI 和 NMT RT-Linux 是相同的东西。 它同样的架空了 Linux,而直接用可加载式核心模块( loadable kernel module) 实作 real-time process。每一个实时行程实际上就是一个可加载式核心模块。 

    RTAI 和 NMT RT-Linux 最大的不同地方在于它非常小心的在 Linux 上定义了 一组 RTHAL (Real-Time Hardware Abstraction Layer)。RTHAL 将 RTAI 需要 在 Linux 中修改的部份定义成一组程序界面,RTAI 只使用这组界面和 Linux 沟通。这样做的好处在于我们可以将直接修改 Linux 核心的程序代码减至最小, 这使得将 RTHAL 移植到新版 Linux 的工作量减至最低。 

    RTAI 采取这种途径最大的原因在于 NMT RT-Linux 在由 2.0 版移植至 2.2 版 的过程序遇到问题,使得基于 2.2 版核心的 NMT RT-Linux 一直无法完成。所以 在 Dipartimento di Ingegneria Aerospaziale Politecnico di Milano 的 Paolo Mantegazza 和他的同事们就决定自行做移植的工作,但由 NMT RT-Linux 的困境他们体认到必须采取上述的途径以解决将来可能再度面临的兼容性问题。 

    于是 RTAI 便诞生了,它是一个比 NMT RT-Linux 更好的 NMT RT-Linux,虽 然后来 NMT RT-Linux 也随后完成移植的工作,但那已经是 RTAI 诞生半年以 后的事了。 


      LXRT 
      由于 RTAI 无法直接使用 Linux 的系统呼叫,解决的方法是使用 RT-FIFO 将一个 RTAI real-time kernel module 和真正的 Linux 行程连接在一起,由这个行程做 代理人的工作为其呼叫 Linux 系统呼叫。下图说明了 LXRT proxy 行程的概念 


    红色的部份表示一组 RTAI 的实时行程和它在使用者模式 (user space) 的 伙伴。你可以了解,当 proxy 激活后,它不再可以被任何的抢先 (preempt), 所以原本有的优势就不再保有了。 


      KURT 
      KURT 是由 kansas 大学所创造的系统,它和 NMT RT-Linux 及 RTAI 有很大的不同。KURT 是第一个可以使用系统呼叫的 real-time Linux。由于 KURT只是简单的将 Linux 的排程器用一个很简单的时间驱动式(time driven)排程器加以取代,实时行程的执行很容易很其它非实时行程的影响。 


      RED-Linux 
      这是小弟在下不才我在加州大学 Irvine 分校所做的系统,它和 KURT 类似,是一个 可以使用所以 Linux 系统呼叫的 real-time Linux。它的特点是使用”抢先检查点 (preemption point)”改善系统的反应速度。前面说过 KURT 的最大问题在于它受 限于原有的 Linux 架构,使得系统的反应时间很难控制。然而在 RED-Linux 这一 点已经被大大的改善,由在 2.0 版的经验得知其反应延迟约在 100 us 左右。 

    RED-Linux 非常有弹性的排程器架构也是其特点之一,这部份基本上就是我博士 论文的主轴。它使得 RED-Linux 可以符合各种不同复杂度系统的需求。基本上,它将排程器分成 dispartcher 和 allocator 二部份,dispatcher 在核心中执行而 allocator 在使用者模式执行。allocator 可以是应用程序的一部份,也可以是一个独立的单位。通常它可能是 middleware 的一部份,负责将应用程序的 resource request 转换成 kerner 可以了解的格式。 

    RED-Linux 目前正在进行 POSIX 兼容模式的移植工作,所有 POSIX 中的实时 排程、定时器、sporadic server 等都将会被实作出来。 

    所有这些有关 real-time Linux 的计画都是在 open source 的情况下发展,所以 我们可以预期在将来它们会有某些程度上截长补短的情况出现。前面说过,real-time Linux 主要有二个大类。第一种是 NMT RT-Linux 和 RTAI,它们的实时行程实际上 是一个核心模块。所以它们事实上是一种 real-time 驱动程序,RTAI 和档案系统 及网络系统其实有很相似的结构,差别只是在于其驱动的硬件类别不同而已。 

    而另一方面,如 KURT, Linux/RK 及 RED-Linux 之类的系统则受限于能达到的时 间分辨率。虽然 RED-Linux 已经把这个极限推到 1ms 左右,但我们可以预期在 PC 的架构下要达到 100us 以下是很困难的。也就是说,对于要求 10K 以上频率的应用 是不可能使用这种架构来达成。 

    但这其实是一个很合理的限制,我们可以将二种架构整合成一个系统来满足 所有的需求。LXRT 是一个正确的方向,但如果使用 RED-Linux 和 RTAI 整合 可能更能达成需求。RED-Linux 非常弹性的排程器架构使得整合更行简单。我 希望能在未来半年内推出这个产品,以成为一个终极的 real-time Linux。并 思考如何使整个系统正式的和 Linux 整合以利未来的发展。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值