Linux复习提纲.doc_第1页
Linux复习提纲.doc_第2页
Linux复习提纲.doc_第3页
Linux复习提纲.doc_第4页
Linux复习提纲.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式实时操作系统复习提纲一、基本概念1.嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。2.嵌入式系统的组成部分是嵌入式系统硬件平台、嵌入式操作系统和嵌入式系统应用。其中,嵌入式系统硬件平台为各种嵌入式器件、设备(如ARM、PowerPC、Xscale、MIPS等);嵌入式操作系统是指在嵌入式硬件平台上运行的操作系统,目前主流的嵌入式操作系统有嵌入式Linux、mCLinux、WinCE、mC/OS-、VxWorks等。RTOS有QNX,pSOS,vxworks,RT-Linux等. Linux内核主要是由进程调度、内存管理、虚拟文件系统、网络接口和进程间通信等组成。3Linux用户进程:进程控制块、系统堆栈、用户堆栈、程序代码及数据段组成;Linux可以管理512个进程,进程调度的police域有:SCHED_OTHER; SCHED_FIFO; SCHED_RR。Linux的进程控制相关的系统调用函数有:fork,exit,vfork,wait,execve等。Linux系统定义了五种状态进程状态 就绪状态 TASK_RUNNING0 可中断等待状态 TASK_INTERRUPTIBLE1 不可中断等待状态 TASK_UNINTERRUPTIBLE2 停止状态、僵尸状态 TASK_ZOMBIE4 中止状态 TASK_STOPPED8从Linux的调度来看,支持非实时(普通)和实时两种进程。4Linux 虚拟文件系统维护描述整个虚拟文件系统以及实际已挂装的文件系统的数据结构。嵌入式Linux系统中常见的文件系统有:yaffs, jsffs, cramfs等。文件系统的安装必须调用mount命令,把其他子系统安装到已经存在于文件系统的空闲节点上。文件系统类型的注册函数为register filesystem,超级用户卸载文件系统使用umount命令。交换机制:将不用或暂不用的页框中的页移出,装上新的页面;linux三级分页结构5考虑到中断处理的效率,Linux的中断处理程序分为两个部分:上半部(top half)和下半部(bottom half)。由外部设备引发的中断叫外部中断,处理器响应中断请求而执行的程序模块叫中断服务例程7进程的通信与同步机制有管道、信号、消息队列、共享内存和信号量集等el 中。Linux的管道有:匿名管道和命名管道;从信号的可靠性方面,信号可以分为:可靠信号和不可靠信号。8.linux设备驱动注册的基本参数有设备名称,设备驱动的数据结构、设备号 和 次设备号。lsmod 把现在 kernel 中已经安装的modules 列出来;insmod 把某个 module 安装到 kernel.二、基本原理和方法1、嵌入式系统设备驱动程序的主要功能? 1.检测和初始化设备 2.使设备投入运行和退出服务 3.从设备接收数据,并提交给内核 4.从内核接收数据送到设备 5.检测和处理设备错误2、 Linux系统的设备分为如下三类: 1.字符设备,是指存取时没有缓存的设备,以字节为单位。 2.块设备,读写都有缓存来支持,能够随机读取,以数据块为单位。 3.网络设备,支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。3、 基于虚拟内存技术的程序执行两次映射: 1.第一次是映射到虚拟内存空间,即用虚拟地址为程序编码。 2.第二次是映射到物理内存空间,即把要运行的程序段复制到物理内存,确定程序的物理地址。4、 Buddy算法-伙伴算法 Linux对空闲内存空间管理采用Buddy算法 Buddy算法 把内存中所有页面按级2n划分,其中a=05,每个内存空间接1个页面、2个页面、4个页面、8个页面、16个页面、32个页面进行六次划分。 划分后形成了大小不等的存储块,称为页面块,简称页块。包含1个页面的页块称为1页块,包含2个页面的页块称为2页块,以此类推。 每种页块按前后顺序两两结合成一对Buddy伙伴 系统按照Buddy关系把具有相同大小的空闲页面块组成页块组,即1页块组,2页块组32页块组。 每个页块组用一个双向循环链表精心管理,共有6个链表,分别为1、2、4、8、16、32页块链表,分别挂到free-area数组上。 内存分配时,系统按照Buddy算法,根据请求的页面数free-area对应的空闲页块组中搜索。 若请求页面数不是2的整数次幂,则按照稍大于请求数的2的整数次幂的值搜索相应的页面块组。 当相应的页块组中没有可使用的空闲页块时就查询更大一些的页块组,在找到可用的空闲页面块后,分配所需页面。 当某一空闲页面块被分配后,若仍有剩余的空闲页面,则根据剩余页面的大小把他们加入到相应的页块组中。5、Slab分配器思想 小对象的申请和释放通过slab分配器来管理 Slab分配器有一组高速缓存,每个高速缓存保存同一种对象类型,如i节点缓存、PCB缓存等 内接从他们各自的缓存中分配和释放对象,系统分配对象时就从slab中获得。首先从这个cache中部分满的slab中分配,如果没有这样的slab,便从空的slab中分配,如果也没有,就创建一个新的slab来分配即可。由于每个对象在释放时几乎处于分配好并且初始化好的状态,还可以节省不少初始化的时间。 每个对象的缓存区由一连串slab构成,每个slab由一个或多个连续的物理页面构成,这些页面中包含了已分配的缓存对象,也包含了空闲对象。6、Linux 内核的主要组成部分 Linux内核主要是由进程调度、内存管理、虚拟文件系统、网络接口和进程间通信五部分组成 (1)进程调度负责控制进程对CPU的访问,调度程序使用一种策略所有的进程都能公平的访问CPU,并且确保内核在任意时刻能执行必要的操作硬件。(2)内存管理负责管理系统的物理内存,实现多进程安全共享计算机的内存。(3)虚拟文件系统通过将各种设备抽象为一种公共接口,从而屏蔽了各种硬件设备的细节,虚拟文件系统可以分为逻辑文件系统和驱动设备程序两部分。(4)网络接口提供了对各种网络标准的存取和各种硬件设备的支持,实现了对各种网络标准和网络硬件的访问,网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议;网络驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。(5)进程间通信子系统实现了系统内部进程间的多种通信机制。这五子系统相互依赖,但相对来说进程调度处在比较重要的地位。其他子系统需要挂起和恢复进程的运行都必须依靠进程调度子系统的参与。7、RT-Linux的获得及配置安装步骤1下载RT-Linux完整的源代码tar包; 2解压rtlinux源代码tar包至usrsrc目录,并patch内核; 3配置RT-Linux系统的子内核; 4建立依赖关系; 5编译内核及内核模块,并进行安装; 6安装新内核; 7配置Grub,编辑bootgrubgrub conf加上RT Linux启动选项; 8重新启动计算机,进入RT-Linux系统; 9配置RT-Linux; 10建立依赖关系(可选,如跳过则后面的make命令会自动建立依赖关系); 11编译RT-Linux内核及实时模块,并进行安装; 12最后,启动RT-Linux内核模块。8、Linux的中断处理程序(参考)P343361 1.linux是一个实时、软中断的操作系统。系统在中断控制器的配合下,为用户提供一定数量的中断通道。 2.中断分为前半部分和后半部分。中断源要满足:A.发出中断请求信号。B.要在处理器响应中断请求之后,向处理器提供中断服务例程的地址或与之相关的信息。处理器才能得知中断请求,并且按照该地址信息正确地跳转到中断服务例程,并通过该例程为外部设备提供服务。中断服务例程需注册和安装。后半部分实现机制原始使用bottom half,自linux2.4之后采用小任务机制,现在的linux2.6采用软中断(softirp)机制。 3.采用中断请求队列,即内存中尉中断源共享一个中断通道而设置的队列。9、Linux系统进程调度的总体思想实时进程优先于普通进程,实时进程以进程的紧急程度为优先顺序,普通进程以进程平等占用CPU时间为基本调度原则。10 Linux系统驱动程序框架的功能包括 1.驱动设备的注册与注销 2.设备的打开与释放 3.设备的读写操作 4.设备的控制操作 5.设备的中断和轮询处理三、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.小任务是指对要推迟执行的函数进行组织的一种机制。其数据结构为tasklet_struct,每个结构代表一个独立的小任务,其定义如下:struct tasklet_struct struct tasklet_struct *next; /*指向链表中的下一个结构*/ unsigned long state; /* 小任务的状态 */ atomic_t count; /* 引用计数器 */ void (*func) (unsigned long); /* 要调用的函数 */ unsigned long data; /* 传递给函数的参数 */;3.#include #include #include void testirq_interrupt(int,void *,struct pt_regs *);static int testirq_init(void);/*/void testirq_interrupt(int irq,void *d,struct pt_regs *regs)/*clear interrupt register for EINT5*/ SRCPND &= (0x00000010); /(1)中断源待决寄存器赋值 INTPND = INTPND; EINTPEND &= (0x00000020); /(2)外部中断待决寄存器赋值 printk(Entered an interrupt! Beginning interrupt service!n);/*/static int _init testirq_init(void)static int result;unsigned long gpfup; set_external_irq(IRQ_EINT5, EXT_FALLING_EDGE, GPIO_PULLUP_DIS); /(3)中断配置安装gpfup = ioremap(0x56000058,4); /(4)gpfup寄存器地址映射(*(volatile unsigned long *)gpfup) = 0; disable_irq(IRQ_EINT5); /(5)关中断 enable_irq(IRQ_EINT5); /(6)开中断result=request_irq(IRQ_EINT5,&testirq_interrupt,SA_INTERRUPT,testirq,NULL); /(7)中断注册if (result)printk(Cant get assigned irq %d,result=%dn,IRQ_EINT5,result);return result;printk(Testirq interrupt registered ok!n); return 0;static void _exit testirq_exit(void) disable_irq(IRQ_EINT5);free_irq(IRQ_EINT5, NULL); /(8)释放中断 printk(exit okn);module_init(testirq_init); /(9)模块初始化module_exit(testirq_exit); /(10)模块退出Yaffs根文件系统构建移植方法和步骤1. 解压busybox,使用命令#tar xvfj busybox-1.13.O.tar.bz2 -C /opt/Embeds /。2. 然后进到源码中,修改Makefile文件3. 执行#make menuconfig,开始BusyBox配置.4编译并安装BusyBox然后退出配置单,然后编译BusyBox,使用命令:#make install生成一个名为“install”的目录。5. 构建Yaffs根文件系统框架6. 根文件系统各目录中内容的编程与添加7. 使用制作yaffs文件系统的软件,把它做出yaffs文件系统格式的镜像8. 然后把制作好的镜像root 2.6.30.4.bin复制出来,烧写到开发板中,就可以运行了。针对Linux内核,如下机制严重地影响了实时性:1 Linux调度及其抢占第一,虽然Linux2.6中代码被设置了抢占点,内核已经可以抢占,因而实时性得到了加强。但是内核中仍有大量的不可抢占区域, 如由自旋锁 (spinlock)保护的临界区,以及一些显式使用preempt_disable失效抢占的临界区。还包括核心进程是不能被抢先的,即如果有Linux的核心态进程在运行时,其他进程不管其优先级多高都必须等待。2 Linux的中断中断总是最高优先级的,在系统调用中为了保护临界区资源,Linux会长时间关掉中断。Linux在一些同步操作中使用了中断关闭指令,中断关闭将增大中断延迟,降低系统的实时性。这种情况在实时系统中是不允许发生的。连续的低优先的中断可能持续占有CPU,而高优先的某些进程则无法获得CPU。在Linux中,中断(包括软中断)是最高优先级的,不论在任何时刻,只要产生中断事件,内核将立即执行相应的中断处理函数以及软中断,等到所有挂起的中断和软中断处理完毕有才执行正常的任务。因此在标准的Linux系统上,实时任务根本不可能得到实时性保证。例如,假设在一个标准Linux系统上运行了一个实时任务(即使用了SCHED_FIFO调度策略并且设定了最高的实时优先级),但是该系统有非常繁重的网络负载和I/O负载,那么系统可能一直处在中断处理状态而没有机会运行任何任务,这样实时任务将永远无法运行,抢占延迟将是无穷大。因此,如果这种机制不改,实时Linux将永远无法实现。3 linux的时钟粒度操作系统必须对时间精度和时钟中断处理的时间开销进行折中考虑,时间精度越高,意味着时钟中断越频繁。Linux通过对硬件时钟编程产生周期为100hz的时钟,中断任务调度的时间精度最高能达到10ms。这无法满足一些对时间精度要求苛刻的实时应用. 在Linux 2.6内核中还是允许在编译内核时选定不同的Hz值。在Linux26版本内核中,时钟中断发生的频率范围为501200Hz,周期不小于08ms,而工业上很多的中断周期都在几十us之内,这无法满足一些对时间精度要求苛刻的实时应用。4 Linux的虚拟内存Linux采取了虚拟内存的内存管理方式,即Linux利用交换空间让进程运行在一个比实际内存大的虚拟内存空间里。它使得操作花费的时间具有不可预测性在实时系统中是不允许的。Linux实时改造后的系统实时性较好,典型代表有:Kurt-Linux,RED-Linux,RT-Linux、RTAI和Xenomai等。RT-Linux中的实时任务在运行过程当中总是处于以下三种状态之一:1等待(Waiting)态:也叫睡眠状态或阻塞状态,是指正在执某些事件而无法得到执行,放弃CPU而处于暂停状态。此时任务处于等待队列中,待资源有效时唤醒,也可由其他任务通过信号(Singal)定时中断唤醒,唤醒后进入就绪队列并立即引起调度程序运行。2就绪(READY)态:就是除CPU以外其它运行条件都已具备,只是因为有更高优先级的任务正在使用CPU而不能投入运行,任务处于等待CPU的状态,处于就绪队列中,一旦获得CPU便立即投入运行。3运行(RUNNING)态:就是任务正在CPU上运行,在单CPU的计算机系统中,任一时刻只有一个任务处于运行状态。安装RT-Linux的方法和步骤RT-Linux是针对Linux官方原版内核发布的,因此在RT-Linux官方网站上给出的安装方法只适用于Linux原版内核,在Red Hat Linux 9(内核版本2420-8)环境下安装RT-Linux3.1,实践表明是成功的。1下载RT-Li

温馨提示

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

评论

0/150

提交评论