操作系统原理之进程和线程学习

 

  • 操作系统

操作系统是控制应用程序执行的程序,并充当应用程序和计算机硬件之间的接口。

操作系统为程序员屏蔽了硬件细节,并为程序员提供方便的接口.

1. 程序开发:提供各种各样的工具和服务,编辑器和调试器

2. 程序运行:处理指令数据载入到内存、初始化IO设备和文件、准备相关资源等调度问题

3. IO设备访问:每个IO设备都有特有的指令集或控制信号,操作系统屏蔽了硬件细节

4. 文件访问控制:屏蔽了IO设备(磁盘)的特性以及存储介质中文件数据的结构

5. 系统访问:授权访问

6. 错误检测和响应:计算机系统运行时内部或外部硬件发生的错误,提供响应(终止、重操、报告错误)

7. 记账:操作系统收集各种资源使用的统计信息

 


 


 

  • 进程
  1. 操作系统必须交替执行多个进程,在合理的响应时间范围内使处理器的利用率达到最大。
  2. 操作系统按照程序分配的优先级给进程分配资源,避免死锁。
  3. 操作系统支持进程间的通信和用户创建进程

操作系统:也是由处理器执行的一个程序,与普通的计算机软件以同样的方式运行。经常释放控制权,并且依赖于处理器恢复控制器。

 定义:正在计算机上执行的程序实例,能分配给处理器并由处理器执行的实体(程序代码+代码相关数据集)

进程控制块:标识符(进程唯一标识符)、状态、优先级、程序计数器(程序即将被执行的下一条指令地址)、内存指针(程序和相关数据的指针、和其他进程共享内存块的指针)、上下文数据(寄存器中的数据)、I/O状态信息(显式的I/O请求、分配给进程的I/O设备)和记账信息

  • 进程的创建
  1. 新的批处理作业-响应作业提交时
  2. 交互登录-终端用户登录到系统
  3. 操作系统因为提供一项服务而创建-如用户请求打印文件
  4. 由现有的进程派生
  • 进程的终止
  1. 正常完成
  2. 超过时限-进程运行时间超过规定时限(总运行时间、执行时间、交互进程从上一次用户输入到当前时刻的时间总量)
  3. 无可用内存-系统无法满足进程所需的内存空间
  4. 越界-进程视图访问不允许访问的内存单元
  5. 保护错误-进程试图使用不允许使用的或不正确使用资源或文件
  6. 算术错误-进程视图进行被禁止的计算
  7. 时间超出-进程等待某一事件发生的时间超过了规定的最大值
  8. I/O失败-在输入或输出期间发生错误,如找不到文件或无效操作
  9. 无效指令-进程试图执行一个不存在的指令
  10. 特权指令-进程试图使用为操作系统保留的指令
  11. 数据误用-错误类型或未初始化的一块数据
  12. 操作员或操作系统干涉-操作员或操作系统终止进程
  13. 父进程终止-用于派生进程情况下
  14. 父进程请求-在进程派生情况下,父进程具有终止任何后代进程的权力

进程的五种状态:运行态、就绪态、阻塞/等待态、新建态和退出态。  挂起状态:当内存内的所有进程都处于阻塞态,操作系统可以把其中的一个进程置于挂起态,并转移到磁盘,内存中释放的空间可被调入另一个进程使用。

 

操作系统在管理和控制进程时,必须知道进程的位置,再知道管理时必需的进程属性(进程ID、进程状态)。

进程位置--进程映像:用户数据、用户程序、系统栈和进程控制块。(进程的物理意义:进程是由一个或一组可执行的程序,同时包含相关联的变量或常量的数据单元)

进程属性:标识符(进程ID、用户ID、父进程标识符)、处理器状态信息(用户可见可访问的寄存器、控制状态寄存器、后进先出的系统栈的栈指针)、进程控制信息(调度状态信息、数据结构、进程间通信、进程特权、存储管理和资源使用情况所有权)

 

进程的创建:分配新进程唯一进程标识符,给进程映像内所有元素分配空间,初始化进程控制块,正确连接到链表中去(就绪或就绪挂起链表),创建或扩充其他数据结构(记账文件进行编制账单或性能评估)

