操作系统重难点解析

1、请分别简单说说进程与线程以及它们的区别

  • 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度分配的一个独立单元;一个进程地内存空间是共享的。
  • 线程是进程的实体,是CPU调度和分配的基本单位,它是比进程更小的能独立运行的基本单位;线程可以利用进程所拥有的资源执行调度和运算。

区别

  • 一个进程可以有多个线程,多个线程可以并发执行。
  • 同一进程的线程共享同一内存空间,但进程之间是独立的;
  • 同一进程的所有线程的数据是共享的,进程之间的数据是独立的;
  • 对主线程的修改可能会影响其他线程的行为,但是父进程的修改(除删除外)不会影响其他子进程;
  • 同一个进程的线程之间可以直接通信,但是进程之间的交流需要借助中间代理来实现。

参考进程与线程的一个简单解释进程、线程、多线程、并发、并行详解

2、线程同步的方式有哪些

  • 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问;(类似于厕所资源)
  • 信号量:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量;(类似于会议室资源)
  • 事件(信号):事件机制,允许一个线程在处理完一个任务后,主动唤醒另一个线程执行任务。通过提高操作的方式来保持多线程同步,还可以方便地实现多线程优先级地比较操作。
    参考线程同步的几种方式

3、进程的通信方式有哪些?

进程通信就是在不同进程之间传播或交换信息。主要分为:管道、系统IPC(包括消息队列、信号量、共享存储)、socket;
管道主要分为:普通管道Pipe,流管道(s_pipe),命名管道(name_pipe)

  • 普通管道是一种半双工的通信方式,数据只能单项流动,并且只能在父子进程之间流动;
  • 命名管道也是半双工的通信方式,它允许不相关的进程间进行通信;
  • 流管道可以双向传输,只能是父子进程之间流动;

系统IPC的三种方式类似,都是使用了内核里的标识符来识别

  • 消息队列是消息的链表,存放在内核中并由消息队列标识符标识;
  • 信号量是一个计数器,用来控制多个进程对资源的访问,通常作为一个锁机制;
  • 共享内存就是映射一段能被其他进程访问的内存,这段共享内存由一个进程创建,但是多个进程可以访问。是最快的IPC方式。

套接字(socket):是一种进程间通信机制,与其他通信机制不同的是,它可以用于不同进程的通信。
参考 进程间的几种通信方式

4、什么是缓冲区溢出?有什么危害?其原因是什么?

缓冲区溢出是指计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。
危害

  • 程序崩溃,导致拒绝服务;
  • 跳转并且执行一段恶意代码;

造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。

参考 缓冲区溢出攻击

5、什么是死锁?死锁产生的条件?如何避免?

在两个或多个并发进程中,如果每个进程持有某种资源而又等待其他进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。即:两个或多个进程无限期的阻塞、相互等待的一种状态。
产生死锁的四个条件:

  • 互斥条件:一个资源一次只能被一个进程使用;
  • 占有且等待条件:一个进程因请求资源而阻塞时,对已获得资源保持不放,并等待其他进程释放该资源;
  • 不剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺;
  • 循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系。

避免死锁的方法

    1. 死锁预防——确保系统永远不会进入死锁状态,即破坏其必要条件。由于互斥条件是非共享资源所必须的,不仅不能改变还应加以保证,主要是破坏其他三个条件。
    • 破坏“占有且等待”条件
      • 方法1:所有的进程开始运行之前,必须一次性申请其在整个运行过程中所需要的全部资源;
        优点:简单易实施且安全;
        缺点:因为某项资源不满足进程无法启动,而其他已经满足了的资源也不会得到利用,降低资源利用率;
      • 方法2:允许进程只获得允许初期需要的资源便开始允许,在运行过程中逐步释放掉分配到的已经使用完毕的资源,然后再去请求新的资源。
    • 破坏“不剥夺”条件
      当一个已经持有了一些资源的进程在提出新的资源请求没有得到满足时,必须释放已经保持的所有资源,待以后需要使用时再重新申请。
      实现复杂,代价大,演唱进程的周转周期。
    • 破坏“循环等待”条件
      通过定义资源类型的线性顺序来预防,可将每个资源编号,当一个进程占有编号为i的资源时,那么它下次申请资源只能申请编号大于i的资源。
      在这里插入图片描述
      低效,资源的执行速度变慢,并且可能在没有必要的情况下拒绝资源的访问,降低资源利用率。
    1. 避免死锁——在使用前进行判断,只允许不会产生死锁的进程申请资源
      死锁避免是利用额外的检验信息,在分配资源时判断是否会出现死锁,只会不会出现死锁的情况下才分配资源。<
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ThetaQing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值