嵌入式操作系统应用开,unixlinux程序设计

上传人:第*** 文档编号:34096584 上传时间:2018-02-20 格式:DOC 页数:12 大小:127KB
返回 下载 相关 举报
嵌入式操作系统应用开,unixlinux程序设计_第1页
第1页 / 共12页
嵌入式操作系统应用开,unixlinux程序设计_第2页
第2页 / 共12页
嵌入式操作系统应用开,unixlinux程序设计_第3页
第3页 / 共12页
嵌入式操作系统应用开,unixlinux程序设计_第4页
第4页 / 共12页
嵌入式操作系统应用开,unixlinux程序设计_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《嵌入式操作系统应用开,unixlinux程序设计》由会员分享,可在线阅读,更多相关《嵌入式操作系统应用开,unixlinux程序设计(12页珍藏版)》请在金锄头文库上搜索。

1、简述 Linux 操作系统具有的特点。答:开放的源代码,良好的兼容性,完备的帮助手册页,优秀的网络支持支持多用户多任务多处理器支持多种文件系统,独特的挂载方式确保数据的安全性将应用程序的核心实现为库,可重用性良好采用模块化分层的程序设计方法,可靠易维护2、UNIX 的两个著名版本BSD UNIX 和 系统 V UNIX1、 解释 POSIX。答:POSIX 表示可移植操作系统接口,可以提高 UNIX 环境下应用程序的可移植性。POSIX 标准定义了标准的 API,只要是符合这一标准的应用程序,就能够在多种操作系统中运行。2、 解释通用公共许可证 GPL。答:GPL 保证软件对所有用户来说是自由

2、的。遵循 GPL 的软件提供给用户时必须提供源码,一旦用户得到遵循 GPL 的软件,就能够对其任意地改写,修改之后如果要提供给其他人也必须遵循 GPL,并开放源码,允许被修改。Linux 系统下,常用的在线帮助文件有哪些?man 手册,info 手册 ,how-to 文件,Whereis whatis help apropos3、 静态库与共享库比较。linux 下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同。 静态库在程序编译时会被连接到目标代码中,目标程序运行时将不再需要该动态库,移植方便,体积较大,但是浪费空间和资源,因为所有相关的对象文件与牵涉到的库被链接

3、合成一个可执行文件。 动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入,因此体积较小,可以实现进程间的资源共享,甚至可以真正做到链接载入完全由程序员在程序代码中控制,另外将一些程序的升级变得简单,但是在程序运行时需要动态库存在。4、 程序与进程的概念程序是存储在文件中的机器指令序列,进程存在于用户空间,是运行中的程序。5、 画出 Linux 函数库调用和系统调用的示意图,简单说明系统调用(API)函数的作用。答: API 是操作系统和用户程序之间的接口,应用程序通过 API 与操作系统进行通信,使用操作系统提供的服务。API 同时保证了操作系统数据和程序的安全性。因此,AP

4、I 提供给用户安全地使用操作系统提供的服务。6、 简单说明在 Linux 程序开发过程中,利用 GCC 工具将 C 语言程序编译成一个可执行程序文件的四个步骤。答:1、预处理 2、编译 3、汇编 4、连接7、 Linux 系统下,用 C 语言编程,进行文件管理,有哪两类函数可用?试比较两类函数的优缺点。答: ANSI C 优点:1.具有丰富的函数可供使用。2.直接对内存缓冲区进行操作,可以高效的写任意长度的数据块,在数据长度满足要求时安排底层系统调用,降低的系统的开销且没有数据块大小的限制,整体的效率要比直接对硬件操作的系统调用高 3.具有更好的兼容性缺点:对系统调用进行封装,因此使用时会在库

5、函数中再调用系统调用,就一次读写相同的数据来说,效率比系统调用要低POSIX 优点:在类 UNIX 等系统中有很好的可移植性,可以直接设置对硬件的控制缺点:1.使用时会影响系统性能,如果一次只存取很少的内容,效率会很低 2.硬件会限制对底层系统调用一次能读写的数据块大小,如果数据很小,会留下空隙。3.兼容性不是很好8、 比较 POSIX 标准与 ANSI 标准 I/O 操作的效率,两者在可移植上有哪些差异,两者之间的关系是什么?有什么区别?ANSIC 和 POSIC 前者函数丰富,使用方法跟控制台读写一致,可以跨操作系统,但效率低一些,后者直接调用系统接口,效率高。但函数少,不能跨操作系统。9

6、、 与每个进程相连的各种用户 ID 和组 ID进程对应的 id:1. 实际用户 id(uid),即登陆机器或运行进程的 id。标识我们是谁。2. 有效用户 id(euid),该进程能访问哪些文件,检查有效用户 id 与文件的访问权限(所有者 ID,组 ID:所有者访问权限,组访问权限,其它访问权限),以判别进程是否能够访问该文件3. 保存的设置用户 id,由 exec 函数保存当执行一个程序文件时,进程的有效用户 ID 通常就是实际用户 ID,有效组 ID 通常是实际组 ID。10、 可执行程序文件在存储时(没有调入到内存)分为几部分,说明各段的主要内容。1、可执行代码区(text):存放 C

7、PU 执行的机器指令。2、已初始化数据区(data):包含了在程序中已经被初始化的全局变量和静态变量。3、未初始化数据区(bss):未初始化的全局变量和静态变量,在程序开始执行之前被内核初始化为 0 或空指针。11、 可执行程序文件调入到内存产生进程后,分为几个存储区域,说明各区域的主要内容与作用。(近处的地址空间)答:前三个与 10 中内容相同 4、堆区:用于动态内存分配 5、栈区(heap):由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。12、 程序出口状态 课本 119 页13、 进程的堆和栈的区别栈区用于函数内的局部变量,临时变量,程序的自动变量一般都放在这里面的。堆区是

