2023年8月2日发(作者:)
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个字符。中的虚拟地址空间防⽌不同进程同⼀时刻在物理内存中运⾏⽽对物理空间的争夺采⽤虚拟地址空间。虚拟内存使得不同进程运⾏过程中,每个进程只把⾃⼰⽬前需要的虚拟内存空间映射存储到物理空间中。实际上,每个进程创建时,内核只为进程创建虚拟内存的布局,并不⽴即把虚拟内存和磁盘⽂件之间的映射拷贝到物理内存中,等到运⾏时才会来拷贝数据。14.操作系统为什么要分内核态和⽤户态为了安全,在CPU的⼀些指令中,有的指令如果⽤错,就会导致整个系统崩坏,分了内核态和⽤户态之后,当⽤户需要操作这些指令的时候,内核为其提供了API,可以通过系统调⽤陷⼊内核,让内核去执⾏这些操作。15.宏内核和微内核宏内核:除了基本的进程,线程管理,内存管理,将⽂件系统,驱动,⽹络协议等集成在内核⾥⾯,例如:Linux内核。微内核:内核中只有基本的调度,内存管理,驱动,⽂件系统等都是⽤户态的守护进程去实现。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1690958047a472903.html
评论列表(0条)