操作系统面试考点复习整理

本来想按照模块梳理一下,但是一看也没啥体系啊,直接看真题吧

1. 进程和线程的区别

  • 面试必问,重中之重
  1. 一个线程从属于一个进程;一个进程可以包含多个线程
  2. 一个线程挂掉,对应的进程挂掉;一个进程挂掉,不会影响其他进程
  3. 进程是系统资源调度的最小单位;线程是CPU调度的最小单位
  4. 进程系统开销显著大于线程系统开销;线程需要的系统资源更少
  5. 进程在执行时拥有独立的执行单元,多个线程共享进程的内存。如代码段、数据段、扩展段;但每个进程拥有自己的栈段和寄存器组
  6. 进程切换时需要刷新TLB(Translation Lookaside Buffer,俗称快表)并获取新的地址空间,然后切换硬件上下文和内核栈,线程切换时只需要切换硬件上下文(进程硬件上下文的一个子集)和内核栈
  7. 通信方式不一样
  8. 进程适合于多核、多机分布;线程适合于多核

2. 什么是协程,协程和线程的关系

  • 协程是微线程,在子程序内部执行,可在子程序内部中断,转而执行别的子程序,在适当的时候再返回来接着执行
  1. 协程执行效率极高,协程直接操作栈几乎没有内核切换的开销,所以上下文的切换非常快,切换开销比线程更小
  2. 协程不需要多线程的锁机制,因为多个协程从属于一个线程,不存在同时写变量冲突,效率比线程高
  3. 一个线程可以有多个协程

3. 介绍一下进程之间的通信

主要有匿名管道、命名管道、信号、消息队列、共享内存、信号量、Socket

  1. 匿名管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系
  2. 有名管道:为了克服匿名管道只能用于亲缘关系的进程间通信而提出,它提供了一个路径名与之关联,以有名管道的文件形式存在与文件系统中,严格遵循FIFO,即使与有名管道创建进程不存在亲缘关系的进程只要可以访问该路径,就能够彼此通过有名管道进行通信。有名管道的名字存在于文件系统中,内容存放在内存中
  3. 信号:信号是Linux系统中用于进程互相通信或者操作的一种机制,信号可以在任何使用发给某一进程而无需知道该进程的状态;如果该进程当前并未处于执行状态,则该信号就由内核保存起来,直到该进程恢复执行并传递给它为止;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程
  4. 消息队列:是一种存放在内核中的消息链表
  5. socket套接字:不同主机之间的进程进行双向通信的端点(套接字=IP地址+端口号)

3. 介绍一下线程之间的通信

  • 锁机制、信号量机制、信号机制

4. 进程的三种基本状态

在这里插入图片描述

  • 就绪状态:当一个进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行,则此进程处于就绪状态。就绪进程可以按多个优先级划分队列
  • 运行状态:当一个进程在处理机上运行时,则称该进程处于运行状态
  • 阻塞状态:也称为等待或睡眠状态,一个进程正在等待某一事件发生(如请求或者等待I/O等)而暂时停止运行,这时即使把处理机分配给进程也无法运行

5. 孤儿进程、僵尸进程、守护进程

  • 孤儿进程:一个父进程退出,而它的一个或多个子进程还在继续运行,那么这些子进程将成为孤儿进程。孤儿进程将会被init进程(进程号为1)收养,并由init进程对它们完成状态收集工作
  • 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保留在操作系统中,这种进程称为僵尸进程
  • 守护进程:守护进程就是在后台运行,不与任何终端关联的进程,通常情况下守护进程在系统启动的时候就在运行,它们以root用户或者其他特殊用户运行,并能处理一些系统级的任务

6. 说一说kill的原理

  • kill会向操作系统内核发送一个信号(多是终止信号)和目标进程的PID,然后系统内核根据收到的信号类型,对指定进程执行相应的操作,格式为kill [信号] pid
  • kill命令只是发送一个信号,如果信号被封锁或者忽略,则kill命令会失效

7. 进程切换为什么比线程更消耗资源

  • 进程切换时需要刷新TLB并获取新的地址空间,然后切换硬件上下文和内核栈,进程切换只需要切换硬件上下文和内核栈

