您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > LINUX平台软件开发及跨平台软件开发技术介绍.
LINUX平台软件开发及跨平台软件开发技术介绍丰晓东2011-11-7一:LINUX与VXWORS的平台特点VXWORKS:微内核1:无用户态,内核态的区别2:所有任务运行在同一地址空间3:用户程序通过函数调用而不是系统调用的方式请求内核服务4:所有这些特点,使得VXWORKS的内核更具实时性,小型化,和高效率的特点一:LINUX与VXWORS的平台特点LINUX宏内核1:存在着用户态,内核态的隔离2:用户态程序通过系统调用访问内核的功能。3:不同的进程运行在不同的地址空间所有这些特点,使得LINUX下的用户进程的错误不易波及到内核,以及其它的用户进程,提高了系统的安全性,可靠性,及稳定性。一:LINUX与VXWORS的平台特点内核空间用户空间设备驱动程序内核服务程序系统调用 用户程序用户程序/proc文件系统/dev/ 设备文件用户空间与内核空间的内存映射mmapVFS虚拟文件系统新增系统调用 linux用户程序与内核交互信息的方式用户程序与内核交互内核服务程序用途Ps,top/proc内核可以向/proc中的文件输出内容,供用户程序处理,用户程序也可以向/proc中的文件写入内容,以配置内核。各种应用/dev下的设备文件,以及访问设备的统一系统调用接口(open,read,write,close,ioctl)设备驱动程序/dev下的设备文件,可以对应一个实际的物理设备,也可以对应一个虚拟设备(作为用户程序与内核交互的一个渠道)iptable系统调用netfilter高实时性应用mmap内存映射方式通常应用在那些内核和用户空间需要快速大量交互数据的情况下,特别是那些对实时性要求较强的应用一:LINUX与VXWORS的平台特点•linux用户程序与内核交互信息的实例一:LINUX与VXWORS的平台特点案例修改LINUX系统的消息队列的最大消息队列数:echo18/proc/sys/kernel/msgmni问题1Linux下用户程序与内核交互的几种方式问题2你认为两个操作系统的各自最大特点是什么?二:LINUX与VXWORKS的平台差异•LINUX下的进程进程的基本属性:通过ps–ef可以看到一个进程的UID所有者PID进程IDPPID父进程IDCMD对应程序名inithttpdsshdsshdbashLs-lHttpd[1]Httpd[2]孤儿进程父进程僵尸进程二:LINUX与VXWORKS的平台差异linux的进程树二:LINUX与VXWORKS的平台差异(LINUX下的进程状态)•Init进程还负责管理系统中的“孤儿”进程。如果某个进程创建子进程之后,在子进程终止之前终止,则子进程成为孤儿进程。init进程负责“收养”该进程,即孤儿进程会立即成为init进程的子进程。•一个已经终止,但是其父进程尚未对其进行善后处理(获取终止子进程的有关信息、释放它仍占用的资源如进程表项)的进程被称为僵死进程(ZombieProcess)•僵尸进程将会导致资源浪费,而孤儿则不会二:LINUX与VXWORKS的平台差异(LINUX下的进程创建)1)系统初始化阶段:在操作系统的初始化过程中,将程序名写入相应的启动脚本中。2)用户与操作系统的交互操作过程中:在操作系统提供shell中,输入程序名。原理:shell是一个进程,在shell下输入一个命令(程序名),实际上是由shell进程创建一个子进程(fork)来执行这条命令(exec)。3)编程:二:LINUX与VXWORKS的平台差异(LINUX下的进程创建)fork()用于创建一个子进程1:子进程会继承(挎贝)父进程的很多东西,包括:2:打开的文件描述符3:堆栈4:当前工作目录5:控制终端6:正文代码二:LINUX与VXWORKS的平台差异(LINUX下的进程创建)图示fork系统文件表共享的代码段代码段代码段堆栈堆栈文件描述符表文件描述符表父进程子进程二:LINUX与VXWORKS的平台差异(LINUX下的进程创建)图示fork:If子进程Elseif(父进程)子进程与父进程使用相同的正文,但是它们分别执行不同的分支二:LINUX与VXWORKS的平台差异(LINUX下的进程创建)exec()用于在一个进程执行新程序该调用不会产生新的进程,只会改变进程执行的正文。Exec(程序名及参数)If子进程Elseif(父进程)子进程通过调用exec来改变正文部分二:LINUX与VXWORKS的平台差异(LINUX下的进程创建)system()调用在程序中执行一个命令字符串的更方便的方法,system的实现是fork与exec的组合。例:system(“ls–llog”)二:LINUX与VXWORKS的平台差异(LINUX下的进程退出)在进程所执行的程序中调用exit1)关闭进程打开的所有描述符2)如果进程有子进程,则将子进程的父进程设置为init这是为了避免本进程的子进程成为孤儿进程3)向父进程发送信号SIGCHLD这是为了避免本进程成为僵尸进程二:LINUX与VXWORKS的平台差异(LINUX下的进程退出)在进程环境中使用信号通知进程退出•Killpid(发送的是SIGTERM)•Kill(-9)pid(发送的是SIGKILL)•Killall进程名序号处理方式不同UNIX版本的兼容性备注1忽略子进程的SIGCHLD信号不理想有的版本,内核会清除子进程所占的进程表项,从而解决僵尸进程的问题2处理捕捉的子进程的SIGCHLD信号无问题在捕捉函数中以非阻塞方式调用waitpid。这种方式不影响父进程处理其它任务。3调用Wait,waitpid,取得子进程的终止状态信息无问题父进程等待子进程退出时会阻塞。可用于父进程没有其它事可做的场景4Fork两次无问题最后一次fork起来的子进程,是前一次fork的子进程的子进程(该子进程通过exit退出,使得最后一次fork起来的子进程,成为孤儿进程,被init接收。而init会有效处理子进程的退出,使其不会成为僵尸进程父进程处理处理子进程中止的几种方式的比较二:LINUX与VXWORKS的平台差异(LINUX下的进程退出)二:LINUX与VXWORKS的平台差异(LINUX下的信号)信号控制终端产生的信号(Ctrl+C)SIGINT(Ctrl+\)SIGQUIT 硬件异常产生信号如SIGBUS 系统调用 kill SIGTERM,SIGSTOP,SIGKILL软件产生的信号:Segmentfault:(SIGSEGV)Alarm系统调用(SIGALRM)子进程退出时产生的信号SIGCHLD信号产生者信号接收者(进程)内核( 中间人,也可以是信号产生者)信号: 一种典型的异步事件机制注册:信号处理方式(忽略,默认,捕捉)执行信号处理函数内核动作忽略,默认使用signal,或sigaction二:LINUX与VXWORKS的平台差异(LINUX下的信号)不可被捕捉的信号SIGKILLSIGSTOP用于强制杀死失去控制的进程案例ping一个IP,结果导致webs进程挂掉原因何在?如果解决二:LINUX与VXWORKS的平台差异(LINUX下的信号)•常用信号相关的函数函数作用应用Signal设置信号处理方式sigactionkill向其它进程发送信号raise向自己发送信号alarm间隔一段指定的时间,向自己发送SIGALRM信号Sleep的实现pause使调用进程挂起直至捕捉到一个信号二:LINUX与VXWORKS的平台差异回顾1:linux系统中如何创建一个进程,如何终止一个进程2:什么是孤儿进程,僵尸进程3:linux中常见的信号有哪些二:LINUX与VXWORKS的平台差异进程,线程与任务1:进程,线程是LINUX下的说法,任务是VXWORKS下的说法2:LINUX中可以包含多个进程,每个可以包含1到多个线程。不同的进程有独立的地址空间,同一进程的不同线程,共享同一地址空间3:LINUX的线程与VXWORKS的任务是比较相近的。VXWORKS相当于LINUX系统下的一个单进程多线程的系统。而LINUX系统下的一个单进程多线程的程序,由于各线程运行的地址空间是一样的,所有一样可能由于一个线程的内存越界,导致整个进程的崩溃。进程,线程与任务间通信1:消息队列,共享内存(非vxworks平台下),信号量(简称IPC)都是用一个key来唯一标识。1)KEY的产生方法2)是创建一个新的IPC,还是引用一个已存在的IPC通常来说,通信的两方分为服务器与客户端。作为服务器端,一般会创建一个IPC,供客户端使用,(意味着,服务器每次重启时,如果已存在一个key标识的IPC,先要删除之,并重新创建并初始化,具有该key标识的IPC。作为一个客户端,只需要绑定到此key标识的IPC,就可访问之。小结:服务器创建IPC客户端绑定IPC二:LINUX与VXWORKS的平台差异进程,线程与任务间通信2:共享内存对于VXWORS和LINUX的线程来说,共享内存就是一些全局的数据结构对于LINUX的进程来说,共享内存是IPC机制的一种,一般来说,进程A的逻辑地址与进程B的逻辑地址对应着物理内存的不同的地方,但是两者的共享内存对应着同一段物理内存一般来说,全局的数据结构需要得到互斥保护二:LINUX与VXWORKS的平台差异进程,线程与任务间通信3:消息队列•提供了一种不同任务间进行异步的交互的方法,消息通常为定长,并存在着消息的最大字节字节数的限制,以及消息的个数的限制•VXWORKS下的消息队列与LINUX中的消息队列比较类似二:LINUX与VXWORKS的平台差异进程,线程与任务间通信4:管道•VXWORKS中的管道和消息队列的含义比较相似,但可以用标准的IO接口来操作•LINUX中的管道,用标准的IO接口来操作,带有流的性质二:LINUX与VXWORKS的平台差异每个平台一个版本不同的版本在用到平台相关的机制时,选用平台特定的API。一个版本,在程序中用宏区分不同的平台缺点,与平台相关的宏的使用,使得程序逻辑将变得非常复杂,三:支持多平台的软件开发技术中间层设计JAVAVM为不同的平台,提供统一的开发库对上提供统一的JRE库,针对不同的平台,JRE库有不同的实现,如针对WINDOWS平台有一个JRE实现,针对LINUX平台有一个JRE实现,但是上层应用使用的是统一的API接口。应用不需要修改缺点,性能将会下降优点:优点:应用程序与平台无关三:支持多平台的软件开发技术三:支持多平台的软件开发技术JAVA应用JreforwindowsJreforlinuxJavaapiOSwindowsOSlinux中间层设计案例之一:JVM三:支持多平台的软件开发技术中间层设计案例之二:TATA架构TAPA架构(TrilliumAdvancedPortabilityArchitecture(TAPA)1:所有的应用基于一种可移植的软件架构上开发。2:将所有的编程资源进行平台无关的抽象三:支持多平台的软件开发技术功能模块1系统服务层功能模块2功能模块n操作系统1操作系统2操作系统nSSI平台相关的接口系统服务接口(平台无关)针对不同的OS开发不同的系统服务层实现中间层设计案例之二:TATA架构中间层设计案例之二:TATA架构SSI系统服务接口先抽象出与平台无关的SSI,供应用程序使用,而针对不同的平台,进行对应的SSI实现,有了SSI后,各功能模块的开发就独立于操作系统了。SSI有两个主要的部分:核心系统服务(CoreSystemService)和系统依赖服务(DependentSystemService)三:支持多平台的软件开发技术三:支持多平台的软件开发技术CoreSystemService核心系统服务DependentSystemService系统依赖服务SSSD核心系统服务提供S接口系统依赖服务提供SSD接口提供的主要功能:任务管理与调度内存管理消息管理队列管理任务间通信进程间通信定时管理缺点,性能将会
本文标题:LINUX平台软件开发及跨平台软件开发技术介绍.
链接地址:https://www.777doc.com/doc-2884830 .html