操作系统(二)进程与线程

2.1 进程

并发:某个瞬间CPU只进行一个进程,但在某个时间间隔CPU运行多个进程。

2.1.1 进程

processes 进程:计算机上所有可运行的软件,被组织成若干进程,一个进程就是一个正在执行程序的实例。

CPU在各种进程中快速切换称作多道程序设计

2.1.5 进程的状态

  1. 运行态:实际占用CPU
  2. 就绪态:可运行,但实际没运行
  3. 阻塞态:除非外部事件发生否则不能运行

CPU的快速切换使进程在1和2之间转换。
系统发现进程持续不下去(比如需要等待输入)1->3,外部事件发生可以3->2,如果此时发现CPU空闲则可以直接再2->1

2.1.2 进程的创建

父进程可以创建一个子进程,子进程可以使用父进程的资源,子进程撤销是资源返还,父进程撤销需要先将所有子进程撤销。

可以引起进程创建的事件:

  1. 系统初始化
  2. 正在运行的程序创建进程
  3. 用户请求
  4. 批处理作业的初始化

2.1.3 进程的结束

正常结束:自然死
出错退出:程序bug了死
严重错误:程序崩了死
外界干预:别人杀死

2.1.4 进程的层次结构

一个子进程只可以有一个父进程

2.1.6 进程实现

进程表包含了每个进程的重要信息(基本除了进程内储存的东西外都在里面)

2.1.7 多道程序设计模型

一个进程等待I/O操作的时间停留在内存中的时间比为p,一共n个进程。
CPU利用率=1-p n ^n n

2.2 线程

进程=地址空间(内存)+控制线程(动作)

threads 线程:一个进程中拥有的一类迷你进程。

2.2.1 线程调用

多线程的好处:

  1. 使并行实体拥有共享同一个地址空间和所有可用数据的能力。
  2. 线程比进程更容易创建和撤销
  3. 让I/O与计算彼此重叠进行,提高效率
  4. 在多CPU中使用多线程,真正的并行有了实现的可能。

P.S.线程是独立调度的基本单位,进程是拥有资源的基本单位。
线程可以称作轻量级进程。

2.3 进程间通信

三个问题:

  1. 如何信息传递
  2. 如何确保进程之间不会交叉
  3. 进程是否需要顺序

线程之间共享内存,所以不存在第一个问题,第二个和第三个问题同样也是线程的问题。

2.3.1 竞争条件

A进程读取数据后时间片用尽暂时中断,B进程读取相同位置数据后对数据进行更改并保存,但A进程再次运行时按原数据进行修改并保存,出错。

两个或多个进程读写某些共享数据,结果取决于进程运行的精准时序,成为竞争条件

2.3.2 临界区

critical section 临界区:对共享内存进行访问的程序片段。

对临界区的访问必须互斥。

后面介绍了几种实现方式,我觉得看的意义不大,很多解决方案本身问题也很大,当时听课搞得特别痛苦。

2.3.5 信号量

semaphore 信号量:使用一个整型变量累计唤醒次数。

atomic action 原子操作:单一的,不可分割的操作.

两种操作:
down:检查是否大于0,大于0就-1,等于0就在这个信号量上睡眠。
up:如果有进程在信号量上睡眠就唤醒一个,没有就+1。

2.3.6 互斥量

一个简单的信号量。

在读取互斥信号量的数据之后,不管读到的是什么,都将互斥信号量置1,再看刚才读取到的内容,1就是忙,0就是不忙。

2.3.7 管程

dead lock 死锁:多个进程因竞争资源造成的一种互相等待的僵局,无外力作用则都无法继续向前推进。

管程:过程+变量+数据结构,任意时刻都只能有一个活跃进程。
用一个条件变量,让本来死机然后堵塞后续进程的那个进程(比如满了还要继续生产)产生wait状态,而不干扰后续进程。

2.3.9 屏障

barriers 屏障:屏障用于阻断进程,可用于进行一组进程同步,当一个进程到达屏障时,他就被屏障阻拦,直到所有进程都到达该屏障为止

2.3.10 避免锁

avoiding locks 避免锁:读-复制-更新,通过RCU(读-复制-更新)将更新过程中的移除和再分配过程分离开来,从而不需要锁住任何东西。

grace period 宽限期:一个任意的时间段,在这个时期内,每个线程至少有一次在读端临界区之外。

2.4 调度

scheduler 调度程序多道程序操作系统中,在有多个就绪的进程时用一定的算法选择一个进程优先分配处理机。

2.4.1 调度简介

调度分为三种处理环境:批处理、交互式、实时

调度算法的目标(其实看一下批处理的就行):
所有系统:公平、强制执行、平衡
批处理系统:吞吐量(每小时最大作业数)、周转时间(提交到终止间的最小时间)、CPU利用率
交互式系统:相应时间、均衡性
实时系统:满足截止时间、可预测性

2.4.2 批处理系统中的调度

1.先来先服务
2.最短作业优先:目前剩的作业中找时间最短的
3.最短剩余时间优先:可以打断正在运行的进程

P.S.周转时间:从作业来到作业完成需要的时间

后两种系统感觉没法考,而且方法也挺多,就不写了。

2.5经典的IPC问题

2.5.1 生产者-消费者问题

有一个n大小的缓冲区,有若干生产者和若干消费者。P72

如果无法继续生产/消费,那么进程进入睡眠状态。
有信号量记录缓冲区内容数量。
当生产者生产后,数量为1时,唤醒(可能存在的)正在睡眠的消费者。
消费者消费后,数量为N-1时,唤醒(可能存在的)正在睡眠的生产者。

2.5.2 读者-写者问题

一个文件只要有一个写者在写,那么同时不允许其他任何人读/写。

2.5.3 哲学家进餐问题

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值