Skip to content

Latest commit

 

History

History
 
 

2

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

进程的状态,调度,同步和通信。

进程的状态

  • 就绪
  • 运行
  • 阻塞

只有就绪和运行是双方面的转化过程,其它都是单方面的转化,例如从运行转变为阻塞。当就绪状态获得了可执行的CPU执行时间段 那么这个进程的状态就从就绪转化为运行了,当运行完毕后就变成了就绪状态。

阻塞状态不是因为CPU时间,CPU时间影响的是就绪和运行。阻塞是由于其他的资源没有准备好,然后才会阻塞,例如说一个web服务器然后请求的 请求太慢,导致没有请求资源,那么这个时候进程的状态就从运行变成了阻塞,当请求来了以后就变成了就绪,然后如果有CPU时间片段的情况下 就会转变为运行。

进程的调度

进程的调度因为不同类型的进程其实要采用不同的算法

批处理系统

这种进程主要是几乎没有用户的操作,独立在运行的一种进程比如SSR所以说它讲究的是保证吞吐量以及周转的时间,这种进程系统 分为三种算法可以处理:

  • 先来先服务,按照先后的顺序顺序的去处理
  • 短操作先处理,也就是说估计一下哪个进程是最短的,然后优先去处理这个,例如我们有很多短的进程,就先处理这种,但是又可能会饿死长的进程。
  • 最短剩余时间,估算一下谁的剩余运行时间最短,就启动谁(cpu分为不同的时间片段去交替运行不同的进程)

交互式

这种进程也就是说有很多跟用户交互的操作,例如按照提示去操作某某某的这种类型。

  • 时间片段轮流,使用一个队列将进程排列在队列中,每次都去调用队首的然后将这个进程再放到队尾。
  • 优先级调度,例如使用一个优先队列(最小堆就可以,它是一个完全二叉树,使用数组来储存。)然后按照优先级将最优先级按照最小堆的方式排列,然后调用堆首即可。
  • 多级反馈队列

实时系统

  • 硬实时 必须在某个时间前进行处理,要求很硬
  • 软实时 可以稍微缓缓

进程的同步

  • 多读一写:允许多个进程去读取一个内存空间,但是只能允许一个进程去写,例如都去读取一个文件,但是只能一个进程去改变这个文件。
  • 哲学家进餐问题:这种是一个哲学家要么吃饭要么思考,每次吃饭只允许拿起一边的筷子,这个时候很容易死锁,所以要设置限制 1只能双手一起吃饭2当左右邻居不能吃饭的时候你才能吃饭。代码

进程的通信

  1. 通道 也就是pipe通道,只能单向传播,只能在父进程中调用
  2. 命名通道 把 “只能在父进程中”去除
  3. 消息队列
  4. 信号量 为多个进程提供一个共享内存对象
  5. 共享储存 很多进程使用一个区域去存东西不就可以共享了吗。哈哈。
  6. 套接字 其实就是socket通信,提供了一套TCP UDP等协议的一个API,这样就可以跨平台的进程通信了, 其实一般的http啊,tcp啊都是socket通信,ssh啊都是。总之:socket通信就是tcp或者dup等协议跟用户进程的一个输出接口。