|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式操作系统基础知识 > 处理器管理 > 分区、进程、线程、任务的概念 > 任务的实现 >
|
相关知识点:6个
|
|
|
|
在一个嵌入式操作系统当中,任务的创建主要发生在以下三种情形:
|
|
|
(1)系统初始化:当嵌入式内核在进行系统初始化的时候,一般都会创建一些任务。例如,它可能会创建一些前台任务,负责与嵌入式系统的用户进行交互;也可能会创建一些后台任务,这些任务不直接跟用户交互,而是在后台完成一些特定的功能,如键盘扫描、系统状态检测、时间统计等。
|
|
|
(2)任务运行过程中:除了在系统初始化的时候会创建任务以外,当一个任务正在运行的时候,如果需要的话,也能够使用相应的系统调用来创建新的任务,以帮助它完成自己的工作。
|
|
|
(3)用户提出请求:在一些具有交互功能的嵌入式系统中,用户可以通过敲入命令或点击图标的方式,让系统启动一个新的任务。例如,在一个PDA中,用户可以点击某一个游戏,或打开视频播放器,这时系统就会创建相应的任务来满足用户的请求。
|
|
|
虽然在以上的这三种情形下,都能够创建一个新的任务,但是从技术的角度来说,实际上只有一种创建任务的方法,也就是在一个已经存在的任务中,通过调用相应的系统调用函数来创建一个新的任务。
|
|
|
在嵌入式操作系统当中,任务的创建主要有两种可能的实现模型,即fork/exec和spawn,两者既有联系又有区别。
|
|
|
fork/exec模型源于IEEE/ISO POSIX 1003.1标准,而spawn模型是从它派生出来的。这两种模型在创建任务的时候,过程非常相似。首先为新任务分配相应的数据结构,存放其各种管理信息,然后为它分配内存空间,存放任务的代码和数据。当这个新任务准备就绪后,就可以启动其运行。
|
|
|
两种模型的差别主要在于内存的分配方式。在fork/exec模型下,首先调用fork函数为新任务创建一份与父任务完全相同的内存空间,然后再调用exec函数装入新任务的代码,并用它来覆盖原有的属于父任务的内容。这样做的好处是:对于新创建的子任务来说,如果需要的话,它可以从父任务那里继承代码、数据等各种属性。而在spawn模型下,摒弃了继承这一功能,在创建新任务的时候,直接为它分配一个全新的地址空间,然后将新任务的代码装入并运行。
|
|
|
在有些嵌入式系统当中,尤其是一些控制系统,它的某些任务被设计为“死循环”的模式。
|
|
|