zoukankan      html  css  js  c++  java
  • 操作系统回忆录:进程、线程、资源调度

    此篇为操作系统的学习、回忆篇:

    一、进程

        1、意义:只是一些资源的集合。

        2、进程间通讯的方法:共享存储系统、消息传递系统、管道:以文件系统为基础。

        3、进程间同步的策略:原子操作、信号量机制、自旋锁、管程、会合、分布式系统。

    二、线程

        1、cpu和内存真正的使用者。

        2、线程同步的方法:信号量、临界区、互斥量、事件(windows编程)。

        3、线程的状态与变换:

            就绪:除了CPU的时间片,其他资源都已经准备好了。万事俱备,只欠“cpu”了。

            阻塞:如I/O操作,会引起线程阻塞。即运行的好好的,突然有“人”来了,人往往比较慢,cpu只好先把你阻塞了,如果“人离开了”(I/O操作完成),会计入 就绪状态。

            挂起:我的理解是,人为的或者外部因素,使得线程退出竞争cpu,但并不释放所占资源,进入睡眠状态,需要唤醒。

            运行:运行得到cpu的线程。

            这4个是线程最基本的状态,还可以进一步细分的。

        4、死锁产生的原因及解决办法:

              (1) 因为系统资源不足。
              (2) 进程运行推进的顺序不合适。
              (3) 资源分配不当等。

            产生死锁的四个必要条件:
      (1) 互斥条件:一个资源每次只能被一个进程使用。
      (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
      (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
      (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
       这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
         一不满足,就不会发生死锁。

          

            解决办法:

            1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。
            2.检测死锁并且恢复。
            3.仔细地对资源进行动态分配,以避免死锁。
            4.通过破除死锁四个必要条件之一,来防止死锁产生


  • 相关阅读:
    IPFS搭建&集群
    request.getInputStream() 流只能读取一次问题
    八、网页版消息推送SDK-WebSockets
    Spring boot 打包瘦身方法
    七、Mosquito 集群搭建
    org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundaryRAYPKeHKTYSNdzc1;charset=UTF-8' not supported
    RocketMQ Java 客户端实现
    RocketMQ 单机安装
    Vue.js面试题整理(转载)
    computed和watch的使用场景
  • 原文地址:https://www.cnblogs.com/jamesmile/p/1683826.html
Copyright © 2011-2022 走看看