8、动态分配的存储空间这些是我个人的理解1、栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由 OS 回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表14、 内存泄漏用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。15、 Linux 系统下,进程结束的方法有哪几种?答:1.在本进程或者其它进程中使用 kill()调用发送 SIGKILL 信

9、号。 2.进程运行过程中遇到内存段冲突,非法指令等错误,由操作系统发送相应的信号终止进程。 3.进程执行到 return 或者调用 exit()或者运行到最后自然结束。 4.执行 exec 类函数执行新的进程16、 僵死进程子进程退出时,父进程并未对其发出的 SIGCHILD 信号进行适当处理,导致子进程停留在僵死状态等待其父进程为其收尸,这个状态下的子进程就是僵死进程。17、 Linux 系统下,线程结束的方法有哪几种?答:1、调用 pthread_exit()退出。 2、调用 pthread_cancel 函数取消该线程。3、创建线程的进程退出或者整个函数结束。4、其中的一个线程执行了 e

10、xec 类函数执行新的进程。 5.线程调用 pthread_exit()或者执行到 return 或者执行完毕自然终止。 6.线程执行中出错由系统终止18、 信号概念信号时信息的载体19、 当信号发生时,进程的信号处理动作20、 信号句柄指向各种资源的无符号长整数21、 阻塞信号与忽略信号有何不同阻塞的概念与忽略信号是不同的:操作系统在信号被进程解除阻塞之前不会将信号传递出去,被阻塞的信号也不会影响进程的行为,信号只是暂时被阻止传递;当进程忽略一个信号时,信号会被传递出去,但进程将信号丢弃。22、 CPU 时间与墙钟时间时钟:外部或内部晶振输入的时钟信号,是一个方波信号 机器周期:CPU 运行

11、一个指令的时间。时钟经过锁相环后输入 CPU,锁相环功能是是输入的时钟加倍,相当于 CPU 的倍频CPU 主频= 外频 倍频外频就是你问的时钟时间,主频- cpu 时间23、 三个独立无关的间隔定时器这道题还真不知道24、 线程间通信的机制有哪几种?1.信号量 2.互斥量 3.共享全局变量25、 进程间通信的机制有哪几种?答: 本地主机通信:1.信号 2.信号量,消息队列,共享内存 3.管道(包括有名管道和无名管道) 4.共享内存网络通信:1.socket 2.rpc26、 fork 调用后,如何判断是在父进程中,还是在子进程中。在子进程中,fork 函数返回 0,在父进程中,fork 返回新

12、创建子进程的进程 ID。27、 如果父进程不调用 wait 类函数,子进程结束后,会产生什么后果?这个后果很严重的父进程创建的子进程退出后,如果父进程不调用 wait 函数回收子进程的结束信息,子进程就会变成僵尸进程这个很重要,一定要知道为什么就是应为 wait 本质作用是回收子进程28、 管道与 FIFO 的异同管道在 Unix 及 Linux 进程间通信是最基础的,很容易理解。管道就像一个自来水管,一端注入水,一端放出水,水只能在一个方向上流动,而不能双向流动。管道是典型的单向通信,即计算机网络中所说的“半双工 ”。管道又名匿名管道,所以只能用在具有公共祖先的进程之间使用,通常使用在父子进

13、程之间通信。通常是父进程创建一个管道,然后 fork 一个子进程,此后父子进程共享这个管道进行通信。FIFO 又名有名管道,相对于上述管道而言。管道没有名字,因此只能在具有共同祖先进程的各个进程之间通信,无法在无亲缘关系的两个进程之间创建一个管道进行通信。为此有了 FIFO,类似管道,也是一个单向(半双工)数据流,每个 FIFO有一个路径名与之关联,从而允许无亲缘关系的进程访问同一个 FIFO。FIFO 有mkfifo 函数创建。29、 POSIX 标准下,文件管理的基本操作函数有哪些?答:open 打开文件 close 关闭文件 read()从文件或设备中读读数据 write()向文件或者设

14、备中写数据 fcntl():传递控制信息到设备驱动程序30、 如何使用 ANSI C 标准库,实现文件拷贝操作。答:假如要从 file.in 文件中拷贝数据到 file.out 中#include #include int main()int c;FILE *in, *out; /定义两个文件流指针in = fopen(file.in, r); /in 与 file.in 文件关联,使用只读方式打开out = fopen(file.out, w); /out 与 file.out 文件关联,用只写方式打开while(c = fgetc(in) != EOF) fputc(c, out); /每

15、次循环从 file.in 中用 fgetc()读出一个字符放到 c 中,再从 c 中写入到 file.out。如果没有读到文件尾(EOF),就继续下一次循环exit(0);31、 如何使用 POSIX IO 库,实现文件拷贝操作。答:#include #include #include #include #include int main()int c50; /暂存从 file.in 中读出的字符int in, out;int nread; /存放 read()返回值,即成功读取的字符数in = open(file.in, O_RDONLY); /以只读方式打开 file.inout = op

16、en(file.out, O_CREAT | O_WRONLY, S_IRUSR | S_IWRUSR); /以只写方式打开 file.out,如果该文件不存在,就使用所有者可读可写的方式创建它while(nread = read(in, c, 50) ) 0) /请求从 file.in 中读取 50 个字符放入 c 中,并返回实际读取的字符数放入 nread 中write(out, c, nread); /将 c 中的有效字符写入 file.out,如果还有字符未读出,循环,如果返回值为 0(即已经读完了所有字符),退出循环if(nread #include #include #include #include #include #include #include #include #include #define BUFSIZE 1024#define PERMS 0666#define

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号