TenAsys实时操作系统入门
1 INtime体系结构
2 INtime的安装使用
3 INtime试用版3.0例程
作者:sigwell
试用版下载:https://www.doczj.com/doc/4f6474371.html,/Intime
1 INtime体系结构
1.1 INtime概述
目前,人们正在越来越多地选择Microsoft Windows XP 和Windows XP Embedded 操作系统来运行满足某种特定需求的专用应用程序。Windows XP Embedded 与 Windows XP 桌面软件是基于相同的二进制文件,它们在许多方面都是可供选择的最佳平台。但是,当应用需要操作系统提供严格的实时接口和功能时, Windows XP Embedded 和 Windows XP 由于自身的原因而无法满足设计者的要求。
针对这方面的需求,人们已经开发出很多面向 Windows XP 平台添加实时扩展的方案,向Windows XP 内核设备驱动程序级提供某种实时功能,但此类解决方案基本上都没有考虑开发环境的易用性和健壮性,也没有考虑和已有的广泛的Windows应用程序资源共享。
INtime软件不仅能在Windows环境中为应用程序添加时间确定性的行为,而且使那些实时应用程序能够达到健壮、可靠和可伸缩性。TenAsys的设计使INtime能可靠的在Windows系统中运行,且不影响Windows的原来的应用,同时也保证Windows的重大错误不会传递给INtime而导致整个系统崩溃,甚至不影响其他应用程序(它们之间存在显式交互的情形除外)。
TenAsys INtime 软件所采取的方法是在加载 Windows 操作系统的同时加载一个实时操作系统,以便它们共享相同的 CPU 和中断硬件,但在其他方面相互独立。每个操作系统都被封装为一个虚拟机,各自具有自己的描述符表、内存管理等等。当实时活动必须发生时,计算机上下文将切换到该实时操作系统。当这些活动完成后,计算机上下文将切换回Windows 操作系统。因为INtime实时操作系统独立于 Windows 操作系统软件,所以可以增强运行实时进程的环境,以及添加附加功能以提高整个平台的健壮性。
添加INtime实时功能的平台的典型案例是将应用分成两种不同的部分:一些部分不需要实时服务,而利用 Windows XP 平台的功能;另一些部分需要实时内核的实时性能。进程间通讯 (IPC) 服务从实时内核进行扩展,以使 Windows 应用程序能够共享对在实时内核上创建的对象的访问。数据采集应用程序即为一个简单的例子,其中实时进程负责驱动硬件接口和处理收到的数据,而 Windows 进程提供操作员界面并显示结果。这两种进程都可以用 Microsoft Visual Studio 工具开发,其中 C 和 C++ 由实时环境进行支持。
TenAsys Corporation 的 INtime 软件被设计为不仅能够向 Windows 平台添加实时功能,而且其添加这些功能的方式能够为实时应用程序提供可靠且可伸缩的平台。如果将该解
决方案与Windows XP Embedded 配合使用,则能够为您的嵌入式设备提供健壮的、可伸缩的、确定性的操作系统。
1.2 INtime基本架构
INtime 是被设计为与Windows操作系统共享硬件平台的实时操作系统。Windows中安装的组件包括一个Windows内核驱动程序和一些Windows服务。该驱动程序管理用于运行内核和实时应用程序的内存,并且管理这两个系统之间的通讯接口。
一个Windows服务将实时内核加载到已分配的内存中,然后使上下文从 Windows 切换到 INtime内核。INtime将创建一个低优先级线程,用于把Windows的任务压缩后放入该线程。在INtime任务结束以后,该线程负责将计算机上下文切换回 Windows 系统。因为该线程的优先级仅高于INtime Idle线程,低于所有其他实时线程。所以,只要牵涉到Intime 实时内核任务在运行时,Windows任务都是处于等待状态。
在 INtime 上下文时,任何实时中断都被直接处理,并且所有其他中断都被屏蔽。当上下文返回到 Windows 时,非INtime的中断将被解除屏蔽,以使其可以被 Windows 正常处理。当在 Windows 上下文中发生实时中断时,将插入Windows IDT以引起到INtime上下文的上下文切换,以便可以处理中断。
系统计时器通常在 Windows 和 INtime 之间共享。硬件计时器被改编以便按比Windows 要求的速率更高的速率中断,并且只根据需要调用 Windows 处理程序。通常情况下,INtime 内核以高得多的速率(时间间隔可以低至 100μs)获得计时器中断,以便提供更细粒度的计时服务。计时器处理优化能够避免在 Windows 和 INtime 之间进行不必要的上下文切换。另外,Windows某些硬件抽象层 (HAL) 入口点被截获和监控,以防止Windows 内核执行某些不需要的操作,例如屏蔽实时中断或者更改硬件系统计时器频率。INtime不是由通过修改或替换Windows的HAL.DLL文件实现硬件抽象层的入口点截获和监控的,而是通过修改已载入内存中的HAL.DLL实现的。
INtime 内核为实时虚拟机提供操作系统服务。它提供此类内核通常会提供的实时服务,包括一个基于优先级的抢占式调度程序,该程序执行基于优先级的中断处理。线程优先级的范围是从0(最高优先级)到 255(最低优先级),低于可配置的优先级阈值的线程可以与多个具有相同优先级的线程分享其时间片。内核计划程序已经进行优化,以获得最佳的中断性能。
1.3 应用程序环境
INtime 应用程序环境被设计为具有下列功能:
?每个进程都是其他对象(包括线程和物理内存)的容器。由该进程所属线程创建的每个对象都由该进程所有,并且在进程终止时不再存在。
?每个进程都具有一个与其他进程的地址空间隔离的平面虚拟地址空间。进程中的代码以用户模式(IA 权限等级3)执行,从而防止意外访问系统对象和数据。
?每个进程都可以直接访问处理器的输入/输出 (I/O) 空间,而且可以直接访问物理内存。?在任何进程中,都可以通过系统调用以及用户为中断处理程序和线程编写的代码来直接处理中断。
?错误是按进程分别处理的。默认情况下会挂起出错的线程,并且向全局邮箱中写入一个记录。可以更改默认操作,以便能够在出错地址进入静态系统调试器或应用程序调试器。
进程还可以选择获得有关该进程中错误的通知。
?提供了多个 API 以便进程可以使用系统服务。下面的部分中将详细介绍这些 API。
?通过将请求转发给Windows服务以执行所请求的操作,向实时应用程序提供 Windows 服务(对注册表、事件日志和文件系统的访问)。
1.4 实时 API
INtime 内核提供的标准 API 提供了适合于同步和通讯的对象,以及在进程之间(包括INtime 和 Windows 进程之间)共享内存的手段。所有对象都通过句柄引用,并且所有句柄对于实时系统都是全局的。实时 API 提供参数检查和内联状态报告。
?进程(Process)
进程拥有其他对象(包括其他进程)和物理内存。当进程创建时,将向其分配一个内存池,它限制了可以分配给该进程的物理内存的数量。尽管 INtime 内核使用分页硬件进行内存管理,但它并不采用请求调页功能。因此,进程被限制在它可以分配的物理内存量的范围内。
进程还具有对象编录,可以在此命名对象。可以按名称搜索该编录。
?线程(Thread)
线程总是由某个进程所有,并且线程所创建的对象由其进程所有.线程会被分配一个优先级,范围为从0到254,其中0是最高优先级。
?信号量(Semaphores)
这些同步对象由一个线程队列和一个计数器组成,类似于Microsoft Win32 信号量。对象创建时,所有 INtime 线程队列都可以被指定为先入先出(FIFO)队列或优先级队列。如果是FIFO队列,则线程按照等待顺序排队;如果是优先级队列,则线程的排队方式为优先级较高的线程出现在队头。
?区域(Region)
这些对象是单个单元信号量,带有防止优先级颠倒的保护。它们采用标准的优先级提升技术,以避免这种情况。另外,拥有区域的线程不能删除,除非它放弃该区域。这些对象类似于 Win32 临界区。
?邮箱(MailBox)
这些对象由一个线程队列和一个消息队列组成。邮箱可以将两种类型的消息排队。消息可以是其他对象的句柄,也可以是最多包含 128 个字节的数据消息。在 Win32 中没有直接等效的对象。
?堆(Heap)
堆对象类似于 Windows 堆。它为应用程序提供动态内存源。
?其他内存对象
可以为内存区域创建一个句柄,并且随后将该句柄传递给另一个进程以进行映射。然后,可以从这两个进程中访问该内存。
1.5 Windows接口支持
?Win32 API
尽管Win32 API 缺少一些用于实时编程的有用功能,INtime 仍然提供了一个 Win32 API,以便方便地从 Windows 应用程序传输代码。该实现是 Windows CE Win32 实现的丰富子集,包括 Win32 对象的有用子集 (WaitForMultipleObjects),并带有扩展以管理中断和外围设备互联 (PCI) 总线配置。
?Windows API
为 Windows 应用程序提供了 API,以使其能够共享在实时内核上创建的对象。标准的实时对象和 Win32 对象都是可共享的,以便 Windows 和实时应用程序可以同步和共享数据。阻塞调用由实时内核上的代理线程池处理。
? C 库与 C++ 支持
INtime 提供了美国国家标准局(与 ANSI 兼容)的 C 库,以及用标准模板库 (STL) 提供了对 EC++ (Embedded C++) ANSI 标准的支持。
?其他服务
提供了一个传输控制协议/网际协议 (TCP/IP) 的协议组,它派生于 BSD Net3 体系结构。为 Intel、3Com 和 Realtek 接口适配器提供了以太网驱动程序,并且为与 NE2000 兼容的 ISA 接口提供了以太网驱动程序。通过串行线路网际协议 (SLIP) 支持串行链路。以开发工具包的形式提供了 USB 支持,以便开发 USB 客户端软件。为 Universal Host Controller (UHCI)、Open Host Controller (OHCI) 和 Enhanced Host Controller (EHCI) 接口提供了标准驱动程序。为一系列标准接口和行业接口提供了其他驱动程序。
1.6 可靠性功能
INtime 的用于增强可靠性的功能包括针对非灾难性系统错误的异常处理以及Distributed System Manager (DSM) — 它可以监控 INtime 和 Windows 进程,并可以在Windows 操作系统失败时进行检测和提供帮助。
1.6.1异常处理
INtime 内核设计所关注的主要问题之一是提供处理系统异常错误(一般性保护错误、
页面错误、堆栈错误等等)的非灾难性手段,并且尽量减少对实时内核和 Windows 系统的损害。因此,实时系统具有一个默认异常处理程序,该程序会向全局邮箱中写入一个记录,详细描述出错的线程及其环境,然后挂起出错的线程。可以从 INtime 或 Windows 系统中监控该邮箱,并且存在可以从错误记录中提取信息(包括寄存器转储、堆栈跟踪和相关调试信息)的工具。
1.6.2 分布式系统管理
Distributed System Manager(“DSM”)是一个协作性多进程应用程序,用于管理整个INtime 系统。任何进程(Windows 或 INtime)都可以选择监控任何其他参与协作的进程,或者被其他参与协作的进程监控。如果被监控的进程被删除,或者到该进程的通讯途径被中断,或者 Windows 系统或 INtime 系统被破坏,都会向监控进程发送通知消息。可以使用该服务来提供系统级完整性。
1.6.3 Windows 停止处理
DSM 的一个重要优点是它能够检测到 Windows 平台何时失败。如果出现这种情况,INtime 内核中的 DSM 软件将通知所有参与的进程 Windows 已经失败,并且还将负责调度 Windows 的线程挂起。此时,INtime 内核可以继续无限期地执行其进程,而这些进程可以选择在此情况下采取特殊操作,例如使外围设备进入已知状态。在稍后某个时刻,实时进程可以选择恢复 Windows 线程,并使 Windows 可以继续关闭和重置计算机。
1.7 可伸缩性功能
INtime 操作系统能够支持复杂的大型应用程序。在上述共享体系结构中,已经发现典型的平台能够允许 INtime 内核消耗 CPU 带宽的 50% 到 60%,然后 Windows 图形用户界面 (GUI) 和其他服务才会开始受到不利影响。INtime 中独立内核的优势是可以将它重定位到另一 CPU 或另一平台,从而使应用程序能够随着其对平台的需求的增加而扩大规模。接口模式将从虚拟机体系结构更改为共享内存,然后又更改为物理通讯链路(如以太网或串行线路),但 Windows 和实时应用程序之间的软件接口不会改变。这样,无论选择了哪种硬件体系结构,都可以使用相同的二进制文件。
2 INtime的安装使用
2.1 INtime的安装
首先安装Windows XP,然后安装Visual Studio .NET,最后安装INtime开发环境。安装完成后重新启动计算机。INtime支持Visual C++ 6、Visual https://www.doczj.com/doc/4f6474371.html, 2003、Visual https://www.doczj.com/doc/4f6474371.html, 2005和Visual https://www.doczj.com/doc/4f6474371.html, 2005。因为软件版本更新的原因,本手册的截图部分来源于VC6,部分来源于https://www.doczj.com/doc/4f6474371.html, 2005开发环境。
注意:安装INtime时,奇虎360需要做暂时关闭。
2.2 INtime的使用
2.2.1 启动INtime开发环境
(1)点击“开始”-“Microsoft Visual Studio 2005”-“Visual Studio 2005”,打开Visual Studio 2005开发环境。
(2)选择“文件”-“新建…”菜单,弹出“新建项目”对话窗口。在“INtime Projects”标签下出现3个INtime模板项,它们分别用于建立INtime应用程序、INtime共享库和INtime 静态库。
(3)选择APPlication Wizard,指定文件位置。
2.2.2 开发INtime应用程序
(1)INtime Application Wizard对话框。对话框中从上到下的5个选择项: 建立一个最基本的工程
建立一个“Hello World”例程的应用
一个极小化的iWin32应用程序
一个全特性的应用
自动产生的代码采用C++
(2)建立基本工程
(3)建立Hello World工程
(4)建立iWin32工程
(5)建立全特性应用
2.2.3 开发INtime共享库
INtime共享库以RSL作为文件后缀,是以函数为基本模块组成的。它类似Windows DLL 文件,Windows相应程序例子可作为开发参考。
RSL的优点:
?多个常用函数组成RSL组件,无需每次编译,使用时只需更换RSL文件和相应的头文件。
?许多实时进程经常调用的函数RSL化而使代码共享,不同的进程不再需要同样代码,因此各进程较小。
?对于应用程序的动态RSL加载,由应用程序自行判断选择所使用的RSL文件。
RSL代码的编写和普通INtime的代码编写是相同的。编写完成后,和INtime应用一样编译。
下图是上面的例子直接编译成功后生成的文件。“*.lib”、“*.rsl”、“*.h”文件在被使用时是必须的。
RSL文件有两种使用方式,静态加载和动态加载。
?静态加载
在生成应用程序时,把所使用的RSL文件的StaticLLibrary部份(.LIB)预先链接到应用。在加载 (Load)时,RTA应用文件跟目标RSL文件自动地链接成为可使用的状态。
如果应用启动时,RSL文件在设定路径上不存在的话,加载失败。
RSL加载检索的路径查找策略:
(1)HKEY_LOCAL_MACHINE\SOFTWARE\TenAsys\INtime\RTAppLoader\RSLPath的参数值指示的目录路径(Directory)。
(2)(INtime安装目录路径) \rt\lib目录
(3)(INtime安装目录路径) \ bin目录
(4)跟RTA文件存在同样的文件夹(支持INtime3.04及以后版本)
RSL的静态加载方法:
(1)RSL使用时需把RSL的相关头文件放入应用代码的引用(include)部分。
(2)把RSL项目生成的lib文件链接于应用项目。设置位置在主菜单的“项目”-“RSL 属性”中。
?动态加载
动态加载是RTA应用通过API调用,加载目的RSL文件。RTA应用取得RSL被调用函数地址后执行RSL中目标函数。
动态加载不需要链接RSL文件的Static Library部份(.LIB)。
RSL的动态加载方法:
(1)RSL文件的动态加载是应用代码用如下API函数而在应用中加载.
LoadRtLibrary
GetRtProcAddress
GetRtModuleHandle
FreeRtLibrary
(2)动态加载时,如果没有指定路径,按照如下过程检索RSL文件。
(INtime安装目录路径) \rt\lib目录
(INtime安装目录路径) \ bin目录
2.2.3 开发INtime静态库
INtime静态库类似Windows LIB文件,它没有模板内容,用户只需要把一个个目标文件组合成库文件。Static Library仅限INtime3.1版本之后。
2.3 INtime配置面板
2.3.1 INtime配置面板启动
INtime配置面板用于配置INtime内核和INtime开发环境。用户可以通过两种方法访问INtime配置面板,一种是直接在控制面板中直接执行INtime配置程序,另一种方法是通过在桌面的小托盘中右键选择INtime图标,执行“INtime Configuration”程序。
无论采用哪种启动方法,启动INtime配置面板程序后,出现以下窗口。
2.3.2 AutoLoad配置
AutoLoad设定Intime启动后自动加载的程序。用户可以把自己的应用程序放到这里自动运行。下图增加INtime自带的Helloword例程,并使能它。因USB没有使能,所以重启INtime后没有运行。
“HelloWorld”例程重启后自动运行。
通过Intime Explorer工具可以查看进程和线程状态,与配置相符。
2.3.3 Development Tools配置
该配置主要用于安装和卸载Visual Studio开发工具。
2.3.4 Local Kernel配置
Local Kernel主要用于配置INtime内核参数。
(1) K ernel Service Configuration:配置INtime内核是否自动启动。
(2) K ernel Parameters:配置INtime内核运行中的各种参数。
Kernel Clock Rate(in us):指定两个系统时钟的间隔,范围从100us至10000us。
默认为500us。
OS Extensions:指定OS可用扩展,可取0-128,默认为24。
GDT Slots:OS可用的GDT Slot。
Round Robin Priority Threshold:指定INtime用户线程的最高优先级,可取128-254,默认140。
Round Robin Time Slice(in ms):指定同等优先级的任务的执行时间,以ms计算。
可取10-100之间10的整数倍的任何数,默认50。
Max Concurrent NTX Requests:允许NTX同时的最大连接数,默认16,可取8-32。
Time of Day Update(in seconds):INtime内核时间的更新,设置过小过于消耗系统资源。
Time Zone(Posix Format):操作系统POSIX接口的时标格式。
Standby Power Option:StandBy命令处理的两种选择。
Hibernate Power Option:Hibernate命令处理的两种选择。
Autoload Spin Control:自动加载Spin线程。Spin负责监控INtime运行状态,具有调试INtime应用的功能。
Spin Control Threshold(x10ms):Spin处理的间隔时间。
Default Vseg Size(in Mbytes):默认段的大小。
Multi-processor CPU Mode:在多核模式中,指定INtime是独立占用一个CPU,还是和Windows共享CPU。
(3) I/O:用于设置调试端口和波特率,CONSOLE用于仿真。
(4) I Ntime Memory:定义Windows为INtime保留的内存大小,默认值为16MB,最大允许128MB。
(5) A dvance Setting:用于INtime应用的高级设置,可设置的内容包含CLIB、DNS、ETHO、IP、IWIN32、LOO、RIP、SPIN、TCP、UDP等,用户也可以定义新的参数。
2.3.5 Real-time Network配置
网络配置部分按照物理层、传输层和IP层分别设定。传输层和IP层调用INtime自带的驱动,用户仅需要设定物理层(NIC)。
2.3.6 Remote Node Builder
设定本地和远端节点文件。
Remote的NIC配置和本地的NIC配置相同,配置完成后修改节点设置“Node Settings”,Build构造Remote的无Windows启动盘。
构造的Remote启动盘文件。
2.3.7 Remote NTX Connections配置
2.3.8 Miscellaneous INtime Settings配置
2.3.9 INtime Device Manager
8139D网卡在Pass to INtime之前,Windows系统自动安装驱动。通过Intime Device Manager可以查看设备。
选择鼠标右键或菜单中的“Pass to INtime”。
8139网卡已转到INtime系统下,重启系统。
windows设备管理器中的8139网卡信息。
实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图
2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;
四种实时操作系统特性进行分析和比较 https://www.doczj.com/doc/4f6474371.html,2006年11月18日21:55ChinaByte 本文对四种实时操作系统(RTOS)特性进行分析和比较。它们是:Lynx实时系统公司的LynxOS、QNX软件系统有限公司的QNX以及两种具有代表性的实时Linux——新墨西哥工学院的RT-Linux和堪萨斯大学的KURT-Linux。 近年来,实时操作系统在多媒体通信、在线事务处理、生产过程控制、交通控制等各个领域得到广泛的应用,因而越来越引起人们的重视。 基本特征概述 *QNX是一个分布式、嵌入式、可规模扩展的实时操作系统。它遵循POSIX.1 (程序接口)和POSIX.2(Shell和工具)、部分遵循POSIX.1b(实时扩展)。它最早开发于1980年,到现在已相当成熟。 *LynxOS是一个分布式、嵌入式、可规模扩展的实时 操作系统,它遵循POSIX.1a、POSIX.1b和POSIX.1c标准。它最早开发于1988年。 *RT-Linux是一个嵌入式硬实时操作系统,它部分支持POSIX.1b标准。 *KURT-Linux不是为嵌入式应用设计的,不同于硬(hard)实时/软(soft)实时应用,他们提出“严格(firm)”实时应用的概念,如一些多媒体应用和ATM网络应用,KURT是为这样一些应用设计的“严格的”实时系统。 体系结构异同 实时系统的实现多为微内核体系结构,这使得核心小巧而可靠,易于ROM固化,并可模块化扩展。微内核结构系统中,OS服务模块在独立的地址空间运行,所以,不同模块的内存错误便被隔离开来。但它也有弱点,进程间通信和上下文切换的开销大大增加。相对于大型集成化内核系统来说,它必须靠更多地进行系统调用来完成相同的任务。 *QNX是一个微内核实时操作系统,其核心仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理,其进程在独立的地址空间运行。所有其它OS服务,都实现为协作的用户进程,因此QNX核心非常小巧(QNX4.x大约为12Kb)而且运行速度极快。 *LynxOS目前还不是一个微内核结构的操作系统,但它计划使用所谓的“Galaxy”技术将其从大型集成化内核改造成微内核,这一技术将在LynxOS 3.0中引入。新的28Kb微内核提供以下服务:核心启动和停止、底层内存管理、出错处理、中断处理、多任务、底层同步和互斥支持。
John Lee
John Lee
第一章: 1. 什么是操作系统?OS的基本特性是?主要功能是什么 OS是控制和管理计算机硬件和软件资源,合理组织计算机工作原理以及方程用户的功能的集合。特性是:具有并发,共享,虚拟,异步的功能,其中最基本的是并发和共享。主要功能:处理机管理,存储器管理,设备管理,文件管理,提供用户接口。 2. 操作系统的目标是什么?作用是什么? 目标是:有效性、方便性、可扩充性、开放性 作用是:提供用户和计算机硬件之间的接口,提供对计算机系统资源的管理,提供扩充机器 3. 什么是单道批处理系统?什么是多道批处理系统? 系统对作业的处理是成批的进行的,且在内存中始终保持一道作业称此系统为单道批处理系统。 用户所提交的作业都先存放在外存上并排成一个队列,然后,由作业调度程序按一定的算法从后备队列中选择若干个调入作业内存,使他们共享CPU和系统中的各种资源。 4 ?多道批处理系统的优缺点各是什么? 优点:资源利用率高,系统吞吐量大。缺点:平均周转时间长,无交互能力。 引入多道程序技术的前提条件之一是系统具有终端功能,只有有中断功能才能并发。 5. 什么是分时系统?特征是什么? 分时系统是指,在一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户通过自己的终端,以交互的方式使用计算机,共享主机中的资源。 特征:多路性、独立性、及时性、交互性 *有交互性的一般是分时操作系用,成批处理无交互性是批处理操作系统,用于实时控制或实时信息服务的是实时操作系统,对于分布式操作系统与网络操作系统,如计算机之间无主次之分就是分布式操作系统,因为网络一般有客户-服务器之分。 6. 什么是实时操作系统? 实时系统:系统能及时响应外部事件的请求,在规定的时间内处理完。按照截止时间可以分为1硬实时任务(必须在截止时间内完成)2软实时任务(不太严格要求截止时间) 7用户与操作系统的接口有哪三种? 分为两大类:分别是用户接口、程序接口。 用户接口又分为:联机用户接口、脱机用户接口、图形用户接口。 8. 理解并发和并行?并行(同一时刻)并发(同一时间间隔) 9. 操作系统的结构设计 1 ?无结构操作系统,又称为整体系统结构,结构混乱难以一节,调试困难,难以维护 2?模块化os结构,将os按功能划分为一定独立性和大小的模块。是os容易设计,维护, 增强os的可适应性,加速开发工程 3?分层式os结构,分层次实现,每层都仅使用它的底层所提供的功能 4. 微内核os结构,所有非基本部分从内核中移走,将它们当做系统程序或用户程序来实现,剩下的部分是实现os核心功能的小内核,便于扩张操作系统,拥有很好的可移植性。 第二章: 1 ?什么叫程序?程序顺序执行时的特点是什么? 程序:为实现特殊目标或解决问题而用计算机语言编写的命令序列的集合特点:顺序性、封闭性、可再现性 2. 什么是前趋图?(要求会画前趋图)P35图2-2 前趋图是一个有向无循环图,记为DAG ,用于描述进程之间执行的前后关系。 3?程序并发执行时的特征是什么? 特征:间断性、失去封闭性、不可再现性
实时操作系统课程实验报告 专业:通信1001 学号:3100601025 姓名:陈治州 完成时间:2013年6月11日
实验简易电饭煲的模拟 一.实验目的: 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,基于多任务的模式的编程方法。锻炼综合应用多任务机制,任务间的通信机制,内存管理等的能力。 二.实验要求: 1.按“S”开机,系统进入待机状态,时间区域显示当前北京时间,默认模式“煮饭”; 2.按“C”选择模式,即在“煮饭”、“煮粥”和“煮面”模式中循环选择; 3.按“B”开始执行模式命令,“开始”状态选中,时间区域开始倒计时,倒计时完成后进入“保温”状态,同时该状态显示选中,时间区域显示保温时间; 4.按“Q”取消当前工作状态,系统进入待机状态,时间区域显示北京时间,模式为当前模式; 5.按“X”退出系统,时间区域不显示。 6.煮饭时长为30,煮粥时长为50,煮面时长为40. 三.实验设计: 1.设计思路: 以老师所给的五个程序为基础,看懂每个实验之后,对borlandc的操作有了大概的认识,重点以第五个实验Task_EX为框架,利用其中界面显示与按键扫描以及做出相应的响应,对应实现此次实验所需要的功能。 本次实验分为界面显示、按键查询与响应、切换功能、时钟显示与倒计时模块,综合在一起实验所需功能。 2.模块划分图: (1)界面显示: Main() Taskstart() Taskstartdispinit() 在TaskStartDispInit()函数中,使用PC_DispStr()函数画出界面。
(2)按键查询与响应: Main() Taskstart() 在TaskStart()函数中,用if (PC_GetKey(&key) == TRUE)判断是否有按键输入。然后根据key 的值,判断输入的按键是哪一个;在响应中用switch语句来执行对应按键的响应。 (3)切换功能: l计数“C”按 键的次数 M=l%3 Switch(m) M=0,1,2对应于煮饭,煮粥,煮面,然后使用PC_DispStr()函数在选择的选项前画上“@”指示,同时,在其余两项钱画上“”以“擦出”之前画下的“@”,注意l自增。 四.主要代码: #include "stdio.h" #include "includes.h" #include "time.h" #include "dos.h" #include "sys/types.h" #include "stdlib.h" #define TASK_STK_SIZE 512 #define N_TASKS 2 OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; OS_STK TaskStartStk[TASK_STK_SIZE]; INT8U TaskData[N_TASKS];
中南大学信息科学与工程学院实验报告 姓名:安磊 班级:计科0901 学号: 0909090310
指导老师:宋虹
目录 课程设计内容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------6 文件系统的层次结构和功能模块 ---------------------6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录-------------------------------------------------- 12
课程设计内容 在uC/OS操作系统中增加一个简单的文件系统。 要求如下: (1)熟悉并分析uc/os操作系统 (2)设计并实现一个简单的文件系统 (3)可以是存放在内存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4)编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I.uC/OS操作系统简介 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全 可以由用户自己根据需要分别实现。 uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 uC/OS操作系统的组成 μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。如下图:
计算机操作系统期末复习题 声明:本题库容仅供参考 注:1-简单2-一般3-较难4-难 第一部分操作系统基本概念 一、选择题(选择最确切的一个答案,将其代码填入括号中) 1、操作系统是一种()。 A、应用软件 B、系统软件 C、通用软件 D、工具软件 答案-1:B 2、计算机系统的组成包括()。 A、程序和数据 B、处理器和存 C、计算机硬件和计算机软件 D、处理器、存储器和外围设备 答案-1:C 3、下面关于计算机软件的描述正确的是()。 A、它是系统赖以工作的实体 B、它是指计算机的程序及文档 C、位于计算机系统的最外层 D、分为系统软件和支撑软件两大类 答案-2:B 4、财务软件是一种()。 A、系统软件 B、接口软件 C、应用软件 D、用户软件 答案-2:C 5、世界上第一个操作系统是()。 A、分时系统 B、单道批处理系统 C、多道批处理系统 D、实时系统 答案-1:B 6、批处理操作系统提高了计算机的工作效率,但()。 A、系统资源利用率不高 B、在作业执行时用户不能直接干预 C、系统吞吐量小 D、不具备并行性 答案-3:B 7、引入多道程序的目的是()。 A、为了充分利用主存储器 B、增强系统的交互能力
C、提高实时响应速度 D、充分利用CPU,减少CPU的等待时间 答案-3:D 8、在多道程序设计的计算机系统中,CPU()。 A、只能被一个程序占用 B、可以被多个程序同时占用 C、可以被多个程序交替占用 D、以上都不对 答案-2:C 9、多道程序设计是指()。 A、有多个程序同时进入CPU运行 B、有多个程序同时进入主存并行运行 C、程序段执行不是顺序的 D、同一个程序可以对应多个不同的进程 答案-3:B 10、从总体上说,采用多道程序设计技术可以()单位时间的算题量,但对每一个算题,从算题开始到全部完成所需的时间比单道执行所需的时间可能要()。 A、增加减少 B、增加延长 C、减少延长 D、减少减少 答案-4:B 11、允许多个用户以交互使用计算机的操作系统是()。 A、分时系统 B、单道批处理系统 C、多道批处理系统 D、实时系统 答案-2:A 12、下面关于操作系统的叙述正确的是()。 A、批处理作业必须具有作业控制信息 B、分时系统不一定都具有人机交互功能 C、从响应时间的角度看,实时系统与分时系统差不多 D、由于采用了分时技术,用户可以独占计算机的资源 答案-3:A 13、操作系统是一组()。 A、文件管理程序 B、中断处理程序 C、资源管理程序 D、设备管理程序 答案-1:C 14、现代操作系统的两个基本特征是()和资源共享。 A、多道程序设计 B、中断处理 C、程序的并发执行 D、实现分时与实时处理 答案-1:C 15、()不是操作系统关心的主要问题。 A、管理计算机裸机
第二章操作系统的基本原理 一、本章需要熟练掌握的内容 1、计算机四大系统资源的管理机制:处理器、存储器、外围设备和文件四大资源的管理。 注重对基本概念的理解: 2、进程 (1)、进程是指一个可并发执行的程序(或程序段)在给定的工作空间和数据集合上的一次执行过程。它是操作系统进行资源分配和调度的一个独立或基本单位。 (2)、进程是动态的,它由操作系统创建并独立地执行,在执行过程中可能因某个条件不足而被暂时“阻塞”,当条件满足时又被“唤醒”并继续执行,直到任务完成而“撤销”。因此,进程有生命期,并在不同的状态之间动态地转换。 (3)、进程的并发特征是指一个进程能和其它进程并行执行,但各进程在逻辑上又相对独立,同时各进程的执行速度是不可预知的、异步的。因此,系统必须为进程提供同步机构,以确保进程能协调操作和共享资源。 (4)、一个进程至少要对应一个或多个程序。不同的进程可以调用同一个程序,但该程序必须在不同的数据集合上执行。 (5)、程序和进程的关系在于:程序是指令的有序集合,是静态的。程序的执行过程才是进程。 3、线程:在现代操作系统中,为了进一步提高进程的并发性,引入了线程(Thread)的概念。简单地说,一个进程可以包含多个线程,此时线程成为处理器调度的基本单位。 4、页式存储: 页式存储基本原理是预先把内存物理空间分成大小相等的存储“块”,比如每块为1k字节,并编上号码,同时把要运行程序的逻辑地址空间分成与“块”大小相同的“页”,也编上号码。
当把程序调入内存时,恰好把程序的某一“页”装入内存某一“块”,而且可以见缝插针地将若干连续的页装入分散的不连续的块中。由于页和块大小相等,所以除了最后一页可能小于块之外,其余都很合适,这样每一个内存碎片的大小不会超过一“块”的大小。 页式虚拟存储就是把内存和外存作为一个整体连续起来划分成块。在一个进程运行前,不必将其所有页装入内存,而只需先装入当前要运行的若干页。 在运行过程中。一旦发现所需要的程序页不在内存时,便请求系统分配存储块,然后将所需页从外存调入,并在页表中登录新调入的页号与对应的块号。这一调度过程在操作系统控制下自动实现的,用户无须干预。 5、虚拟存储: 当所运行进程需要较大的内存空间,而内存空间又有限时,存储管理提供虚拟存储的功能,将内存和大容量外存有机地结合起来,建立虚拟内存(VM:Virtual Memory),从而大大地扩展程序可运行空间。 虚拟存储的概念可从两个角度来理解。从逻辑存储空间角度看,程序的大小不定,经过编译连接后的目标程序地址多是从零地址开始的一维连续或二维段页式地址。这是一种虚拟地址或逻辑地址,它们都不是程序运行时的真正物理地址。我们把程序逻辑地址的全体所对应的存储器称为虚拟存储器,简称虚存。虚存地址空间大小有可能会超过实际物理内存空间。 从程序设计者角度看,虚拟存储器就是把内存和外存作为一个整体连续起来划分,当内存空间不足时,参与当前运行的部分程序可以暂存在外存中,一旦需要及时调入内存,而已经在内存中的部分程序目前可能不再使用,可以保存到外存。这样程序设计者不必忧虑内存是否够用,因为有巨大容量的外存可供使用。虚拟存储管理的工作就是及时恰当地调入调出当前程序,为进程提供“透明”的存储空间。 6、段式存储管理: 段式存储把其地址空间在逻辑上划分成若干个段(segment),如代码段、数据段、共享段等,这时用户程序的逻辑地址空间可以看成二维空间,其中一维是段号,另一维是段内从0开始的地址。利用连续可变分区或可重定位分区管理方式,为每一个段分配一个连续分区,而各段之间可以不连续。“段”成为程序的逻辑单位,它是由程序设计人员规定的,其长度随程序的不同而不同。
实时操作系统期末总结报告 一、实时操作系统的概述 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,并控制所有实时任务协调一致运行的操作系统。因而,提供及时响应和高可靠性是其主要特点。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。 1.1.实时操作系统的相关概念 (1)实时操作系统的定义 实时操作系统是保证在一定时间限制内完成特定功能的操作系统。例如人驾驶的汽车中的系统,需要一个比较稳定的实时操作系统。在“硬”实时操作系统中,如果不能在允许时间内完成使物体可达的计算,操作系统将因错误结束。在“软”实时操作系统中,比如汽车不能很快的识别人的操作指令,那么它可能造成严重的事故(如:汽车的瞬时刹车;公交车,它能准确的报站,这其实就是一个实时操作系统的具体体现;其次,车上的GPS导航仪,其实质也是一个比较精确实时操作系统的产物,如果不能实时,那么导航仪将失效,结果不能正确的指导司机驾驶的方向,同时这种实时操作系统的及时性必须达到一定的程度:ms级)。一些实时操作系统是为特定的应用
设计的,另一些是通用的。一些通用目的的操作系统称自己为实时操作系统。但某种程度上,大部分通用目的的操作系统,如微软的Windows NT或IBM的OS/390有实时系统的特征。这就是说,即使一个操作系统不是严格的实时系统,它们也能解决一部分实时应用问题。 (2)实时操作系统中的一些重要的概念 代码临界段:指处理时不可分割的代码。一旦这部分代码开始执行则不允许中断打入; 资源:任何为任务所占用的实体; 共享资源:可以被一个以上任务使用的资源; 任务:也称作一个线程,是一个简单的程序。每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。典型地,每个任 务都是一个无限的循环,每个任务都处在以下五个状态下:休眠 态,就绪态,运行态,挂起态,被中断态; 任务切换:将正在运行任务的当前状态(CPU寄存器中的全部内容)保存在任务自己的栈区,然后把下一个将要运行的任务的当前状态从该任 务的栈中重新装入CPU的寄存器,并开始下一个任务的运行; 内核:负责管理各个任务,为每个任务分配CPU时间,并负责任务之间通讯。分为不可剥夺型内核和可剥夺型内核; 调度:内核的主要职责之一,决定轮到哪个任务运行。一般基于优先级调度法; (3)及时性 关于实时操作系统的及时性,我将从如下两个方面进行介绍:实时操作系统的时间限和实时操作系统的应用相关。 时间限:对一些实时性要求较高的系统,它们要求的时间限一般是毫秒级(ms),但是通常的实时操作系统,一般是秒级(s)或是在
第一章习题及答案 一、填空题 1.用户与操作系统的接口有,两种。 【答案】命令接口,系统调用 【解析】按用户界面的观点,操作系统是用户与计算机之间的接口。用户通过操作系统提供的服务来有效地使用计算机。一般操作系统提供了两类接口为用户服务,一种是程序一级的接口,即通过一组广义指令(或称系统调用)供用户程序和其他系统程序调用;另一种是作业一级的接口,提供一组控制命令供用户去组织和控制自己的作业。 2.用户程序调用操作系统有关功能的途径是。 【答案】利用系统调用命令 【解析】系统调用命令是操作系统专门给编程人员提供的调用操作系统有关功能的途径,一般在汇编语言和C语言中都提供了使用系统调用命令的方法。编程人员可以在这些语言中利用系统调用命令动态请求和释放系统资源。 3.UNIX系统是①操作系统,DOS系统是②操作系统。 【答案】①分时(或多用户、多任务),②单用户(或单用户、单任务) 【解析】 UNIX系统是一个可供多个用户同时操作的会话式的分时操作系统,DOS系统是为个人计算机设计的一个单用户操作系统。 4.现代计算机中,CPU工作方式有目态和管态两种。目态是指运行①程序,管态是指运行②程序。执行编译程序时,CPU处于③。 【答案】①用户,②操作系统,③目态 【解析】 CPU工作方式分为目态和管态,主要是为了把用户程序和操作系统程序区分开,以利于程序的共享和保护。 5.从资源分配的角度讲,计算机系统中的资源分为处理机、、和。操作系统相应的组成部分是、、和。 【答案】处理机、存储器、输入/输出设备和文件资源;处理机管理、存储器管理、设备管理和文件系统 【解析】计算机系统中的资源分为硬件资源和软件资源。硬件资源有处理机、内/外存储器及输入/输出设备。而软件资源指的是程序、数据和相应的文档。从资源管理的观点,操作系统是计算机资源系统的管理系统,它提供了处理机管理、存储器管理、输入/输出设备管理和信息文件管理的功能。对每种资源的管理都可从提供资源情况的记录、资源分配策略、资源分配和回收等几个方面来加以讨论。 6.根据服务对象不同,常用的单处理机OS可以分为如下三种类型: 允许多个用户在其终端上同时交互地使用计算机的OS称为①,它通常采用②策略为用户服务; 允许用户把若干个作业提交计算机系统集中处理的OS,称为③,衡量这种系统性能的一个主要指标是系统的④; 在⑤的控制下,计算机系统能及时处理由过程控制反馈的数据并作出响应。设计这种系统时,应首先考虑系统的⑥。 【答案】①分时OS,②时间片轮转,③批处理OS,④吞吐率,⑤实时OS,⑥实时性和可靠性 【解析】分时操作系统、批处理操作系统和实时操作系统是操作系统的三种基本类型。分时系统一般采用时间片轮转的办法,使一台计算机同时为多个终端用户服务,对每个用户都能保证足够快的响应时间,并提供交互会话能力;批处理系统则是把用户提交的作业(包括程序、数据和处理步骤)成批输入计算机,然后由作业调度程序自动选择作业运行,从而缩短了作业之间的交接时间,减少了处理机的空闲等待,提高了系统效率;实时系统是操作系统的另一种类型,要求对外部输入的信息能以足够快的速度进行处理,并在被控对象允许的时间范围内作出快速响应,其响应时间要求特别高。由于实时系统大部分是为特殊的实时任务设计的,这类任务对系统的可靠性和安全性要求很高。
一.什么是真正的实时操作系统 做嵌入式系统开发有一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks,实际应用后回过头来看理论,才发现自己理解的肤浅,也发现CSDN 上好多同学们都对实时、嵌入式这些概念似懂非懂,毕竟如果不做类似的产品,平时接触的机会很少,即使做嵌入式产品开发,基本也是只管调用Platformteam封装好的API。所以在此总结一下这些概念,加深自己的理解,同时也给新手入门,欢迎大家拍砖,争取写个连载,本文先总结一下实时的概念,什么是真正的实时操作系统? 1. 首先说一下实时的定义及要求: 参见 Donal Gillies 在 Realtime Computing FAQ 中提出定义:实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果未满足系统的时间约束,则认为系统失效。
一个实时操作系统面对变化的负载(从最小到最坏的情况)时必须确定性地保证满足时间要求。请注意,必须要满足确定性,而不是要求速度足够快!例如,如果使用足够强大的CPU,Windows在CPU空闲时可以提供非常短的典型中断响应,但是,当某些后台任务正在运行时,有时候响应会变得非常漫长,以至于某一个简单的读取文件的任务会长时间无响应,甚至直接挂死。这是一个基本的问题:并不是Windows不够快或效率不够高,而是因为它不能提供确定性,所以,Windows不是一个实时操作系统。 根据实际应用,可以选择采用硬实时操作系统或软实时操作系统,硬实时当然比软实时好,但是,如果你的公司正在准备开发一款商用软件,那请你注意了,业界公认比较好的VxWorks(WindRiver开发),会花光你本来就很少的银子,而软实时的操作系统,如某些实时Linux,一般是开源免费的,我们公司本来的产品就是基于VxWorks的,现在业界都在CostReduction,为了响应号召,正在调研如何把平台换成免费的嵌入式实时Linux。同学们,如何选择,自己考虑吧:-)
嵌入式实时操作系统实验报告 任务间通信机制的建立 系别计算机与电子系 专业班级***** 学生姓名****** 指导教师 ****** 提交日期 2012 年 4 月 1 日
一、实验目的 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,任务使用信号量的一般原理。掌握在基于优先级的可抢占嵌入式实时操作系统的应用中,出现优先级反转现象的原理及解决优先级反转的策略——优先级继承的原理。 二、实验内容 1.建立并熟悉Borland C 编译及调试环境。 2.使用课本配套光盘中第五章的例程运行(例5-4,例5-5,例5-6),观察运行结果,掌握信号量的基本原理及使用方法,理解出现优先级反转现象的根本原因并提出解决方案。 3.试编写一个应用程序,采用计数器型信号量(初值为2),有3个用户任务需要此信号量,它们轮流使用此信号量,在同一时刻只有两个任务能使用信号量,当其中一个任务获得信号量时向屏幕打印“TASK N get the signal”。观察程序运行结果并记录。 4. 试编写一个应用程序实现例5-7的内容,即用优先级继承的方法解决优先级反转的问题,观察程序运行结果并记录。 5.在例5-8基础上修改程序增加一个任务HerTask,它和YouTask一样从邮箱Str_Box里取消息并打印出来,打印信息中增加任务标识,即由哪个任务打印的;MyTask发送消息改为当Times为5的倍数时才发送,HerTask接收消息采用无等待方式,如果邮箱为空,则输出“The mailbox is empty”, 观察程序运行结果并记录。 三、实验原理 1. 信号量 μC/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的等待任务表。用户要在OS_CFG.H中将OS_SEM_EN开关量常数置成1,这样μC/OS-II 才能支持信号量。
51单片机实时操作系统 作者:徐少伟日期:2013年12月07日 摘要本文着重介绍了运行在51单片机上基于片轮询式实时操作系统RTOS的构建,讨论了实时操作系统的运行原理和设计思路。关键词:51单片机、片轮询、实时操作系统RTOS 1前言 随着计算机技术的发展,计算机已经被广泛地应用到各个领域中。而在控制领域,人们更多地关心计算机的低成本、小体积、运行的可靠性和控制的灵活性。特备是智能仪表、智能传感器、智能家电、智能办公设备、汽车及军事电子设备等应用系统要求计算机嵌入这些设备中。而作为嵌入式计算机的单片机因其体积小、可靠性高、控制功能强以及非凡的嵌入式应用形态,使得单片机应用技术已经成为电子应用系统设计中最为常用的技术手段。 在工业控制方面,因工业环境对计算机的可靠性和实时性的要求特别高,而诸如51系列的单片机的片上资源比较有限,因此开发并构建一种应用于单片机上的实时多任务操作系统已成为一种迫切的需求。 2实时操作系统设计概述2.1实时多任务操作系统(RTOS)简介 过去一个单片机应用程序所控制的任务和外设不多,采用一个主程序和几个子程序模块的调用,即可满足要求。但随着应用的复杂化,对单片机软件提出了更高的要求。一个控制器系统可
能需要同时控制或监控很多外设,要求有实时响应;有很多处理的任务,各种任务之间有信息的传递。如果仍采用原来的程序设计方法,将会存在两个问题。一是中断可能得不到及时响应,处理时间过长。二是系统任务多,要考虑的各种可能也多,各种资源如调度不当就会发生死锁,降低软件的可靠性,程序编写的任务量成指数增加。 实时操作系统是一段系统启动后首先执行的背景程序,用户的应用程序是运行在RTOS之上的各个任务。RTOS根据各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度、异常处理等工作。 实时多任务操作系统,以分时方式运行的多个任务,看上去好像是多个任务“同时”运行。标准的RTOS应具有任务调度、中断处理、事件管理、定时器管理、循环队列管理、资源管理、存储管理、自动掉电管理等功能,基于优先服务方式的RTOS才是真正的实时操作系统。 本文主要讨论了基于时间分片轮询方式,即片轮询方式的多任务操作系统,重点介绍多任务实时操作系统的原理和构建方法,为深入研究真正意义上的实时多任务操作系统RTOS奠定一定的理论和思想基础。 2.2实时多任务操作系统(RTOS)任务切换 在实时操作系统RTOS中,任务的切换方式有三种:协同方式、时间片轮询方式以及抢占优先级方式。 2.2.1协同方式 所谓“协同方式”,是指一个任务在持续运行而不释放资源,其他任务是没有机会获得运行
实验报告 实验课程名称:操作系统 实验地点:南主楼七楼机房 2018—2019学年(一)学期 2018年 9月至 2019 年 1 月 专业: 班级: 学号: 姓名: 指导老师:刘一男
实验一 实验项目:分时系统模拟 实验学时:2实验日期: 2018-10-25 成绩: 实验目的利用程序设计语言模拟分时系统中多个进程按时间片轮转调度算法进行进程调度的过程; 假设有五个进程A,B,C,D,E,它们的到达时间及要求服务的时间分别为:进程名 A B C D E 到达时间0 1 2 3 4 服务时间 4 3 4 2 4 时间片大小为1,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:BDACE
(1)修改时间片大小为2,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:ADBCE (2)修改时间片大小为4,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间.
顺序:ABCDE 1、思考 时间片的大小对调度算法产生什么影响?对计算机的性能产生什么影响?答:通过对时间片轮转调度算法中进程最后一次执行时间片分配的优化,提出了一种改进的时间片轮转调度算法,该算法具有更好的实时性,同时减少了任务调度次数和进程切换次数,降低了系统开销,提升了CPU的运行效率,使操作系统的性能得到了一定的提高。 A B C D E 时间片为1 周转时间12 9 14 8 13 3 3 3.5 4 3.25 带权周转 时间 时间片为2 周转时间8 12 13 7 13 2 4 3.25 3.5 3.25 带权周转 时间 时间片为4 周转时间 4 6 9 10 13 1 2 2.25 5 3.25 带权周转 时间
嵌入式实时操作系统:RTOS和PC上的区别 嵌入式实时系统中采用的操作系统我们称为嵌入式实时操作系统,它既是嵌入式操作系统,又是实时操作系统。作为一种嵌入式操作系统,它具有嵌入式软件共有的可裁剪、低资源占用、低功耗等特点;而作为一种实时操作系统(本文对实时操作系统特性的讨论仅限于强实时操作系统,下面提到的实时操作系统也均指强实时操作系统),它与通用操作系统(如Windows、Unix、Linux等)相比有很大的差别,下面我们将通过比较这两种操作系统之间的差别来逐步描述实时操作系统的主要特点。我们在日常工作学习环境中接触最多的是通用操作系统,通用操作系统是由分时操作系统发展而来,大部分都支持多用户和多进程,负责管理众多的进程并为它们分配系统资源。分时操作系统的基本设计原则是:尽量缩短系统的平均响应时间并提高系统的吞吐率,在单位时间内为尽可能多的用户请求提供服务。由此可以看出,分时操作系统注重平均表现性能,不注重个体表现性能。如对于整个系统来说,注重所有任务的平均响应时间而不关心单个任务的响应时间,对于某个单个任务来说,注重每次执行的平均响应时间而不关心某次特定执行的响应时间。通用操作系统中采用的很多策略和技巧都体现出了这种设计原则,如虚存管理机制中由于采用了LRU等页替换算法,使得大部分的访存需求能够快速地通过物理内存完成,只有很小一部分的访存需求需要通过调页完成,但从总体上来看,平均访存时间与不采用虚存技术相比没有很大的提高,同时又获得了虚空间可以远大于物理内存容量等好处,因此虚存技术在通用操作系统中得到了十分广泛的应用。类似的例子还有很多,如Unix文件系统中文件存放位置的间接索引查询机制等,甚至硬件设计中的Cache技术以及CPU 的动态分支预测技术等也都体现出了这种设计原则。由此可见,这种注重平均表现,即统计型表现特性的设计原则的影响是十分深远的。 而对于实时操作系统,前面我们已经提到,它除了要满足应用的功能需求以外,更重要的是还要满足应用提出的实时性要求,而组成一个应用的众多实时任务对于实时性的要求是各不相同的,此外实时任务之间可能还会有一些复杂的关联和同步关系,如执行顺序限制、
实时操作系统实验报告 专业:10通信工程 学号:20100306110 姓名: 汪洁 指导老师:申屠浩
实验一任务管理实验 实验目的: 1.理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程; 2.掌握μC/OS-II 中任务管理的基本方法(挂起、解挂); 3.熟练使用μC/OS-II 任务管理的基本系统调用。 实验要求与思路: 为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1 和T3 三个任务,它们交替运行,如图所示 说明: 在系统完成初始化后,可以先创建并启动优先级最低的TaskStart,由它创 建其他3 个应用任务T0、T1 和T2,之后整个系统的运行流程如下: 1)优先级最高的T0 开始执行,之后T0 挂起自己; 2)然后系统调度选中T1 开始执行,之后T1 挂起自己; 3)接着系统调度选中T2,之后唤醒T0; 4)如此循环 实验程序: #include "includes.h" #define TASK_STK_SIZE 512 OS_STK TaskStk1[TASK_STK_SIZE]; OS_STK TaskStk2[TASK_STK_SIZE]; OS_STK TaskStk3[TASK_STK_SIZE]; OS_STK TaskStartStk[TASK_STK_SIZE]; void Task1(void *data); void Task2(void *data); void Task3(void *data); /* Function prototypes of tasks*\ void TaskStart(void *data); /* Function prototypes of Startup task */