嵌入式操作系统应用基础复习题解答

一、 题型和分值
1、 填空题 10分 10空
2、 单项选择题 10分 10题
3、 简答题 20分 4题
4、 操作题 10分 2题
5、 分析题 20分 2题
6、 Shell程序解释和功能说明 15分 两题
7、 程序代码标记和输出分析 15分 2题
二、 复习要点
1、 linux系统中 访问设备的方式

以文件方式访问

2、 管道的分类 返回的两个文件描述符的编号和含义

分为有名管道和无名管道 、fd[0] 用于读取管道,fd[1] 用于写入管道

3、 杀进程的命令

kill (-9强制)进程号PID

4、 超级用户显示用户进程的命令

ps -a:显示所有进程 ps -u:显示有效用户的相关进程 ps -x:列出比较完整的信息

5、 创建静态和动态库的命令

静态库的制作:(以main.c调用add()函数为例)
1.通过gcc -c add.c 生成目标文件 =》add.o
2.通过ar crs -o libadd.a add.o 生成静态库 =》libadd.a
3.通过gcc main.c -L. -ladd 链接静态库编译,生成可执行文件a.out
4.执行a.out即可
动态库的制作:
1.通过gcc -c add.c 生成目标文件 =》add.o
2.通过gcc -fPIC -shared -o libmyadd.so add.o 生成动态库文件 =》libmyadd.so
3.通过gcc main.c -L. -lmyadd 生成可执行文件 =》a.out
4,此时,运行找不到库文件,我们可以
(1)将libmyadd.so放到/usr/lib或/lib目录下
(2)通过export LD_LIBRARY_PATH=/home/linux/ych/lib 将库所在的绝对路径添加至环境变量中(通过echo $LD_LIBRARY_PATH查看此环境变量的值;通过unset LD_LIBRARY_PATH来删除此环境变量里的值)
(3)在/etc/ld.so.conf.d/下新建一个sudo vi my.conf文件,在里面写入库所在的绝对路径,保存并执行sudo ldconfig执行配置文件。

6、 Gcc生成目标文件、汇编文件、执行文件的命令

gcc -S:产生一个.s的汇编文件
gcc -c:产生一个.o的目标文件
gcc […] -o file.exe:生成 .exe可执行文件

7、 Linux中用户的分类和权限

用户分类:
1、所有者 u;
2、所属组 g;
3、其它用户 o;
4、所有用户 a;
权限:
1、r 读 4;
2、w 写 2;
3、x 执行 1;

8、 代码临界区的概念

临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待
每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。

9、 管理员创建一个用户 会在哪个目录下创建该用户主目录 指定组

/home

10、 Dd yy p 等命令的用法

dd:删除所在行
#dd:从光标所在行开始删除
yy同dd
p:将缓冲区内的字符贴到光标所在位置

11、 不保存强制退出命令

q!

12、 改变用户权限的命令和参数含义

chmod 数字 文件/目录 例:chmod 0777 base
chmod u/g/o/a (+/-/=) r/w/x 文件/目录

13、 文件描述符0 1 2 的含义

0 标准输入 STDIN_FILENO
1 标准输出 STDOUT_FILENO
2 标准出错处理 STDERR_FILENO

14、 切换到用户主目录的命令

cd ~
cd 后面不写目录等价于 cd ~
补充:
切换目录命令的使用
命令 说明
cd 目录 切换到指定目录
cd ~ 切换到当前用户的主目录
cd … 切换到上一级目录
cd . 切换到当前目录
cd - 切换到上一次目录
注意:
cd命令切换目录时,这个目录必须存在。
cd 后面不写目录等价于cd ~

15、 表示当前路径的命令

pwd

16、 进程的概念和作用

(1)①进程是可并发执行的程序,是在一个数据集合上的运行过程 ②进程是具有独立功能的程序在数据集上运行的过程,它是系统进行资源分配和调度的一个独立单位。
(2)作用: 查看系统进程,判断系统健康,杀死进程。。。。。
一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位。
特点:
Linux系统是一个多进程的系统,它的进程之间具有并行性、互不干扰等特点。也就是说,每个进程都是一个独立的运行单位,拥有各自的权利和责任。其中,各个进程都运行在独立的虚拟地址空间,因此,即使一个进程发生异常,它也不会影响到系统中的其他进程。

17、 进程通信方式有哪些各自有什么特点

