美文网首页面试
操作系统面试总结

操作系统面试总结

作者: 闭门造折 | 来源:发表于2018-10-18 23:46 被阅读4次

    题目来源牛客网文章——《感谢牛客网!发一波面经!》
    索引:

    Q Title
    1 进程和线程的区别?
    2 进程间通信的方式有什么?线程间通信的方式有什么?

    Q1:进程和线程的区别?

    参考资料《进程和线程的主要区别(总结)》

    进程 线程
    根本区别 操作系统资源分配基本单位任务调度和执行的基本单位 任务调度和执行基本单位
    转换开销 每个进程都有独立代码和数据空间,程序间切换会有较大开销 线程可看做轻量级的进程。同一类线程共享代码和数据空间,每个线程拥有独立的程序计数器和运行栈,切换开销小
    所处环境 操作系统中可以有多个进程 一个进程中可以有多个线程
    内存分配 每个进程都有分配的内存 不分配内存,线程使用的资源来自于所属进程,线程组之间共享资源

     
     
     
     
     

    Q2:进程间通信的方式有什么?线程间通信的方式有什么?

    一、进程间通信

    参考资料《进程间的五种通信方式介绍》

    总结

    管道:速度慢,容量有限,只能父子进程通信
    FIFO:任何进程间都可以通信,但是速度慢
    消息队列:容量受系统限制,且需要考虑上次未读完内容。
    信号量:不能传递复杂消息,只能用于同步
    共享内存:容易控制容量,速度快,但要保持同步。

    管道

    半双工:数据只能在一个方向流动,有固定读端和写端
    仅能用于亲缘关系进程间通信:父子进程或兄弟进程
    只存在于内存:可以看做特殊的文件,也可以用read和write。但是他不是普通的文件,并不输入任何文件系统。

    FIFO

    可以在无关进程之间通信
    有路径名,以特殊设备文件形式存在于文件系统

    消息队列

    消息的链接列,存放在内核
    面向记录,消息有特定格式特定优先级
    独立于发送和接收进程,进程终止,消息队列中内容不会消失
    可以实现消息随机查询,消息不一定按先入先出读取,也可以按消息类型读取

    信号量

    用于进程间同步,在进程间传递数据需要结合共享内存
    基于操作系统PV操作,程序对信号量操作是原子
    每次操作可加减任意值
    支持信号量组

    共享内存

    两个或多个进程,共享一个给定的存储区
    共享内存是最快的IPC,因为进程直接对内存存取
    多个线程可以同时操作,所以需要同步
    信号量+共享内存通常同时使用,信号量用于同步对共享内存的访问

    二、线程间通信

    同步

    多个线程通过synchronized通讯,类似于共享内存

    while轮询

    线程A不断改变条件,线程B不断查看条件是否满足需求(比方说=5),从而实现通讯。
    效率不高,因为B一直在查看,没做别的

    wait/notify

    进入阻塞,而不是像轮询一样一直占用CPU资源

    管道通信

    通过管道,将一个线程的消息发送个另一个线程

    相关文章

      网友评论

        本文标题:操作系统面试总结

        本文链接:https://www.haomeiwen.com/subject/popjzftx.html