【30】C++岗位求职面试八股文第三十篇(操作系统)

系列文章目录

第一篇:语言基础

第二篇:设计模式

第三篇:数据库

第四篇:计算机网络

第五篇:操作系统

第六篇:LInux

第七篇:数据结构

第八篇:智力题

[21]怎么回收线程?有哪几种方法?

1.等待线程结束:int pthread_join(pthread_t tid, void retval);2.结束线程:**pthread_exit(void *retval);,结束某一个线程,资源不收回,得所有线程都结束(因为多个线程共享一个进程的资源)3.int pthread_detach(pthread_t tid);线程一旦终止立刻收回,与pthread——join二选一

[22]虚拟内存的目的是什么?

虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。

[23]内存交换和覆盖有什么区别?

(内存交换是不同进程间进行进程的换入换出,内存覆盖是同一进程间段的换入换出)

交换技术主要是在不同进程(或作业)之间进行,而覆盖则用于同一程序或进程中

[24]内存的覆盖是什么?有什么特点(一个进程不同段之间覆盖)

由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可以把用户空间分成为一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,其余部分按照调用关系分段,首先将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统将其调入覆盖区,替换覆盖区中原有的段。

覆盖技术的特点:是打破了必须将一个进程的全部信息装入内存后才能运行的限制,但当同时运行程序的代码量大于主存时仍不能运行,再而,大家要注意到,内存中能够更新的地方只有覆盖区的段,不在覆盖区的段会常驻内存

[21]内存交换是什么?有什么特点?(不同进程交换)区别与缺页中断的换入换出

交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)

换入:把准备好竞争CPU运行的程序从辅存移到内存。换出:把处于等待状态(或CPU调度原则下被剥夺运行权力)的程序从内存移到辅存,把内存空间腾出来

[26]局部性原理你知道吗?主要有哪两大局部性原理?各自是什么?

主要分为时间局部性和空间局部性。

时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;

空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。

[27]进程组

进程组就是多个进程的集合,其中肯定有一个组长,其进程PID等于进程组的PGID。只要在某个进程组中一个进程存在,该进程组就存在,这与其组长进程是否终止无关

[28]作业

一个前台作业可以由多个进程组成,一个后台也可以由多个进程组成,shell可以运行一个前台作业和任意多个后台作业,这称为作业控制当我们在前台新起了一个作业,shell就被提到了后台,因此shell就没有办法再继续接受我们的指令并且解析运行了。 但是如果前台进程退出了,shell就会有被提到前台来,就可以继续接受我们的命令并且解析运行。作业与进程组的区别:如果作业中的某个进程有创建了子进程,则该子进程是不属于该作业的。 一旦作业运行结束,shell就把自己提到前台(子进程还存在,但是子进程不属于作业),如果原来的前台进程还存在(这个子进程还没有终止),他将自动变为后台进程组

[29]会话

会话(Session)是一个或多个进程组的集合。一个会话可以有一个控制终端。在xshell或者WinSCP中打开一个窗口就是新建一个会话

[30]进程终止的几种方式5

1.main函数的自然返回,return2、调用exit函数,属于c的函数库3、调用_exit函数,属于系统调用4、调用abort函数,异常程序终止,同时发送SIGABRT信号给调用进程。5、接受能导致进程终止的信号:ctrl+c (^C)、SIGINT(SIGINT中断进程)

[31]Linux中异常和中断的区别

中断中断是由硬件设备产生的,而它们从物理上说就是电信号,之后,它们通过中断控制器发送给CPU,接着CPU判断收到的中断来自于哪个硬件设备(这定义在内核中),最后,由CPU发送给内核,有内核处理中断

异常异常是由CPU产生的,同时,它会发送给内核,要求内核处理这些异常

相同点• 最后都是由CPU发送给内核,由内核去处理• 处理程序的流程设计上是相似的

不同点• 产生源不相同,异常是由CPU产生的,而中断是由硬件设备产生的• 内核需要根据是异常还是中断调用不同的处理程序• 中断不是时钟同步的,这意味着中断可能随时到来;异常由于是CPU产生的,所以它是时钟同步的• 当处理中断时,处于中断上下文中;处理异常时,处于进程上下文中

