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.通过破除死锁四个必要条件之一,来防止死锁产生


  • 相关阅读:
    14.18 InnoDB Backup and Recovery 备份和恢复:
    14.18 InnoDB Backup and Recovery 备份和恢复:
    php使用 _before_index() 来实现访问页面前,判断登录
    php使用 _before_index() 来实现访问页面前,判断登录
    查询方式实例演示
    查询方式实例演示
    haproxy timeout server 46000 后台超时时间
    haproxy timeout server 46000 后台超时时间
    14.10.5 Reclaiming Disk Space with TRUNCATE TABLE 回收空间使用TRUNCATE TABLE
    14.10.5 Reclaiming Disk Space with TRUNCATE TABLE 回收空间使用TRUNCATE TABLE
  • 原文地址:https://www.cnblogs.com/jamesmile/p/1683826.html
Copyright © 2011-2022 走看看