操作系统复习

前言

总结一下操作系统中一些比较重要的知识点。

进线程总结

进程是资源分配的基本单位,是调度运行的基本单位。在创建进程时,系统会给它分配所需要的空间,设备资源等,并且将其放入就绪队列中,等待CPU的到来,当请求到CPU时,就会开始运行。

一般来讲,进程的状态可以分为一下几个:

jinch

也符合上述的情况,当创建时就会放入就绪队列,当获取到CPU资源时就可以开始运行,如果时间片到了,就返回等待CPU再次调度。 如果遇到中断等事件就会转而去执行其他进程,相应的也放入到就绪队列中。执行完后释放资源退出即可。

线程是运算执行的最小单位,也是处理机调度的最小单位,一般来看,如果将进程看作是一个要完成的任务,那么线程就是其中需要完成的许多子任务。举个例子,我们将调用数据库这一操作看作一个进程,那么其中执行查询操作就可以看作一个线程,如果多个子查询操作之间不会互相影响,那么处理机就可以同时执行多个查询操作,这就是多线程执行方式。

进线程对比如下:

duibi

那么何时使用进程,何时使用线程呢?可以根据实际情况做出选择。

  1. 如果是需要频繁删除创建的任务则可以使用线程,因为进程所占用的资源多,创建需要消耗更多的cpu资源。

  2. 如果需要大量的计算,优先使用线程。

  3. 强相关的处理用线程,弱相关的处理用进程

  4. 如果实际情况下都可使用,可以根据自身熟悉情况决定使用进程还是线程。

进程间通信方式及优缺点

管道:分为有名管道和无名管道,无名管道是一种半双工的通信方式,只允许数据单向流动,且只允许数据在有亲缘关系的进程间流动(指父进程和子进程)。有名管道也是采用半双工方式进行通信,但是允许在非亲缘关系的进程间进行数据流动。

优点:简单方便。 缺点:缓冲空间有限。

信号量是一个计数器,可以实现进线程中对数据的封锁访问。是一种锁机制。一般用在当所使用的数据处于临界区时一个进程访问数据时使用信号量对数据加锁,结果访问后解除锁机制。

优点:可以同步进线程,实现对数据的正确访问。缺点:信号量有限。

消息队列消息队列就是消息的链表,消息队列克服了信号量少,管道只能传输无格式字节流的缺点,可以将不同进程格式化的字节流以消息队列的格式发送给任意进程。

优点:可以实现任意进程间的通信,通过消息的发送和接收实现进程的同步 。缺点:需要额外耗费更多的CPU时间。

共享内存映射一段多个进程都可以使用的内存空间,由一个进程创建,多个进程都可以使用,是最快的进程间通信方式。

优点:无需复制,速度快,信息量大。缺点:不方便进行网络通信。

套接字:多用在网络通信中,只有互相识别的套接字间才可以进行通信。可以进行安全传输和加密传输。

死锁

死锁产生的原因:

  1. 资源分配不当
  2. 系统资源不足
  3. 进程推进顺序不合适

死锁产生的条件

  1. 互斥条件,资源的互斥特性是由其自身性质决定的,比如打印机。
  2. 不可剥夺,系统资源是不可剥夺的,当产生死锁使,必须等待死锁的进程结束才能继续推进。
  3. 占有并等待 进程可能不止一次占用cpu资源导致死锁。
  4. 环路等待 若资源分配图中没有环路,就不会发生死锁。

预防死锁的方法:

  1. 打破上述四种产生死锁的条件都可以。但是互斥条件和不可剥夺难以实现。
  2. 采用有序资源分配法
  3. 银行家算法