进程切换(问题1:进程切换和模式切换的区别

  • 进程切换发生情况
    • 时钟中断,操作系统确定当前正在运行的进程的执行时间已经超过了最大允许时间,即要切换至就绪态
    • IO中断,等待IO活动事件的进程在IO活动发生时,操作系统需要把相应的阻塞态或阻塞挂起态切换至就绪或就绪挂起态
    • 内存失效,当某一个进程中处理器需要将外存的内存块调入内存中,发出IO请求时该内存将切换至阻塞态,;当调入内存中后,该进程切换至就绪态
    • 陷阱,如果操作系统发生错误或异常条件导致致命问题,则该进程切换至退出态;不致命根据特殊情况特殊处理
  • 进程切换步骤
    • 保存处理器上细纹,PSW和寄存器
    • 更新当前处于运行态进程的进程控制块,状态切换以及更新记账信息和离开愿意
    • 将进程控制块移入相应队列
    • 选择另一个进程执行
    • 更新选择后的进程控制块,运行状态更改及更新相关信息
    • 更新内存管理的数据结构
    • 恢复处理器被选择的进程前一次切换出运行状态时保存下来的上下文环境

进程间的资源竞争

  1. 互斥:两个或多个进程需要访问一个不可共享的资源,其中一个进程在运行时分配到资源并拥有完全的控制权 
  2. 死锁:两个进程P1和P2以及两个资源R1和R2,,两个进程都需要访问这两个资源,但P1占用了R1,P2占用了R2,由于两进程一直等待另一个资源释放从而发生死锁
  3. 饥饿:P1、P2、P3三个进程同时共享一个资源R,P1访问完资源后P3访问资源,P3访问后P1继续访问,使得P2进程一直处于无限期拒绝访问资源状态下

加锁

 


  • 线程-进程中分派单元(程序片段)

多线程是指操作系统在单个进程内支持多个并发执行路径的能力

线程包含:

  1. 线程执行状态
  2. 未运行时保存的线程上下文
  3. 执行栈
  4. 线程内局部变量的静态存储空间
  5. 与进程内其他线程共享的对进程内存和资源的访问

线程相对于进程突出的性能:

  1. 创建快
  2. 终止速度快
  3. 切换速度快
  4. 提高了执行程序间的通信效率,进程间通信介入内核,而线程之间可以直接共享内存和文件

所有线程管理数据结构都在一个进程的用户地址空间,线程的切换无需内核态特权,节省了用户态与内核态的模式来回切换开销,但是存在一个问题,某一线程的阻塞将导致整个进程的阻塞

 

用户级线程:在一个纯粹的用户级线程软件中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。

通过线程库管理用户级线程,包含创建和销毁线程代码、在线程间传递消息和数据的代码、调度线程执行的代码以及保存和恢复线程上下文的代码。

优点:1、由于所有线程管理数据结构都在一个进程的用户地址空间,线程的切换不需要内核参与,节省了两次模式转换的开销;2、调度由应用程序完成;3、用户级线程可以在任何操作系统上执行而不涉及修改底层内核

缺点:1、当用户线程执行一个系统调用时,这个线程的堵塞将造成整个进程的堵塞;2、一个多线程应用程序不能利用多处理技术

内核级线程:有关线程管理的工作都在内核完成。

优点:1、内核可以同时将进程中的多个线程调度到多个处理器;2、进程中的一个线程被堵塞,内核可以调度同一个进程的另一个线程

缺点:1、一个线程传送至同一个进程中的线程需要内核的状态切换

结合以上两者的组合方法:在组合的系统中线程的创建完全在用户空间完成,线程的调度和同步也是在应用程序中进行。一个应用程序中的多个用户级线程被映射到一些内核级线程上。


 

  • Windows线程和SMP(对称多处理)管理

 

并发性:

进程间的资源竞争:当并发进程竞争使用同一资源时,它们之间会发生冲突。

竞争进程的三个控制问题:

  1. 互斥:多个进程访问同一个资源,一次只允许一个进程在临界区(正在代码区执行的程序),其他进程不得穿插。
  2. 死锁:两个进程都可以2个资源进行占用,但实际上两个进程分别使用一个资源后,等待另一个资源被释放,从而造成两个进程的无限等待循环。
  3. 饥饿:三个进程将使用1个资源,实际上却只有其中2个进程在轮番使用,另一个进程无限期地被拒绝访问资源。

二元信号量、计数信号量

管程:程序设计语言结构,提供了与信号量同样的功能,易于控制。

管程是由一个或多个过程、一个初始化序列和局部数据组成的软件模块

1、局部数据只能被管程的过程访问,任何外部过程不能够访问

2、一个进程通过调用管程的一个过程进入管程

3、在任何时候,只能有一个进程在管程中进行,调用管程的任何其他进程都被阻塞,以等待管程可用

管程提供了互斥机制--管程中的数据变量每次只能被一个进程访问到,可用把一个共享数据结构,从而对它的保护。

 

死锁

  1. 互斥
  2. 资源占有且等待
  3. 不可抢占已被占有的资源
  4. 循环等待

死锁的解决方案

  1. 预防:设计一种系统排出发生死锁的可能性
    1. 间接的死锁预防方法:防止前面列出的三个必要条件--1、要求进程一次性请求所有的资源;2、占用某些资源的一个进程若想请求其他资源需释放最初占有的资源
    2. 直接的死锁预防方法:防止循环等待---定义资源的线性顺序
  2. 避免:判断资源请求会不会导致死锁来决定的
    1. 对进程和资源的需求和总量进行矩阵化,如果一个进程的请求会导致死锁,则不启动此进程
    2. 如果一个进程增加的资源请求会导致死锁,则不允许此分配
  3. 检测:检测当前是否存在死锁,一旦检测到便恢复
    1. 取消所有死锁进程
    2. 把每个死锁进程回滚到前面定义的检查点,重启进程
    3. 连续取消死锁进程直到不出现死锁
    4. 连续抢占资源直到不存在死锁

一种综合的死锁策略:把资源分为几组不同的资源类,使用资源线性排序策略,使用最合适的资源分配算法。


 


 

内存管理

内存被划分成两个部分:一部分供OS使用,一部分供当前正在执行的程序使用。

在多道程序设计系统中,必须在内存中进一步细分出“用户”部分,以满足多个进程的要求,其中细分的任务由OS完成,被称之为内存管理。

内存管理的需求:重定位、保护、共享、逻辑组织、物理组织

  逻辑地址:与当前数据在内存中的物理分配地址无关的访问地址

  相对地址:逻辑地址的一个特例,相对于某些已知点(程序的开始处)的存储单元

  物理地址(绝对地址):数据在内存中的实际位置

固定分区->分页 内部碎片

动态分区->分段 外部碎片

 

 


 

 

AUTANT EN EMPORTE LE VENT  记于2018.04.01愚人节

posted @ 2018-04-02 22:12  Go柱oD  阅读(1021)  评论(0编辑  收藏  举报