操作系统基础

操作系统核心:运行程序

进程

它是操作系统的CPU调度和资源分配单位。
一个程序在一个数据集上的一次执行
进程包括:

1.代码
2.当前活动
 - 程序计数器(PC)-指向当前要执行的指令(地址)
 - 堆栈(Stack):存放函数参数、临时变量等临时数据
 - 数据(Data)
 - 堆(Heap)

进程和程序

  • 进程是程序的一个实例,是程序的一次执行
  • 一个程序可对应一个或多个进程,同样一个进程可对应一个或多个程序
  • 程序是进程的代码部分
  • 进程是活动实体,程序是静止(被动)实体
  • 进程在内存,程序在外存

程序状态

就绪(ready):进程等待分配处理器
运行(running):指令在执行
阻塞(waiting):进程等待某些事件发生
新建(new):在创建进程
终止(terminated):进程执行完毕

在这里插入图片描述

new->新建成功->ready->被调度程序选中,获得处理机->running->有三种转变可能:

  1. 被中断程序打断,或时间片运行完毕->ready
  2. 运行一段时间后等待某事件发生如(IO)->waiting
  3. 进程运行结束->terminated

处于阻塞态(waiting)的进程如果等待的事件完成则->ready,不能直接转化为运行(running)态。

进程控制块(PCB)

PCB包含同进程有关的信息:

进程状态
进程号
程序计数器
CPU寄存器
CPU调度信息
内存管理信息
计账信息
I/O状态信息
进程间通信(IPC)

两种基本模式:

共享内存:以最快速度进行方便的通信
消息传递:交换较少数据,时间多

线程

为什么要线程:

性能:

  • 操作进程系统开销大
  • Unix的轻型进程(fork)

应用

  • 进程代码有并行执行的需求

硬件

  • 多核处理器
  • 加速进程的运行

什么是线程:

可在CPU上运行的基本执行单位
进程内的一个代码片段可以被创建称为一个线程
线程状态:就绪、运行、等待等
线程操作:创建、撤销、等待、唤醒等
进程依旧是资源分配的基本单位
线程自己不拥有系统资源,通过进程申请资源

线程和进程区别

从代码来看:进程包含线程,而线程是进程中的一段代码。
从资源来看:进程是资源分配的基本单位,线程不拥有资源,共享进程的资源。
从调度来看:同一进程中的线程切换不会引起进程切换,线程是基本的调度单位。
从切换来看:进程是重量级上下文切换,代价大;线程是轻量级切换,代价小。
从生命周期看:进程撤销会导致所有线程被撤销,线程撤销不会影响进程。

CPU调度

多任务操作系统的基础,目的是使得CPU尽可能用于执行指令,从而提高CPU效率。

  • 长程调度
  • 中程调度
  • 短程调度

有些状态转换是必然的,如运行完成的状态必然转变成结束状态,有些状态必须CPU干预,因为进程间存在竞争,需要操作系统选择一个进程来进行这种转换。这种选择称为CPU调度。
CPU调度有OS的两个部件完成:

  • 调度程序:根据某种策略选择内存中的一个就绪进程
  • 分派程序:负责具体的进程切换工作

具体过程:

  1. 利用定时器把CPU的控制权转交CPU调度程序,让调度程序选择一个需要运行的进程。
  2. 进行进程上下文切换,把该进程从就绪状态转换到运行状态。
  3. 系统切换到用户态,跳转到用户程序的适当位置并重新运行

CPU调度方式:

  1. 非抢占式调度:
一旦CPU分配给某进程后。系统不可以抢占已分配的CPU并分配给其他进程。
只有进程资源释放CPU,才可以吧CPU分配给其他进程
优点:易实现,调度开销小,适合批处理系统
缺点:响应时间长,不适合交互式系统
  1. 抢占式调度
调度程序可根据某种原则暂停某个正在执行的进程,将已分配给它的CPU重新分配给另一个进程。
可防止单一进程长时间独占CPU
系统开销大
两者区别:运行进程是否是自愿放弃CPU

调度基本指标

  1. CPU利用率:固定时间内CPU运行时间的比例
  2. 吞吐量:单位时间内运行完的进程数
  3. 周转时间:进程从提交到运行结束的全部时间
  4. 等待时间:进程等待调度(不运行)的时间片总和
  5. 响应时间:从进程提交到首次运行的时间段,也就是第一段的等待时间

周转时间=运行时间+等待时间

CPU调度算法

1.先来先服务调度(FCFS)
按进程请求CPU的先后顺序使用CPU

  • 实现简单,可使用FIFO队列实现
  • 属于非抢占式调度
  • 适用于长程调度,后台批量处理系统的短程调度

2.短作业有限调度算法(SJF)
关联到每个进程下次运行的CPU区间长度,调度最短的进程。有两种调度模式:非抢占式和抢占式。

  • 非抢占式:一旦进程拥有了CPU,只有当该CPU脉冲时间结束才会让出CPU的控制权
  • 抢占式:当有比当前进程剩余时间片更短的进程到来时,新来的进程抢占当前进程获得CPU运行,这种调度算法也被称为最短剩余时间优先调度,简写为SRTF。

优点:具有最短的平均等待时间
缺点:存在饥饿问题

3.优先级调度算法
为每个进程分配一个优先数,该数值为整数,然后按照进程的优先数来分配使用CPU。默认优先数越小,优先级越高,页就是说,具有最小优先数的进程具有最高优先级。就绪队列的排队策略是优先级高在前,优先级低在后。

  • 抢占式:当一个比正在运行进程的优先级高的进程加入就绪队列后,该进程将抢占正在运行进程的CPU。
  • 非抢占式

优先级

  • 动态优先级:高响应比优先调度算法
  • 静态优先级

4.高响应比优先调度算法
优先数=响应比=等待时间/运行时间
优点:能够避免饥饿现象,兼顾长短作业
缺点:计算响应比增加系统开销

5.时间片轮转调度算法(RR)
专为分时系统设计,类似于FCFS,但增加了抢占。
把一段时间分割为若干个小碎片,每个需要运行的进程获得一个碎片运行,也就是在这段时间内每个进程都得到运行。

6.多级队列调度(MLQ)
可针对不同进程使用不同的调度算法。允许系统中存在多个就绪队列,每个就绪队列有自己的调度算法

7.多级反馈队列调度(MLFQ)
进程在其运行过程中,能在不同队列间移动。

死锁

死锁是两个或两个以上进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象;若无外力干预,它们都将无法推进下去。(竞争的资源可以是锁、线程、网络连接、通知事件、打印机、磁盘、宽带等)

死锁的四个必要条件

  • 互斥
  • 占有并等待
  • 非抢占
  • 循环等待

死锁的解决方法

  1. 可使用协议来预防或避免死锁,确保系统不会进入死锁状态。
  2. 可允许系统进入死锁状态,然后检测它,并加以恢复
  3. 可忽略这个问题,认为死锁不可能在系统内发生
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值