1、 文件和记录锁定:在进程对共享资源进行访问前必须对其锁定,该进程访问完后再释放
2、 管道:是一种半双工的通讯方式,只能在具有亲缘关系的进程间使用
3、 有名管道:也是一种半双工的通讯方式,允许无亲缘关系进程间的通信
4、 FIFO:FIFO是一种先进先出的队列.它类似于一个管道,只允许数据的单向流动.每个FIFO都有一个名字,允许你不相关的进程访问同一个FIFO,因此也成为命名管
5、 信号量:不是用于交换大批数据,而用于多线程之间的同步.它常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源
6、 信号:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生
7、 消息队列:消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点
8、 共享内存:共享内存是最快的IPC(进程间通信)方式,它是针对其它进程间通信方式运行效率低而专门设计的

18、 VIM工作模式有几种 如何切换

命令行模式、插入模式。底行模式
在这里插入图片描述

19、 多次创建子进程时的进程树

这里是引用
在这里插入图片描述
在这里插入图片描述

20、 文件权限及管理

(1)①读权限(read) ls 、cat、more、head、tail 等命令
②写权限(write) cp 、mv、rm、touch、mkdir、>>、等命令
③执行权限(execute) cd 等命令
(2)①chmod [option] filepath:修改文件权限
option: r:读; w: 写; x: 执行; -: 表示没有权限
+:表示给具体的用户新增权限(相对当前)
-:表示删除用户的权限(相对当前)
=:表示将权限设置成具体的值(注重结果)【赋值】
②chown [-R] newuser filepath:修改文件对应属主(用户)
newuser 写法: A:B 将属主(用户)改为 A,属组(用户组)改为 B
A 将属主改为 A
:B 将属组改为 B
A:继承 A 中的所有组
ps: 此命令必须以超级用户身份执行;改文件不一定要加-R,目录一定要加

21、 创建目录 修改当前目录 创建文件 复制移动文件 压缩解压文件的命令

mkdir 目录名:创建目录
cp 要移动文件 移动位置

1、压缩文件
tar -zcvf test.tar.gz ./test/
该命令表示压缩当前文件夹下的文件夹test,压缩后缀名为test.tar.gz
如果不需要压缩成gz,只需要后缀为tar格式的,那么输入如下命令:
tar -cvf test.tar ./test/
2、解压文件
tar -zxvf test.tar.gz
该命令表示把后缀为.tar.gz的文件解压到当前文件夹下。
如果压缩文件的后缀是.tar,没有gz,则使用命令:
tar -xvf test.tar
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

22、

all : libmys.so
SRC = f1.c f2.c f3.c
TGT = $(SRC:.c=.o)
%.o : %.c
	cc -c $?
libmys.so : $(TGT)
	cc -shared -o $@ $(TGT)
clean:
	rm -f $(TGT)

理解 功能是什么 有几个规则 分别是什么 能否生产目标文件 终极目标是什么

在这里插入图片描述
(3)可以,因为规则中已经定义了目标文件和源文件的关系和生成方法
(4)终极目标:生成动态链接库 libmys.so(默认第一个目标为终极目标,而 all 中定义
了第一个目标)

23、 ls –l 显示的信息中 用户名、用户组、权限等如何识别?如何修改权限?如何修改用户?
在这里插入图片描述

24、

#!/bin/sh    //#开头的注释,指定相应的shell解释器
DIRNAME=`ls /root | grep bak`						
if [ -z "$DIRNAME" ] ; then						  
mkdir /root/bak ; cd /root/bak					    	
fi
YY=`date +%y` ; MM=`date +%m` ; DD=`date +%d`	
BACKETC=$YY$MM$DD_etc.tar.gz					
tar zcvf $BACKETC /etc							  
echo "fileback finished!"

各句的含义 和程序的功能
在这里插入图片描述

25、

