嵌入式系统linux总结.doc_第1页
嵌入式系统linux总结.doc_第2页
嵌入式系统linux总结.doc_第3页
嵌入式系统linux总结.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式实时操作系统复习提纲一、基本概念linux内核主要是由进程调度、内存管理、虚拟文件系统、网络接口和进程间通信等组成。3linux用户进程: linux系统定义了五种状态进程状态从linux的调度来看,支持非实时(普通)和实时两种进程。5考虑到中断处理的效率,linux的中断处理程序分为两个部分:上半部(top half)和下半部(bottom half)。由外部设备引发的中断叫外部中断,处理器响应中断请求而执行的程序模块叫中断服务例程6交换机制:将不用或暂不用的页框中的页移出,装上新的页面;linux三级分页结构7进程的通信与同步机制有管道、信号、消息队列、共享内存和信号量集等el 中。linux的管道有:匿名管道和命名管道;从信号的可靠性方面,信号可以分为:可靠信号和不可靠信号。8.linux设备驱动注册的基本参数有设备名称,设备驱动的数据结构、设备号 和 次设备号。lsmod 把现在 kernel 中已经安装的modules 列出来;insmod 把某个 module 安装到 kernel.二、基本原理和方法基于虚拟内存技术的程序执行两次映射:buddy算法-伙伴算法slab分配器思想linux内存管理的基本内容和步骤linux 内核的主要组成部分linux的中断处理程序linux系统进程调度的总体思想。实时进程优先于普通进程,实时进程以进程的紧急程度为优先顺序,普通进程以进程平等占用cpu时间为基本调度原则。linux提供了两种实时调度策略sched_fifo和sched_rrlinux使用的进程间通信方式:(1)管道(pipe)和有名管道(fifo)(2)信号(signal)(3)消息队列:msgget可以创建一个新队列或打开一个存在的队列. msgctl类似于驱动程序中的ioctl函数, 可对消息队列执行多种操作. 调用msgsnd将数据放到消息队列中. 调用msgrcv将从消息队列中取消息.(4)共享内存:linux进程调用shmget(shared memory get,获取共享内存)来分配一个共享内存块。shmat(shared memory attach,绑定到共享内存)。shmctl(shared memory control,控制共享内存)函数会返回一个共享内存块的相关信息。同时 shmctl 允许程序修改这些信息。(5)信号量(6)套接字(socket)三、linux调度程序理解1. linux使用内核函数goodness()对进程进行加权处理:static inline goodness (struct task_struct * pint this_cpu, struct mm_struct *this_mm)int weight; weight=-1;if (p-policy & sched_yield)/ /*判断如果任务的调度策略被置为sched_yield的话,则置权值为1,返回。goto out;if (p-policy=sched_other) /*先对普通进程进行处理(由于多数是普通进程,这样做有利于提高系统效率)*/weight=p-counter; /*返回权值为进程的counter值*/if (! weight)goto out;#ifdef config_smpif (p-processor=this_cpu)weight+=proc_change_penalty;#endifif (p-mm=this_mm|! p-mm)weight+=1; /*对进程权值进行微调,如果进程的内存空间使用当前正在运行的进程的内存空间,则权值额外加1*/weight+=20-p-nice; /*将权值加上20与进程优先级nice的差。普通进程的权值主要由counter值和nice值组成*/goto out;weight=1000+p-rt_priority; /对实时进程进行处理,返回权值为rt_priority+1000,确保优先级高于普通进程*/out:return weight;2. linux 进程及管道应用实例#include#includeint main()int n,fd2; / 这里的fd是文件描述符的数组,用于创建管道做准备的pid_t pid;char line100;if(pipe(fd)0) / 创建管道 printf(pipe create error/n);if(pid=fork()0) /这里是父进程,先关闭管道的读出端,然后在管道的写端写入“hello world close(fd0); write(fd1,hello word/n,11);else close(fd1); /这里是子进程,先关闭管道的写入端,然后在管道的读出端读出数据 n= read(fd0,line,100); write(stdout_fileno,line,n);exit(0);linux中的工作队列工作队列(work queue)是linux kernel中将工作推后执行的一种机制。这种机制和bh或tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。工作队列是2.6内核开始引入的机制,在2.6.20之后,工作队列的数据结构发生了一些变化,数据结构: structwork_struct unsigned longpending; pending是用来记录工作是否已经挂在队列上;structlist_head entry; entry是循环链表结构;void(*func)(void*); func作为函数指针,由用户实现;void*data; data用来存储用户的私人数据,此数据即是func的参数;void*wq_data; wq_data一般用来指向工作者线程(工作者线程参考下文);structtimer_list timer; timer是推后执行的定时器。;工作队列(work queue)api:1、init_work(_work, _func, _data);初始化指定工作,目的是把用户指定的函数_func及_func需要的参数_data赋给work_struct的func及data变量。2、schedule_work(structwork_struct *work)对工作进行调度,即把给定工作的处理函数提交给缺省的工作队列和工作者线程。工作者线程本质上是一个普通的内核线程,在默认情况下,每个cpu均有一个类型为“events”的工作者线程,当调用schedule_work时,这个工作者线程会被唤醒去执行工作链表上的所有工作。3、schedule_delayed_work(structwork_struct *work, unsigned longdelay);延迟执行工作,与schedule_work类似。4、flush_scheduled_work(void);刷新缺省工作队列。此函数会一直等待,直到队列中的所有工作都被执行。5、cancel_delayed_work(structwork_struct *work);并不取消任何延迟执行的工作,因此,如果要取消延迟工作,应该调用cancel_delayed_work。针对linux内核,如下机制严重地影响了实时性linux实时改造后的系统实时性较好,典型代表有:kurt-linux,red-linux,rt-linux、rtai和xenomai等。rt-linux中的实时任务在运行过程当中总是处于以下三种状态之一:安装rt-linux的方法和步骤在基于adeos的系统中,存在着a、b、c、d四种类型的交互。linux内核和xenomai分别作为adeos中的一个域存在。linux内核负责非实时任务的调度,而xenomai采用不同于linux的精度更高的定时中断来调度实时任务,实现更小的调度延时。另外,xenomai域的优先级高于linux域。xenomai除了在内核层利用adeos实现了硬实时外,它在用户空间也有很好的实时性。xenomai的补丁及配置移植步骤rt-linux的实时内核的主要api1)硬中断api2)软中断api3)内核实时线程编程api,主要有以下几个(在rtl_sched.h中声明):4)要使用共享内存通信,需要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论