8. 介绍一下你知道的锁

  1. 悲观锁:它并不是一个锁,而是一种锁类型,无论是否并发竞争资源,都会锁住资源,并等待资源释放下一个线程才能获取到锁,这明显很悲观,所以叫悲观锁
  2. 乐观锁:与其对应的,当线程开始竞争资源时,不立马给资源上锁,而是进行一些前后值比对,以此来操作资源,例如常见的CAS操作,就是典型的乐观锁,它适用于多读的应用类型,这样可以提高吞吐量
  3. 自旋锁:是一种基础的同步原语,用于保障对共享数据的互斥访问,与互斥锁相比,在获取锁失败的时候不会使得线程阻塞而是一直自旋尝试获取锁,当线程等待自旋锁的时候,CPU不能做其他事情,而是一直处于查询忙等的状态,它主要适用于被持有时间短,线程不希望在重新调度上花过多时间的情况
  4. 公平锁:多个线程竞争同一把锁,如果依照先来先得的原则,那么就是一把公平锁
  5. 非公平锁:多个线程竞争锁资源,抢占锁的所有权
  6. 共享锁:多个线程可以共享这个锁的所有权,一般用于数据的读操作,防止数据被写修改;也就是说如果一个线程获取了共享锁,则其他任何线程都不能获取互斥锁,但是可以获取共享锁
  7. 死锁:指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去,此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程

9. 什么情况下会产生死锁

下面的条件只要有一个不具备,系统就不会出现死锁

  1. 互斥条件:某个资源在一段时间内只能由一个进程所占有
  2. 不剥夺条件:进程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源占有者进程自行释放
  3. 请求和保持条件:进程至少占有一个资源,但又申请新的资源,由于该资源被另外进程占有,此时该进程阻塞,但是它在等待新的资源的时候,仍继续占有已占有的资源
  4. 循环等待条件:1等待2,2等待3,…n等待1,互相等就是形成了一个循环

10. 说说自旋锁

旋锁:当一个线程尝试去获取某一把锁的时候,如果这个锁此时已经被别人获取(占用),那么此线程就无法获取到这把锁,该线程将会等待,间隔一段时间后会再次尝试获取,这种采用循环加锁 → \rightarrow 等待的机制被称为自旋锁 ( s p i n l o c k ) (spinlock) (spinlock)

  • 特点:用于临界区互斥;在任何时刻最多只能有一个执行单元获得锁;要求持有锁的处理器所占用的时间尽可能的短;等待锁的线程进入循环
  • 问题:如果某个线程持有锁的时间很长,会导致其他等待获取锁的线程进入循环等待,消耗CPU,使用不当会导致CPU利用率极高;无法满足等待时间最长的线程优先获取锁,不公平的锁就会出现“线程饥饿”问题
  • 优点:自旋锁不会使线程状态发生切换,一直处于用户态,即线程一直都是active(running)的,不会使线程进入阻塞状态,减少了不必要的上下文切换,执行速度快

非自旋锁在获取不到锁的时候会进入阻塞状态,从而进入内核态,当获取到锁的时候需要从内核态回复,需要线程上下文切换(线程被阻塞后便进入内核调度状态,这个会导致系统在用户态和内核态之间来回切换,严重影响锁的性能)

11. 介绍域名解析成IP的全过程

  1. 检查浏览器是否缓存过该域名对应的IP地址,用户通过浏览器浏览某网站的时候,浏览器会自动缓存该网站域名对应的地址,当用户再次访问的时候,浏览器会从缓存中查找该域名对应的IP地址(有大小和时间限制)
  2. 如果在缓存中没有找到IP,那么会继续查找本机系统中是否缓存过IP,如果第一个步骤没有完成对域名的解析过程,那么浏览器会去系统缓存中查找系统是否缓存过这个域名对应的地址,也可以理解为系统自己具备域名解析的基本能力。前两步都是在本机上完成的,从第三步开始向远程DNS服务器发起解析域名的请求
  3. 向本地域名解析服务系统发起域名解析的请求,如果在本机上无法完成域名的解析,那么系统只能请求本地域名解析服务系统进行解析,本地域名系统一般都是本地区的域名服务器,比如校园网的域名解析系统就在学校机房里;如果时电信、移动或者联通的网络,那么本地域名解析服务器就在本地区,由各自的运营商提供服务。大部分的解析工作到这里就结束了
  4. 向根域名解析服务器发起域名解析请求,如果本地域名服务器还没有完成解析的话,那么本地域名解析服务器将向根域名服务器发起解析请求
  5. 根域名服务器返回gTLD域名解析服务器的地址,本地域名解析向根域名服务器发起解析请求,根域名服务器返回的是所查域的通用顶级域地址
  6. 向gTLD服务器发起解析请求,本地域名解析服务器向gTLD服务器发起解析请求
  7. gTLD服务器接收请求并返回Name Server服务器,服务器接收本地域名服务器发起的请求,并根据需要解析的域名,找到该域名对应的域名服务器,通常情况下,这个服务器就是你注册的域名服务器
  8. Name Server服务器返回IP地址给本地服务器,服务器查找域名对应的地址,将地址连同值返回给本地域名服务器
  9. 本地域名服务器缓存解析结果,控制缓存时间

