嵌入式Linux应用程序开发.ppt
《嵌入式Linux应用程序开发.ppt》由会员分享,可在线阅读,更多相关《嵌入式Linux应用程序开发.ppt(67页珍藏版)》请在三一办公上搜索。
1、嵌入式Linux应用程序开发,课程安排,Linux系统文件与I/OLinux系统多进程并发Linux系统多线程并发Linux系统网络通信,Linux一切皆文件:Linux上的任何事物都可以用一个文件代表,可以通过文件操作该事物(1)普通文件(regular file)(2)目录:包含了其他文件的名字以及指向与这些文件有关信息的指针(3)设备文件(/dev):字符特殊文件、块特殊文件(4)FIFO:用于进程间的通信,有时也将其称为命名管道(5)符号连接(symbolic link):指向另一个文件(6)套接口(socket):用于宿主机间网络通信,Linux文件,Linux文件操作,1、Linu
2、x系统基本操作函数:open、close、read、write和ioctl 2、Linux对文件的操作基于打开的文件描述符,Linux文件描述符,1、linux内核是通过文件描述符区分和引用文件,文件描述符表示一个已打开的 文件2、文件描述符为非负整数,保存了进程文件描述符表(已打开文件表)的索引3、一个进程启动后,系统自动打开3个文件:标准输入、标准输出、标准出错,对应文件描述符为:STDIN_FILENO(1)、STDOUT_FILENO(2)、STDERR_FILENO(3)4、Linux上一个进程可打开的最大文件描述符值为1024,文件描述符实例,Linux系统IO操作,1、Linux
3、系统实现一整套文件处理函数,统一操作Linux上的文件:普通文件、网络socket文件、设备文件等2、这些函数通过系统调方式实现,称为系统IO:open 打开或创建一个文件 creat 建立一个空文件 close 关闭一个文件 read 从文件读入数据 write 向文件写入一个数据 lseek 在文件中移动读写位置 unlink 删除一个文件 remove 删除一个文件本身 fcntl 控制一个文件属性,IO操作实例实现文件拷贝,课程安排,Linux系统文件与I/OLinux系统多进程并发Linux系统多线程并发Linux系统网络通信,操作系统将程序读入内存,分配ID,管理程序的执行状态,形
4、成进程,进程可以看一个正在执行的程序实例,有自己的地址空间和执行状态进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体Linux是一个多进程的系统,进程之间具有并行性、互不干扰:1、每一个进程都运行在各自独立的虚拟地址空间2、即使一个进程发生异常,也不会影响其他进程3、通过ps-el命令可以查看当前系统上运行的所有用户进程信息进程是运行中的程序!,什么是进程,程序运行映像布局,1、内核空间与用户空间 Linux简化了分段机制,使得虚拟地址与线性地址总是一致,Linux的虚拟地址空间也为0 4G 最高的1G字节(从虚拟地址0 xC0000000到0 xFFFF
5、FFFF)供内核使用,称为“内核空间”较低的3G字节(从虚拟地址0 x00000000到0 xBFFFFFFF)供各个进程使用,称为“用户空间”)每个进程可以通过系统调用进入内核,Linux内核由系统内的所有进程共享 从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间,Linux上的进程,2、内核态与用户态 当进程执行系统调用而进入内核代码中运行时,我们就称进程处于内核运行态(或简称为内核态)此时处理器处于特权级(高级),可以执行特权指令,不受其他进程干扰 当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)此时处理器处于用户级(低级)3、进程调度 在Linux中,每个进程在创建
6、时都会被分配一个数据结构,称为进程控制块(Process Control Block)简称PCB,供系统调度和进程本身执行使用 调度时,Linux系统以分时复用机制调度多个进程,进程调度过程成为进程上下文切换(context switch):即将一个进程从运行状态退出,并运行另一个进程,Linux上的进程,进程调度,1、在Linux 操作系统中以PID唯一地标识一个进程 进程ID(PID)也被称作进程标识符,是一个非负的整数 进程ID从2开始,1一般为特殊进程init保留2、Linux上的进程具备亲缘关系 PID为进程号,PPID为父进程号;init为所有进程的祖先,进程号(PID),ps-a
7、ux查看系统中的进程:D 不可中断睡眠(通常是在IO操作)R 正在运行或可运行(在运行队列排队中)S 可中断睡眠(在等待某事件完成)T Stopped,either by a job control signal or because it is being traced.W 正在换页(2.6.内核之前有效)X 死进程(should never be seen)Z 僵尸,进程状态,进程与父进程ID,1、获取进程ID(PID)2、获取父进程ID(PPID),创建进程,1、在shell中运行程序,shell派生一个子进程装载程序映像执行2、也可以在程序中通过fork系统调用创建一个子进程,Fork
8、结果,1、示例代码2、运行结果“fork done!”打印了2次!,Fork特点,1、fork创建得到的子进程直接克隆父进程的程序映像(映像一样但存放在2个独立的进程地址空间)2、fork后得到2条程序运行路径:父进程与子进程运行路径3、为了区分父进程运行路径与子进程运行路径,fork调用1次,返回2次 返回值大于0:父进程路径,返回值表示新建的子进程PID 返回值等于0:子进程路径,Fork使用,1、示例代码2、执行结果,进程退出,1、主函数(main)中调用return语句,退出整个进程 其他函数中调用return语句,只退出该函数2、在程序中任何地方调用exit,退出整个进程3、main
9、的return返回值,和exit的status用来记录进程退出状态,通常0表示正常退出,僵尸与孤儿,1、一个进程退出之后,该进程并不马上就完全消失,而是变成僵尸进程(Zombie)僵尸进程仅仅在系统中记录了进程退出状态,等待善后处理 子进程退出产生僵尸进程:,僵尸与孤儿,2、僵尸进程太多会影响系统性能(进程退出状态一直未被回收)一般采用谁创建则谁负责回收原则,由父进程回收子进程3、如果父进程在子进程退出之间就消亡了,会产生什么想象?子进程将成为孤儿进程,init自动成为子进程的继父 父进程退出,子进程成为孤儿:,进程同步,1、孤儿进程太多也会影响系统性能,所有孤儿进程退出状态都需要init去回
10、收2、一般情况下,由父进程负责回收子进程,这就涉及父子进程同步 通过wait/waitpid系统调用实现父子进程同步 status保存子进程退出状态,返回值表示结束的子进程ID wait使父进程挂起等待,直到任何一个子进程结束并回收返回 waitpid可以实现等待指定pid的子进程结束 waitpid的option参数设为WNOHANG,不阻塞等待没有子进程结束则返回0,进程退出状态,1、Wait/waitpid获得子进程退出时的状态(status),退出状态包含:进程退出原因和返回值(低8位)2、系统定义了一些宏函数用于检测进程退出状态(1)、WIFEXITED(status)如果子进程正常
11、结束,宏非零(2)、WEXISTSTATUS(status):WIFEXITED非零,宏返回进程退出码低8位,进程同步意义,1、进程创建后,子进程先运行还是父进程先运行依赖于系统调用机制 Linux系统采用优先级、先来先服务、分时复用等排队调度机制2、两个进程协调以安排好地次序依次执行,称为进程同步:进程间同步有多种方法,其中用wait是一种方法 wait一般只用于父子进程之间进行同步 而非父子关系进程间同步,需要用到进程间通讯机制 3、父子进程同步没做好,会影响系统性能 如果子进程先于父进程退出,形成僵尸进程 如果父进程先于子进程退出,形成孤儿进程.,exec加载新映像,1、子进程成为父进程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 Linux 应用程序 开发
链接地址:https://www.31ppt.com/p-6569744.html