嵌入式Linux实时操作系统习题总结

第1章

1.嵌入式系统是指操作系统和功能软件集成于计算机硬件系统之中。嵌入式系统一般有3个主要的组成部分:硬件、实时操作系统以及应用软件。

2.嵌入式系统的三要素是嵌入、专用、计算机;即以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统 。

3. 目前国际较为知名的有:VxWorks、NeutrinoRTOS、Nucleus Plus、 OS/9、VRTX、LynuxOS,RTLinux、BlueCat RT等。

4.嵌入式系统一般由硬件层、中间层、软件层和功能层组成。其作用分别如下:

(1)硬件层 :由嵌入式微处理器、外围电路和外设组成。操作系统和应用程序都可以固化在ROM或者Flash中。为方便使用,有的模块在此基础上增加了LCD、键盘、USB接口,以及其他一些功能的扩展电路。

(2)中间层 :硬件层与软件层之间为中间层,其作用将系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关;

(3)软件层 :主要是操作系统,有的还包括文件系统、图形用户接口和网络系统等。操作系统是一个标准的内核,将中断、I/O、定时器等资源都封装起来,以方便用户使用。

(4)功能层 :由基于操作系统开发的应用程序组成,用来完成对被控对象的控制功能。

5.非占先式调度法也称作合作型多任务(cooperative multitasking),各个任务彼此合作共享一个CPU。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。当系统响应时间很重要时,要使用占先式(preemptive)内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了。

6.在实时系统中,如果系统在指定的时间内未能实现某个确定的任务,会导致系统的全面失败,这样的系统被称硬实时系统。在弱实时系统中,超时却不会发生致命的错误。其实时性的要求比硬实时系统要差一些。

7.嵌入式系统的设计步骤及各部分的主要工作如下。

(1)需求分析阶段,罗列出用户的需求;

(2)体系结构设计阶段,描述系统的功能如何实现;

(3)详细设计阶段,进行硬件系统与软件系统的分类划分,以决定哪些功能用硬件实现,哪些用软件实现;

(4)系统集成,把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进在设计过程中的错误;

(5)系统测试,对设计好的系统进行测试,看其是否满足给定的要求。

8.Linux作为嵌入式操作系统的优势主要有以下几点:

(1)可应用于多种硬件平台。

(2)Linux的高度模块化使添加部件非常容易。

(3)Linux是一个和Unix相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件的一种通用操作系统。

(4)Linux可以随意地配置,不需要任何的许可证或商家的合作关系。

(5)Linux带有Unix用户熟悉的完善的开发工具。其强大的语言编译器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。

9. Linux执行进程调度一般是在以下情况发生的:

(1)正在执行的进程运行完毕;

(2)正在执行的进程调用阻塞原语将自己阻塞起来进入等待状态;

(3)正在执行的进程调用了P原语操作,从而因资源不足而被阻塞;

(4)执行中的进程提出I/O请求后被阻塞;

(5)系统分配的时间片已经用完;

(6)就绪队列中的某个进程的优先级变得高于当前运行进程的优先级。

第4章

1、Linux 内核的编译菜单有好几个版本,运行:

(1)make config:进入命令行,可以一行一行的配置,但使用不十分方便。

(2)make menuconfig:大多数开发人员使用的Linux 内核编译菜单,使用方便。

(3)make xconfig:在2.4.X 以及以前版本中xconfig 菜单是基于TCL/TK 的图形库的。

2、在完成内核的裁减之后,内核的编译就只要执行以下几条命令:

make clean 编译内核之前先把环境给清理干净。

make dep 编译相关依赖文件

make zImage 创建内核镜像文件

make modules 创建内核模块。

make install 把相关文件拷贝到默认的目录。

3、此命令是装载压缩映像文件zImage到flash存储器中,地址是kernel分区,并采用xmodem传输协议。

4、此命令是设置网卡1的地址192.168.1.1,掩码为255.255.255.0,不写netmask参数则默认为255.255.255.0。

5、此命令将nfs服务的共享目录sharedir加载到/mnt/nfs。

6、此命令是装载根文件系统root.cramfs到flash存储器中,地址是根文件系统分区,并采用xmodem传输协议。

7、这个命令的操作同时进行了分区和格式化,0~128K存放vivi,128K~192K存放VIVI控制台指令,192K~1216K存放kernel,1216K~4288K存放root,其余部分存放应用程序。

第6章

1.使用虚拟地址寻址整个系统的主存和辅存的方式在现代操作系统中被称为虚拟内存。 虚拟内存的管理方法使系统既可以运行体积比物理内存还要大的应用程序,也可以实现“按需调页”策略,既满足了程序的运行速度,又节约了物理内存空间。

2.进程内存区域涉及到5种数据段,即:

①代码段:代码段是用来存放可执行文件的操作指令。

②数据段:数据段用来存放可执行文件中已初始化全局变量。

③BSS段:BSS段包含了程序中未初始化的全局变量。

④堆(heap):用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。

⑤栈:栈是用户存放程序临时创建的局部变量。

3.在Linux系统中,内核在最高级执行,也称为“系统态”,在这一级任何操作都可以执行。而应用程序则执行在最低级,即所谓的“用户态”。在这一级处理器禁止对硬件的直接访问和对内存的未授权访问。模块是在所谓的“内核空间”中运行的,而应用程序则是在“用户空间”中运行的。它们分别引用不同的内存映射,也就是程序代码使用不同的“地址空间”。