12. 说一说linux内核态和用户态

  • 内核态从本质上说就是内核,它是一种特殊的软件程序,控制计算机的硬件资源,例如协调CPU资源,分配内存资源,并且提供稳定的环境供应用程序运行
  • 用户态就是提供应用程序运行的空间,为了使应用程序访问到内核管理的资源例如CPU,内存,I/O,内核必须提供一组通用的访问接口,这些接口就叫系统调用
  1. 系统调用是操作系统的最小功能单位,根据不同的应用场景,不同的linux发行版本,提供的系统调用数量也不尽相同,大致在 240 − 350 240-350 240350之间,这些系统调用组成了用户态跟内核态交互的基本接口
  2. 从用户态到内核态切换可以通过三种方式,系统调用:本身是中断,但是是软件中断,跟硬件中断不同;异常:如果当前进程运行在用户态,如果这个时候发生了异常事件,就会触发切换,例如缺页异常;外设中断:当外设完成用户的请求时,会向CPU发送中断信号
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 计算机网络和操作系统是计算机科学中非常重要的两个领域,对于计算机网络和操作系统的知识掌握程度也是面试中常被问及的内容。在准备面试时,可以通过阅读和整理计算机网络和操作系统相关的面试资料来提高自己的面试准备水平。以下是关于计算机网络和操作系统面试整理PDF的回答。 计算机网络和操作系统面试整理PDF可以是一份包含计算机网络和操作系统面试经典问题、解析和答案的PDF文档。这份整理可以包括对常见的计算机网络和操作系统概念、原理、算法、协议和技术的介绍和解析,以及对这些概念的实际应用和相关的面试问题的答案。 在整理这份PDF时,可以根据自己的理解和经验,总结出常见的面试问题,并给出简洁明了、易于理解的答案。可以通过查阅相关文献、参考书籍、互联网资源和自己的学习笔记来整理这些问题和答案。同时,在整理过程中,可以对这些问题进行分类和归纳,以便于面试前快速地回顾和复习。 这份PDF的目标是帮助面试者快速了解和掌握计算机网络和操作系统相关的知识,以提高在面试中的表现和竞争力。通过学习这份整理面试者可以更好地理解计算机网络和操作系统的原理和应用,更加深入地思考和回答与这些领域相关的问题。 总之,计算机网络和操作系统面试整理PDF是一份帮助面试者准备计算机网络和操作系统面试的资料,其中包含了面试常见问题和答案,以及对计算机网络和操作系统相关知识的解析和讨论。这份整理能够帮助面试者提高面试准备水平,更好地应对计算机网络和操作系统面试问题。 ### 回答2: 计算机网络和操作系统面试整理PDF是一份综合了计算机网络和操作系统相关知识点的面试资料。这份PDF的目的是帮助求职者更好地准备计算机网络和操作系统面试。 在这份PDF中,可以查看到一些常见的面试问题和答案,这些问题涵盖了计算机网络和操作系统领域的重要知识点。通过研究这些问题和答案,求职者可以更好地了解计算机网络和操作系统的原理和应用。 PDF中还会提供一些常见的面试题型和解题思路。求职者可以通过思考和解答这些问题,来提高他们的问题解决能力和技巧。 此外,这份PDF还可能包括一些实例题和代码。通过研究这些实例和代码,求职者可以更深入地理解计算机网络和操作系统的实际应用,并能够更好地回答与实际工作相关的问题。 总之,计算机网络和操作系统面试整理PDF是一份旨在帮助求职者准备相关面试的资料。如果求职者认真学习和应用这份PDF中的知识和思路,相信他们将对计算机网络和操作系统面试有更好的准备和应对能力。 ### 回答3: 计算机网络和操作系统是计算机科学中非常重要的两个领域,对于工程师的面试准备来说,掌握这两个领域的知识非常重要。在准备面试过程中,一份整理有关计算机网络和操作系统面试题的PDF是很有帮助的。 这份PDF可以包含一些常见的计算机网络和操作系统面试题,如网络协议、网络拓扑、路由算法、数据链路层、TCP/IP协议、资源管理、进程调度、内存管理等。针对每个领域,可以列出一些重要的概念和算法,并配备相关的例子和解答。 这份PDF的好处是有组织地整理面试中常见的问题,可以帮助面试者系统地学习和复习。通过阅读这份整理面试者可以了解到常见的面试考点和重要的知识点,可以帮助面试者更加全面和深入地掌握这些知识。 此外,这份PDF还可以配备一些面试技巧和建议,在面试过程中帮助面试者更好地回答问题。例如,一些常见的面试技巧包括准备充分、自信积极、清晰简洁地表达观点等。这些技巧可以帮助面试者在面试过程中更加出色地表现自己。 总的来说,一份整理有关计算机网络和操作系统面试题的PDF对于面试者来说是非常有帮助的。它可以帮助面试者系统地学习和复习相关知识,并配备面试技巧和建议,帮助面试者在面试中取得更好的成绩。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Clarence Liu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值