公司网站建设管理网页制作语言
公司网站建设管理,网页制作语言,seo关键词工具,wordpress文章头部进程#xff08;Process#xff09;是具有一定独立功能的程序关于某个数据集合上的一次运行活动#xff0c;是系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合#xff0c;它本身没有任何运行的含义#xff0c;只是一个静态实体。而进程则不同#xff… 进程Process是具有一定独立功能的程序关于某个数据集合上的一次运行活动是系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合它本身没有任何运行的含义只是一个静态实体。而进程则不同它是程序在某个数据集上的执行是一个动态实体。它因创建而产生因调度而运行因等待资源或事件而被处于等待状态因完成任务而被撤消反映了一个程序在一定的数据集上运行的全部动态过程。 线程Thread是进程的一个实体是CPU调度和分派的基本单位。线程不能够独立执行必须依存在应用程序中由应用程序提供多个线程执行控制。 线程和进程的关系是线程是属于进程的线程运行在进程空间内同一进程所产生的线程共享同一内存空间当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其它线程共享进程所拥有的全部资源但是其本身基本上不拥有系统资源只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。 根据进程与线程的设置操作系统大致分为如下类型 1、单进程、单线程MS-DOS大致是这种操作系统 2、多进程、单线程多数UNIX及类Unix的Linux是这种操作系统 3、多进程、多线程Windows NT以及基于NT内核的Windows 2000、XP等、Solaris 2.x和OS/2都是这种操作系统 4、单进程、多线程vxWorks就是这种操作系统。vxWorks只有一个进程内存空间和资源分配其任务的概念与线程大致相当所有任务之间共享内存和其它资源。 vxWorks由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成。vxWorks 内核最小为 8KB即便加上其它必要模块所占用的空间也很小且不失其实时、多任务的系统特征。vxWorks的内核主要包括 1、多任务为满足真实世界事件的异步性现代操作系统需提供多任务支持由系统内核分配CPU给多个任务并发执行。如果是单CPU则执行方式实质是宏观并行、微观串行 2、任务调度真实世界的事件具有继承的优先级当一个高优先级的任务变为可执行态它会立即抢占当前正在运行的较低优先级的任务vxWorks对这种优先级抢占调度Preemptive Priority Scheduling提供了支持。同时vxWorks也支持同优先级任务间的时间片轮转调度Round-Robin Scheduling 3、任务间的通讯与同步在一个实时系统中系统必须提供多个任务间快速且功能强大的通信机制并提供为了有效地共享不可抢占的资源或临界区所需的同步机制 4、任务与中断之间的通信许多外设以中断方式与CPU通信我们不宜在中断服务程序ISR中进行过多的处理通常将相应处理交给特定任务去完成。
相关的具体解释如下 硬件中断处理硬件产生中断,统治系统调用相应的中断历程(ISR),位是系统得到尽快的响应ISR在它自己独立的上下文和堆栈中运行它的优先级高于任何任务优先级。 中断延迟(Interrupt Latency)中断延迟是指从硬件中断发生到开始执行中断处理程序第一条指令之间的这段时间。 优先级驱动(Priority-Driven)优先级驱动是指多任务系统中当前运行任务总是具有最高优先级的就绪任务。 多任务调度分为两种方式优先抢占和轮转调度(Preemptive Priority,Round-Robin Scheduling)。优先抢占(Preemptive Priority)每一个任务都有一个优先级系统核心保证优先级最高的任务运行于CPU。如果有任务优先级高于当前的任务优先级系统立刻保存当前任务的上下文,切换到优先级高的上下文抢占(Preemptive)抢占是指当系统处于核心态运行时允许任务的重新调度。换句话说就是指正在执行的任务可以被打断让另一个任务运行。抢占提高了应用对异步事件的响应性能力。操作系统内核可抢占并不是说任务调度在任何时候都可以发生。例如当一个任务正在通过一个系统调用访问共享数据时重新调度和中断都被禁止。 任务上下文(Task Context)任务上下文是指任务运行的环境。例如针对x86的CPU任务上下文可包括程序计数器、堆栈指针、通用寄存器的内容。 上下文切换Context Switching多任务系统中上下文切换是指CPU的控制权由运行任务转移到另外一个就绪任务时所发生的事件当前运行任务转为就绪或者挂起、删除状态另一个被选定的就绪任务成为当前任务。上下文切换包括保存当前任务的运行环境恢复将要运行任务的运行环境。上下文的内容依赖于具体的CPU。 轮转调度(Round-Robin Scheduling):使所有相同优先级,状态为ready的任务公平分享CPU(分配一定的时间间隔,使个任务轮流享有CPU)。系统由256个优先级,从0到255,0为最高,255为最低. 任务在被创建时设定了优先级.也可用taskPrioritySet ( ) 来改变任务优先级。
任务的主要状态包括READY,PEND,DELAY,SUSPEND各状态轮转如下
ready--------pended -----------semTake()/msgQReceive()-其他任务 ready--------delayed-----------taskDelay() ready--------suspended---------taskSuspend() pended-------ready-------------semaGive()/msgQSend()-其他任务 pended-------suspended---------taskSuspend() delayed------ready-------------expired delay delayed------suspended---------taskSuspend() suspended----ready-------------taskResume()/taskActivate() suspended----pended------------taskResume() suspended----delayed-----------taskResume() 轮转调度 (Round-Robin)轮转调度可以扩充到优先抢占方式中,当多个任务优先级相同的情况下,轮转调度算法使任务按平等的时间片运行于CPU,共享CPU.避免一个任务长时间占用 CPU,而导致其他任务不能运行.可以用 kernelTimeSlice() 来定义时间长度.taskLock ( )和 taskUnlock ( ) 用来取消优先抢占方式和恢复优先抢占方式.注意: 一个任务可以调用taskDelete ( ) 删除另一个任务,但是如果一个当前正在运行的任务被删除后,该任务的内存没有释放,而其他任务不知道,依然在等待,结果导致系统stop.用 taskSafe ( ) 和 taskUnsafe ( ) 来保证正在运行的任务不被删除.用法如下: [cpp] view plaincopy taskSafe (); semTake (semId, WAIT_FOREVER); .. .critical region . semGive (semId);semGive (semId); taskUnsafe (); . .critical region . semGive (semId);semGive (semId); taskUnsafe (); tasklock()和和 taskUnlock()用来取消优先抢占方式和恢复优先抢占方式。
下面介绍下任务间的同步和进程间协调
信号量作为任务间同步和互斥的机制。在 wind 核中有几种类型的信号量它们分别针对不同的应用需求二进制信号量、计数信号量、互斥信号量和 POSIX 信号量。所有的这些信号量是快速和高效的它们除了被应用在开发设计过程中外还被广泛地应用在VxWorks 高层应用系统中。对于进程间通信wind 核也提供了诸如消息队列、管道、套接字和信号等机制。 任务间的同步和进程间协调的几种方式: 内存共享(Shared Memory),对简单的数据共享而言. 信号量(Semaphore),基本的互斥和同步. 消息队列(Message queues)和管道(Pipe),单个CPU中,任务间的信息传递. 套结字(Socket)和远程调用(Remote procedure calls),相对于网络任务间的通信. 信号(Signals),出错处理(Exception handling). 内存共享(Shared Memory) 任务间通信最通常的方式是通过共享的数据结构进行通信,因为所有VxWorks的任务存在于一个单一的线性地址空间任务间共享数据。全局变量、线性队列、环形队列、链表、指针都可被运行在不同上下文的代码所指向。 互斥(Mutual Exclusion) 互斥是用来控制多任务对共享数据进行串行访问的同步机制。在多任务应用中当两个或多个任务同时访问共享数据时可能会造成数据破坏。互斥使它们串行地访问数据从而达到保护数据的目的. 解决互斥的几种方法: 1. 关闭中断的方法(intLock): 能解决任务和中断ISR之间产生的互斥. [cpp] view plaincopy funcA () { int lock intLock(); . . critical region that cannot be interrupted . intUnlock (lock); } 但在实时系统中采取这个办法会影响系统对外部中断及时响应和处理的能力. 2. 关闭系统优先级(taskLock): 关闭系统优先级,这样在当前任务执行时,除了中断外,不会有其他优先级高的任务来抢占CPU,影响当前程序运行. [cpp] view plaincopy funcA () { taskLock (); . . critical region that cannot be interrupted . taskUnlock (); } 这种方法阻止了高优先级的任务抢先运行,在实时系统中也是不适合的,除非关闭优先级的时间特别短.
信号量(Semaphore): 信号量是解决互斥和同步协调进程最好的方法。VxWorks信号量提供最快速的任务间通信机制它主要用于解决任务间的互斥和同步。针对不同类型的问题有以下三种信号量 1、二进制信号量binary) 使用最快捷、最广泛主要用于同步或互斥 2、互斥信号量(mutual exclusion) 特殊的二进制信号量主要用于优先级继承、安全删除和回溯 3、计数器信号量(counting) 和二进制信号量类似保持信号量被释放gaven)的次数。主要用于保护一个资源的多个例程multiple instances of a resource
信号量控制函数介绍: semBCreate( ) 分配并初始化一个二进制信号量 semMCreate( ) 分配并初始化一个互斥信号量 semCCreate( ) 分配并初始化一个计数信号量 semDelete( ) 终止一个自由的信号量 emTake( ) 占有一个信号量 semGive( ) 释放一个信号量 semFlush( ) 解锁所有等待信号量的任务 semBCreate( ), semMCreate( ), and semCCreate( )返回一个信号量ID作为其它后续任务使用该信号量的的句柄。当一个信号量被创建它的队列queue)类型就被确定。等待信号量的任务队列以优先级的高低排列(SEM_Q_PRIORITY)或者一先到先得的方式排列SEM_Q_FIFO). 当一个Semaphore创建时,指定了任务队列的种类。
semBCreat( SEM_Q_PRIORITY, SEM_FULL), SEM_Q_PRIORITY 指明处于等待状态的任务在等待队列中以优先级的顺序排列 semBCreat(SEM_Q_FIFO,SEM_FULL), SEM_Q_FIFO指明处于等待状态的任务在等待队列中以先进先出的顺序排列 互斥进程Mutual Exclusion 互斥信号量有效的内锁对共享资源的进入与屏蔽中断(disabling interrupts)和优先级锁定preemptive locks相比二进制信号量将互斥的范围限制在仅与其有关的资源上。从技术上说创建一个信号量来保护(guarding)资源。信号量初始化位可用的(FULL)当一个Semaphore创建时,指定了这个semaphore是用在解决互斥还是用来同步任务
semBCreat( SEM_Q_FIFO, SEM_FULL) , SEM_FULL 指明用于任务间互斥. SEM_ID semMutex;semMutex semBCreate (SEM_Q_PRIORITY, SEM_FULL)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88900.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!