[32]系统调用有哪些

系统调用是计算机程序从操作系统的内核请求服务的程序化方式,操作系统提供给应用程序(程序员/编程人员)使用的接口

设备 文件 内存 进程控制和通信

[33]终端退出,终端运行的进程会怎样

终端在退出时会发送SIGHUP给对应的bash进程,bash进程收到这个信号后首先将它发给session下面的进程,如果程序没有对SIGHUP信号做特殊处理,那么进程就会随着终端关闭而退出

[34]如何让进程后台运行

命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了

[35]一般情况下在Linux/windows平台下栈空间的大小

Linux环境下有操作系统决定,一般是8MB,8192KB,通过ulimit命令查看以及修改Linux下是由系统环境变量来控制栈的大小的。

[36]程序从堆中动态分配内存时,虚拟内存上怎么操作的

页表:是一个存放在物理内存中的数据结构,它记录了虚拟页与物理页的映射关系在进行动态内存分配时,例如malloc()函数或者其他高级语言中的new关键字,操作系统会在硬盘中创建或申请一段虚拟内存空间,并更新到页表(分配一个页表条目(PTE),使该PTE指向硬盘上这个新创建的虚拟页),通过PTE建立虚拟页和物理页的映射关系。

[37]抖动你知道是什么吗?它也叫颠簸现象

刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出外存,这种频繁的页面调度行为称为抖动,或颠簸。产生抖动的主要原因是进程频繁访问的页面数目高于可用的物理块数(分配给进程的物理块不够)

为进程分配的物理块太少,会使进程发生抖动现象。为进程分配的物理块太多,又会降低系统整体的并发度,降低某些资源的利用率

[38]从堆和栈上建立对象哪个快?

• 分配和释放,堆在分配和释放时都要调用函数(malloc,free),比如分配时会到堆空间去寻找足够大小的空间(因为多次分配释放后会造成内存碎片),这些都会花费一定的时间,而栈却不需要这些。

• 访问时间,访问堆的一个具体单元,需要两次访问内存,第一次得取得指针,第二次才是真正的数据,而栈只需访问一次。另外,堆的内容被操作系统交换到外存的概率比栈大,栈一般是不会被交换出去的

[39]常见内存分配方式有哪些

(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

[40]常见内存分配内存错误

(1)内存分配未成功,却使用了它。常用解决办法是,在使用内存之前检查指针是否为NULL。如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。

(2)内存分配虽然成功,但是尚未初始化就引用它。

(3)内存分配成功并且已经初始化,但操作越过了内存的边界。例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for循环语句中,循环次数很容易搞错,导致数组操作越界。

(4)忘记了释放内存,造成内存泄露。程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理)。

(5)释放了内存却继续使用它。• 程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。• 函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。• 使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。

[续]C++岗位求职面试八股文第三十一篇(操作系统)

更多关于算法题解、软件开发面经、机器学习算法面经、各企业面试问题记录,关注Fintech砖,持续更新中。https://www.nowcoder.com/users/873777317

企业面试记录专栏https://www.nowcoder.com/creation/manager/columnDetail/0YBWnm

机器学习面经专栏https://www.nowcoder.com/creation/manager/columnDetail/j8nNy0

软件开发面经专栏https://www.nowcoder.com/creation/manager/columnDetail/0aXKaM

更多校园招聘常见面试问题(开发、算法、编程题目)参见CSDN博客:http://t.csdn.cn/V4qbH

欢迎关注、收藏、点赞后进行问题咨询及秋招建议

#牛客解忧铺##晒一晒我的offer##牛客在线求职答疑中心##如何判断面试是否凉了##2023毕业生求职有问必答#
软件开发八股面经 文章被收录于专栏

包含C++、操作系统、数据库、计算机组成、计算机网络、设计模式、操作系统、牛客网服务器项目、综合智力题等

全部评论

相关推荐

04-21 11:22
已编辑
中华女子学院 UE4
耐心学习_佩可officical:直接举报他,佬,违反劳动法我记得boss会下架
点赞 评论 收藏
分享
评论
7
25
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务