4.共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。

5.内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时,挂起当前正在运行的进程。

第9章

1.参考答案:

Mutex互斥量,用于操作某个临界资源时对该资源上锁,以实现互斥地对独占资源的使用。 Semophore信号灯,信号灯内有一计数器,可以用于对多个同类资源的分配。

Condition条件变量,条件变量用于等待信号。当一个线程需要等待某个信号时,就可到条件变量上等待,当信号具备时,系统会唤醒该线程继续运行。

2.参考答案:

本地:共享内存+信号量, 适合于大量数据传输。Linux支持系统V和POSIX的共享内存和信号量。(5分)

远程:Socket+应用协议。适合于跨网络的(大量)数据传输。Linux支持BSD的socket。应用层协议需要自行设计。(5分)

3.答案要点:程序是编译后形成的可执行代码,是静止的。进程是程序的一次执行,是活动的。线程是进程的可执行单元,同一进程的不同线程共享进程的资源和地址空间。

4.两种实现方法,一种是继承Thread,另外一种是实现接口Runnable。

同步的实现方法有两种,分别是synchronized, wait与notify。用synchronized可以对一段代码、一个对象及一个方法进行加锁。用wait与notify可以使对象处于等待及唤醒方式导致同步,因为每个对象都直接或间接的继承了Object类。

5、什么是BootLoader?主要有几种工作模式及主要功能是什么?

答:

Bootloader就是操作系统内核运行的一段小程序,完成进行初始化系统硬件设置的任务,(2分)

分为启动加载模式和下载模式。

(1启动加载模式

启动加载(Boot laoding)模式是指 Bootloader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。(2分)

(2)下载模式

在下载模式下,目标机上的 Bootloader 将先通过串口连接或网络连接等通信手段从宿主机下载文件。(2分)

6、 简述Bootloader有何作用?

答案要点:(1)首先,bootloader是在特定硬件平台运行的程序,严重依赖于硬件平台,需

要移植;(2)是系统上电之后,第一个运行的程序,系统在上电或复位时通常都从地址 0x0 处开始执行,而在这个地址处安排的通常就是系统的 Boot Loader 程序;(3)bootloader程序的设计目标是启动嵌入式操作系统,嵌入式操作系统的启动需要一定的条件,这些条件由bootloader来满足;(4)Bootloader一般具有对存储器和网络接口操作的功能;如擦除、读写Flash,通过USB、串口下载文件等

 

第二篇:嵌入式Linux串口应用编程总结

一、 文件I/O编程

1.不带缓存与带缓存的区别

带缓存:系统自动在内存区为每一个正在使用的文件开辟一个缓冲区,从内存向I/O口输出数据时必须先送到内存中的缓冲区,装满缓冲区后才一起送到I/O口。参见《C语言》P310

2.基本函数

掌握函数函数原型,参数选项,函数返回值

open

close

read

write

lseek

了解基本功能

fcntl

select

3. serial.c

int open_port(char *port)

void close_port

fd = open(port,O_RDWR|O_NOCTTY) close(fd)

int set_port(pport_info p_info)

1. 保存原先串口配置

tcgetattr( fd,&oldtio)

2. 激活选项有CLOCAL和CREAD,CLOCAL和CREAD 分别用于本地连接和接受使能 newtio.c_cflag |= CLOCAL | CREAD;

3. 设置波特率

cfsetispeed(&newtio, B9600);

cfsetospeed(&newtio, B9600);

4. 设置字符大小

newtio.c_cflag &= ~CSIZE;

5. 设置奇偶校验位

case 'O': //奇数

newtio.c_cflag |= PARENB;

newtio.c_cflag |= PARODD;

newtio.c_iflag |= (INPCK | ISTRIP);

break;

case 'E': //偶数

newtio.c_iflag |= (INPCK | ISTRIP);

newtio.c_cflag |= PARENB;

newtio.c_cflag &= ~PARODD;

6. 设置停止位

newtio.c_cflag |= CS8;

7. 设置最少字符和等待时间

newtio.c_cc[VTIME] = 0;

newtio.c_cc[VMIN] = 0;

8. 处理要写入的引用对象

tcflush(fd,TCIFLUSH);

9. 激活配置

tcsetattr(fd,TCSANOW,&newtio)

常用设置:串口 COM1; 波特率 9600; 奇偶校验 无; 数据位 8;停止位 1; 数据流控制 无;

1.什么是比特率 什么是波特率 他们有什么联系和区别

波特率(BaudRate),模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量。如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒偶尔会产生错误。 比特率表示单位时间(1秒)内传送的比特数bps(bit per second,位/秒)的速度。

比特率和波特率之间的换算关系如下:比特率 = 波特率 * log2n

在二进制中,n=2,所以比特率 = 波特率。

比特率是数字信号的传输速率:单位时间内所传输的二进制代码的有效位数。单位:比特/秒(bps)或千比特/秒(kbps)。

波特率是调制速率(又称波形速率):线路中每秒传送的波形的个数。单位:波特(baud)。调制速率B是波形周期T 的倒数:B = 1/T

相关推荐