操作系统面试题汇总

参考资料

帅地玩编程-校招|面试|学习路线,你都可以在这里找到 (iamshuaidi.com)https://www.iamshuaidi.com/(3条消息) 操作系统面试题_NuanShuTT的博客-CSDN博客_操作系统面试题https://blog.csdn.net/NuanShuTT/article/details/107908519?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164273780916780274161961%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164273780916780274161961&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-107908519.pc_search_insert_es_download&utm_term=%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E9%9D%A2%E8%AF%95%E9%A2%98&spm=1018.2226.3001.4187

进程和线程的概念以及区别

进程:进程是系统进行资源分配和调度的一个独立单位,是系统中的并发执行的单位

线程:是进程的一个实体,也是CPU调度和分派的基本单位。

区别:

  1. 进程是资源分配的最小单位,而线程是CPU调度的最小单位。
  2. 创建进程或撤销进程,系统都要为之分配或回收资源,操作系统开销远大于创建或撤销进程时的开销。
  3. 不同进程地址空间相互独立,同一进程内的线程共享同一地址空间。一个进程的线程在另一个线程内是看不见的。
  4. 进程之间不会相互影响,而一个线程挂了可能导致整个进程挂掉。

什么是守护进程?

守护进程是运行在后台的一种特殊进程,它是独立于控制终端的,并周期性执行某些任务。

什么是孤儿进程?

如果父进程先退出,子进程还没退出,那么子进程的父进程将变为init进程。

一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

什么是僵尸进程?

如果子进程先退出,父进程还没退出,那么子进程必须等到父进程捕获到了子进程的退出状态才真正结束,否则这个时候子进程成为僵尸进程。

用户级线程和内核级线程

  • 用户级线程:对于这类线程,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。在应用程序启动后,操作系统分配给该程序一个进程号,以及其对应的内存空间等资源。应用程序通常先在一个线程中运行,该线程被成为主线程。在其运行的某个时刻,可以通过调用线程库中的函数创建一个在相同进程中运行的新线程。用户级线程的好处是非常高效,不需要进入内核空间,但并发效率不高。
  • 内核级线程:对于这类线程,有关线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码,只能调用内核线程的接口。内核维护进程及其内部的每个线程,调度也由内核基于线程架构完成。内核级线程的好处是,内核可以将不同线程更好地分配到不同的CPU,以实现真正的并行计算。

并行和并发的区别

  • 并行:同一时刻执行多个任务
  • 并发:同一时间段执行多个任务

编译有哪些阶段

  1. 预处理阶段:处理以#开头的预处理命令
  2. 编译阶段:翻译成汇编文件
  3. 汇编阶段:将汇编文件翻译成可重定位目标文件
  4. 链接阶段:将可重定位目标文件和printf.o等单独预编译好的目标文件进行合并,得到最终的可执行目标文件

进程状态(五状态)

  • 在五状态模型里面,进程一共有5中状态,分别是创建、就绪、运行、终止、阻塞。
  • 运行状态就是进程正在CPU上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。
  • 就绪状态就是说进程已处于准备运行的状态,即进程获得了除CPU之外的一切所需资源,一旦得到CPU即可运行。
  • 阻塞状态就是进程正在等待某一事件而暂停运行,比如等待某资源为可用或等待I/O完成。即使CPU空闲,该进程也不能运行。

运行态→阻塞态:往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的。

阻塞态→就绪态:则是等待的条件已满足,只需分配到处理器后就能运行。

运行态→就绪态:不是由于自身原因,而是由外界原因使运行状态的进程让出处理器,这时候就变成就绪态。例如时间片用完,或有更高优先级的进程来抢占处理器等。

就绪态→运行态:系统按某种策略选中就绪队列中的一个进程占用处理器,此时就变成了运行态。
 

进程之间通信的方式

管道

  • 半双工
  • 只能用于父子进程、兄弟进程之间,或者是有亲缘关系的进程
  • 管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,只存在于内存中

命名管道

  • FIFO可以在无关进程之间交换数据
  • FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中

消息队列

  • 消息队列是消息的链接表,存放在内核中。一个消息队列有标识符ID来标识。
  • 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级
  • 消息队列独立于发送和接收数据。进程终止的时候,消息队列及其内容不会被删除
  • 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按信息的类型读取

信号量

  • 信号量(semaphore)是一个计数器。用于实现进程间的互斥与同步,而不是用于存储进程间通信数据;
  • 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存;

  • 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作;

  • 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数;

  • 支持信号量组。

共享内存

  • 共享内存,指两个或多个进程共享一个给定的存储区。
  • 共享内存是最快的一种IPC,因为进程是直接对内存进行存取

进程调度算法

  1. 先来先服务
  2. 短作业优先
  3. 最短剩余时间优先
  4. 时间片轮转法
  5. 优先级调度算法
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值