嵌入式面试题 linux应用编程常见面试题

1.什么是进程,什么是线程?

进程是系统中正在运行的一个程序,程序一旦运行就是进程。

进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的

地址空间。

线程是CPU独立运行和独立调度的基本单位。

一个进程可以拥有多个线程,线程是进程的一个实体,是进程的一条执行路径。

2.进程和线程之间的区别是什么:

第一:因为进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给它独立的

地址空间,系统开销比较大,而线程不一样,线程拥有独立的堆栈空间,但是共享数据段,它们

彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进

程快,效率高。

第二:通信机制上面,正因为进程之间互不干扰,相互独立,进程的通信机制相对很复杂,譬如

管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很

方便。

3.多进程和多线程的优缺点

进程优点:每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;

进程缺点:需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算

多进程调度开销比较大。

线程优点:能适当提高程序的执行效率,能适当提高资源的利用率。

线程缺点:每个线程与主程序共用地址空间,受限于2GB地址空间;

4.什么时候使用进程,什么时候使用线程

-> 当频繁创建和销毁的时候,当然是线程,创建进程需要的代价相比于线程是高出很多的。

-> 当考虑的安全性的问题时候,是进程.

-> 提高cpu利用率,是线程,也就是多核分布式,多机分布用进程

-> 并行操作时,是线程。

-> 需要频繁切换,且大量计算时用线程同时耗时的操作使用线程可以提高应用程序的响应。

5.线程在一定条件下,状态会发生变化。线程一共有以下5种状态:

新建状态:新创建了一个线程对象。

就绪状态:线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行

线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态的进程除CPU之外,其它

的运行所需资源都已全部获得。

运行状态:就绪状态的线程获取了CPU,执行程序代码。

阻塞状态:阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪

状态,才有机会转到运行状态。

死亡状态:线程执行完了或者因遇到error或exception退出了run()方法,该线程结束生命周期。
 

6.子进程跟父进程的关系以及区别

父进程:

指已创建一个或多个子进程的进程。

在UNIX里,除了进程0以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用

fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0

以外的进程都只有一个父进程,但一个进程可以有多个子进程。

子进程:

指的是由另一进程(对应称之为父进程)所创建的进程。子进程继承了对应的父进程的大部分

属性,如文件描述符。在Unix中,子进程通常为系统调用fork的产物。在此情况下,子进程一

开始就是父进程的副本。

7.父子进程之间的关系

关于资源:

子进程得到的是除了代码段是与父进程共享的外,其他所有的都是得到父进程的一个副本,子进程

的所有资源都继承父进程,得到父进程资源的副本,既然为副本,也就是说,二者并不共享地址空

间。两个是单独的进程,继承了以后二者就没有什么关联了,子进程单独运行。

关于文件描述符:

父子进程共享文件表项,即共同操作同一个文件,一个进程修改了文件,另一个进程也知道此文件

被修改了。

8.孤儿进程,僵尸进程和守护进程

孤儿进程:指的是在其父进程执行完成或被终止 后仍继续运行的一类进程。

僵尸进程:如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符

仍然保存在系统中,这种进程称之为僵尸进程。

守护进程:是运行在后台的一种特殊进程。Linux系统的大多数服务器就是通过守护进程实现的。

守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机都保持运行。守护进程

经常以超级用户(root)权限运行,一个守护进程的父进程是init进程,因为它真正的父进程在

fork出子进程后就先于子进程exit退出了,所以它是一个由init继承的孤儿进程。

9.进程之间通信的途径有哪些?

无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系

的进程间使用。进程的亲缘关系通常是指父子进程关系。

高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序

的子进程,这种方式我们成为高级管道方式。

有名管道 (named pipe) :有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的

通信。

消息队列( message queue ) :消息队列是由消息的链表,存放在内核中并由消息队列标识符

标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

信号量( semophore ) :信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它

常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为

进程间以及同一进程内不同线程之间的同步手段。

共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享

内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他

进程间通信方式运行效率低而专门设计的。

套接字( socket ) :套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同

机器间的进程通信。

10.进程上下文

进程上文:其是指进程由用户态切换到内核态是需要保存用户态时cpu寄存器中的值,进程状态

以及堆栈上的内容,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的

状态,继续执行。

进程下文:其是指切换到内核态后执行的程序,即进程运行在内核空间的部分。

11.中断上下文

中断上文:硬件通过中断触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,

硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。中断上文可以看作

就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被中断的进程环境。

中断下文:执行在内核空间的中断服务程序。

12. 软连接和硬连接的区别

硬链接:硬链接和原来的文件没有什么区别,而且共享一个 inode 号(文件在文件系统上的

唯一标识);

软链接:也称为符号链接,新建的文件以“路径”的形式来表示另一个文件,和Windows的快捷

方式十分相似,新建的软链接可以指向不存在的文件。

区别:文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示

的大小与原文件就不同了,BBB大小是95B,而BBBsoft是3B。因为BBB共有3个字符。

13.LINUX中的虚拟地址空间

防止不同进程同一时刻在物理内存中运行而对物理空间的争夺采用虚拟地址空间。

虚拟内存使得不同进程运行过程中,每个进程只把自己目前需要的虚拟内存空间映射存储到物理

空间中。

实际上,每个进程创建时,内核只为进程创建虚拟内存的布局,并不立即把虚拟内存和磁盘文件

之间的映射拷贝到物理内存中,等到运行时才会来拷贝数据。

14.操作系统为什么要分内核态和用户态

为了安全,在CPU的一些指令中,有的指令如果用错,就会导致整个系统崩坏,分了内核态和

用户态之后,当用户需要操作这些指令的时候,内核为其提供了API,可以通过系统调用陷入

内核,让内核去执行这些操作。

15.宏内核和微内核

宏内核:除了基本的进程,线程管理,内存管理,将文件系统,驱动,网络协议等集成在内核

里面,例如:Linux内核。

微内核:内核中只有基本的调度,内存管理,驱动,文件系统等都是用户态的守护进程去实现。
 

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌入式_笔记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值