#include <unistd.h>
#include <signal.h>
int ntimes=0;
main(int argc, char *argv[]) {
int pid,ppid;
int p_action( ), c_action( );

signal(SIGUSR1 , p_action);						

    switch(pid=fork( )) {						    		
		case -1: perror("fork failed?);
				exit(1);
		case 0: signal(SIGUSR1,c_action);

				ppid=getppid( );
				for ( ; ; ) ;
		default: { 
			for( ; ; ) {
					pause;

					sleep(1);
					kill(pid,SIGUSR1);					
			}
		}
	}
}
p_action( ) {
    printf("parent caught signal #%d\n",++ntimes);
}
c_action( ) {
    printf("child caught signal #%d\n",++ntimes/*, ++ltimes*/);
    int ppid;
    ppid = getppid();								
    kill(ppid, SIGUSR1);
    sleep(3);
}
`#include <unistd.h>
#include <signal.h>
//初始化循环次数
int ntimes=0;
void main(int argc, char *argv[]) {
//初始化父进程 id 和子进程 id
int pid,ppid;
//初始化父进程操作和子进程操作
int p_action( ), c_action( );
//父进程定义信号处理函数
signal(SIGUSR1 , p_action);
//判断子进程是否创建成功
switch(pid=fork( )) {
//创建失败
case -1: perror("fork failed?);
exit(1);
 //创建成功,向父进程发送信号
case 0: signal(SIGUSR1,c_action);
//将子进程 id 赋值给 ppid
ppid=getppid( );
//循环创建子进程
for ( ; ; ) ;
default: {
for( ; ; ) {
pause;
sleep(1);
//创建子进程成功后杀死子进程
kill(pid,SIGUSR1);
}
}
}
}
//定义父进程操作
p_action( ) {
 printf("parent caught signal #%d\n",++ntimes);
}
//定义子进程操作
c_action( ) {
 printf("child caught signal #%d\n",++ntimes/*, ++ltimes*/);
 int ppid;
 ppid = getppid();
kill(ppid, SIGUSR1);
//等待 3 秒
 sleep(3);
}

`

程序各句的含义和程序的功能。
在这里插入图片描述
在这里插入图片描述

26、 创建进程、线程的函数

创建进程
函数原型
#include <unistd.h>
pid_t fork(void);
(1)函数功能
从调用该函数的进程复制出子进程,被复制的进程则被称为父进程,复制出来的进程称为子进程。
(2)函数参数:无参数。
(3)函数返回值
1)父进程的fork,成功返回子进程的PID,失败返回-1,errno被设置。
2)子进程的fork,成功返回0,失败返回-1,errno被设置。

线程创建
在这里插入图片描述

27、 终止程序运行的快捷键

ctrl-C:终止(非中止)程序,回到命令行提示符下
ctrl-Z:挂起程序
ctrl-D : 相当于 exit,退出(关闭)当前命令行界面

28、 删除文件/目录命令 网络地址查看命令

删除文件夹: rm [option] dir
option: -i: 删除前确认是否删除(interactive)
-f: 即使目录为只读,也是直接删除,无需确认(force)
-r: 删除目录及其目录下所有(recursive)
-v: 显示删除的过程(verbose)
option 可以组合使用
删除文件
rm -rf 文件 1 文件 2 文件 3 ……
网络地址查看命令: ifconfig,开头的为网卡名,

29、 TCP UDP的区别
在这里插入图片描述

30、 Rmdir无法删除的原因
在这里插入图片描述

31、 Linux概念 创始人 linux发展的依赖支柱有哪些在这里插入图片描述

32、 Linux文件类型有哪些 分别是什么 有什么相同和不同
在这里插入图片描述

*33、 登录系统 查看进程 退出系统的操作过程

这里是引用

34、 创建用户设置密码 删除用户的操作*

在root下进行
useradd zheng:创建
passwd zheng:设密码
deluser zheng:删除
在这里插入图片描述

35、 查找文件的命令用法

find:
find . -name “.c" | wc -l :显示有多少.c文件
find . -name "
.c” | xargs wc -l :显示.c文件有多少行
find (. )-name 文件名 :查找文件

grep:过滤 cat .c文件名 | grep -n 词:在.c文件中查看有这个词的语句 -n 显示行号

ls | grep 词:过滤出所要找的词

36、 升级安装包的命令

sudo apt-get update或者apt-get upgrade

37、 PATH变量的作用、如何获得其值 可不可以包含当前目录 如何执行当前目录下的可执行文件

这里是引用

38、

#!/bin/bash                   
dir=$1                      
if [ -d $dir ]                  
then
  cd $dir                    

  for file in *                 
  do
if [-f $file ]                   
then 
cat $file                     
echoend of file $file”
    fi
  done
  else
echo “bad directory name $dir”   
fi

分析各句含义和程序功能

这里是引用
fi:结束if语句

39、编写shell程序 求键盘输入的100个数的和、最大值、最小值

这里是引用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&*Savior

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值