进程
定义:在多到程序环境中,程序并发执行,失去封闭性、具有间断行、运行结果不可再现行,为了让程序能狗并发的执行引入了进程的概念
为了让每个程序(包含数据)能够单独的运行,OS为他们分配了进程控制快(PCB),因此程序段、数据段、PCB构成了进程的实体简称进程
状态:进程的各个状态和转化图:
管理
OS中对于每个资源和进程都设置了数据结构--> 资源信息表或进程信息表,包括资源或者进程的标识、描述、状态以及一些指针,通过这些指针可以将同类资源或进程的信息表或统一进程占用的资源信息表连接成不同的队列
这些数据结构包括:内存表、设备表、文件表、PCB
PCB:
-
作为独立运行基本单位的标识:当程序(含数据)配置了PCB,就表示为可以独立运行的基本单位,就拥有获取OS服务的权利,OS创建进程时建立PCB,结束时收回PCB,系统通过PCB感知进程的存在
-
能实现间断行运行方式:进程因阻塞而暂停运行时需要保留自己的CPU现场信息到PCB,再次被调度时恢复信息
-
提供进程管理需要的信息:当调度程序调度到程序运行时,只能根据PCB记录的程序和数据在内存或者外存中的始指指针找到程序和数据
-
提供进程调度需要的信息
-
实现通信和同步
PCB中包含的信息:
-
进程标识符:唯一的标识进程,通常有两种标识符
-
外部标识符:方便用户(进程)对进程的访问设置了外部标识符,由创建者提供
-
内部标识符:方便OS对进程的使用
-
-
处理机状态:进程被切换时,各个寄存器中的信息需要保存到PCB中
-
进程调度信息:OS调度时,必须知道进程的状态以及有关进程的调度信息,包括:进程状态、进程优先级、事件
-
进程控制信息:进程控制必要的信息
-
程序和数据的地址
-
进程同步和通信机制
-
资源清单
-
链接指针:给出进程所在队列的下一个进程PCB的地址
-
PCB的管理
对于成百上千的PCB的管理由三种方式:
-
线性方式
-
链接方式:具有相同状态进程的PCB连成队列 附图:
-
索引方式:
附图:
OS内核
-
现代操作系统将OS划分为很多层,其中一些与硬件相关的模块(中断处理程序)、常用设备的驱动程序、以及运行频率高的模块(时钟管理、进程调度、以及公用操作)都排在紧靠硬件的软件层中常驻内存,称为OS内核
-
为了防止OS本身以及关键数据(PCB)收到应用程序的迫害,将处理机的执行状态分为系统态和用户态
功能:
-
支撑功能:提供给OS其他模块所需要的基本功能
-
中断处理
-
时钟管理
-
原语操作:操作时不允许中断
-
-
资源管理功能
-
进程管理
-
存储器管理
-
设备管理
-
进程的创建:
-
申请空白PCB
-
为新进程分配资源 内存、文件、I/O、CPU事件等
-
初始化PCB
-
初始化标识信息:将系统分配的标识符和父进程标识符填入PCB
-
初始化处理机状态信息,程序计数器指向程序的入口地址,栈指向栈顶
-
初始化处理机控制信息
-
进程就绪队列能够接纳,将新进程插入就绪队列
-
硬件上的进程同步
-
关中断
-
Test - and - set指令
-
利用Swap指令
信号量实现进程同步
-
整型信号量
-
记录型信号量
-
AND型信号量
管程
并发相关中有讲解
通信
-
共享存储器系统
-
基于共享数据结构的通信
-
基于共享存储区的通信
-
-
管道通信系统
-
消息传递通信
-
客户机-服务器系
线程
引入线程是为了减少程序在并发执行时所付出的时空开销,是调度和分派的基本单位
线程与进程的比较
-
线程做了调度的基本单位,相比进程切换,开销小了很多,只需改变少量的寄存器
-
并发性:引入线程、进程中的线程可以并发执行
-
拥有资源:进程拥有资源,是拥有资源的基本单位,但是线程只需要拥有控制线程运行的TCB、指示执行序列的程序计数器、保留局部变量、状态参数、返回地址,允许多个线程共享同一进程的资源
-
独立性
-
系统开销:创建或者撤销进程要分配大量的资源、大于线程的创建销毁
TCB:
-
线程标识符
-
一组寄存器,程序计数器、状态寄存器、通用寄存器
-
线程运行的状态
-
优先级
-
线程专有存储区
-
信号屏蔽
-
堆栈指针
处理机的调度以及死锁
调度:是对一种资源的分配,处理机调度算法是处理机根据分配策略所规定的算法
处理机的调度层次包括:
-
高级调度:调度对象为作业,主要根据某种算法决定将处于后备队列中的那些作业调入内存主要在多批道处理系统
-
低级调度:对象为进程,决定就绪队列中的进程获取处理机,由分派程序将处理机分配给选中的进程
-
中级调度:内存调度,目的是为了提高内存利用率和系统吞吐量,暂时不能运行的进程调至外存等待
进程调度的任务:
-
保存处理机的现场信息
-
按照某种算法选取进程
-
处理机分配给进程
进程调度机制:
-
排队器:为了提高调度的效率,事先将系统中的就绪队列按照一定的 策略拍成队列,
-
分配器:分派器以及进程调度程序选择的进程,从就绪队列中取出,从分派器到新选出进程间上下文的切换
-
上下为切换器: 处理机切换时,
-
第一次切换,os将保存当前的上下文,然后装入分派程序的上下文,进程分派
-
第二次是移出分派程序的上下文
-
-
附图:
进程调度的方式:抢占与非抢占,
抢占:
-
根据优先权的原则
-
短进程优先的原则
-
时间片的原则
存储器管理
为了解决CPU与存储器速度的不匹配引入了多层存储
寄存器、高速缓存、主存储器和磁盘缓存属于操作系统存储管理的范围,断电丢失,底层的固定磁盘和可移动的存储介质属于设备管理的范围,存储的信息长期保存
附图:
高速缓存:介于寄存器和存储器之间的存储器,用于备份主存中较为常用的数据,减少主存的访问次数
程序的运行需要先装入内存,然后转变为可以执行的程序
-
编译:编译程序对用于源代码进程编译,形成若干个目标模块
-
链接:连接程序将一组目标模块以及需要的库函数链接一起,形成完整 的装入模块
-
装入;装入程序将装入模块装入内存
-
附图:
程序的装入:
-
绝对装入方式
-
当计算机系统小,运行单道程序时,可能知道程序驻留在内存的位置,用户程序编译后,产生绝对地址(物流地址)的目标代码
-
-
可重定位装入
-
多道程序环境下,编译程序不能预知目标模块在内存中的地址,根据内存的具体情况将装入的内存适当的位置,在装入时对目标程序中指令和数据地址的修改称为重定位,地址变化在进程装入是一次完成,所以又称为静态重定位
-
动态运行时的装入
-
程序时进程在内存中进行位置移动的,但是静态的会导致地址问题,动态运行,把装入程序装入内存,不立即将逻辑地址转化为物理地址,需要重定位寄存器的支持
-
程序的链接:例如三个程序快 A调用B,B调用C
-
静态链接:对相对地址进行修改,编译程序所产生的目标模块都是相对地址,链接是需要更换地址
-
装入时动态链接:装入内存时,边装入边链接,装入A时,发生调用,再去找相应的模块
-
运行时动态链接;程序执行时进行链接,执行过程中,发发现被调用模块在装入内存
连续分配存储管理方式:
-
单一连续分配:单道程序环境下,内存分为系统区和用户区
-
固定分区分配
-
动态分区分配:根据进程的实际需要,动态分配内存空间
-
动态分区分配中的数据结构:(1)空闲分区表,记录空闲分区的情况,每个空闲分区占用一个表目(包括 分区号 + 分区大小 + 分区始址 (2)空闲分区链
-
动态分区分配算法:
-
动态分配操作
-
cpu结构
数据寄存器:ax bx cx dx
地址寄存器:索引:si di 栈指针sp 、bp 段地址:cs ds ss es
控制与状态寄存器:程序计数器PC 指令寄存器IR
输入输出
I/O软件的结构层次,用户层I/O软件,设备独立性软件、设备驱动程序、中断处理程序
附图:
-