直接根据给定硬件平台写应用程序效率低下的主要原因
1:针对相同的平台可以开发车很多的应用程序,所以开发出的这些应用程序访问计算机资源的通用例程是很有意义的
2:处理器本身对多道程序设计的支持是有限的。需要用软件去管理处理器和其他资源同时被多个程序共享
3:多个程序在同一资源都是活跃的,那么需要保护每一个程序的资源,I/O使用和其他的资源不被其他的进程占用
进程的几个定义
1:正在执行的应用程序
2:正在计算机上执行的程序实例
3:能分配给处理器,并由处理器执行的实体
4:具有以下特征的活动单元:一组指令序列的执行,一个当前状态和相关资源的系统资源集
进程的两个基本元素:程序代码和代码相关的数据集
进程控制块的组成
标志符
状态
优先级
程序计数器
内存指针
上下文数据
I/O状态信息
记账信息
进程的执行指令序列叫做进程的轨迹
虚拟内存:计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等
设计进程程序: 第一步是描述进程的行为
未运行的进程必须保持在某种进程队列中等待他们的执行时机
进程的创建:当一个进程添加到被管理的进程集合中,操作系统需要建立管理该进程的数据结构,并未该进程分配地址空间
导致进程创建的原因
1 新的批处理作业
2 交互登陆
3 操作系统因为提供一项服务而创建
4 由现有的进程派生
导致进程终止的原因
正常完成
超过时限
无可用内存
越界
保护错误
算数错误
时间超出
I/O失败
无效指令
特权指令
数据误用
操作员或者操作系统的干涉
父进程终止
父进程请求
操作系统可以分两步定义进程
1:执行一些必须的辅助工作,将标志符关联到进程
2:分配和创建管理进程所需要的所有表
处于新建态的进程:操作系统所需要的关于进程的信息保存在内存中的进程表中,但进程本身未进入内存
多道程序设计,但是大多数时候处理器还是处于空闲状态
一种解决办法:扩充内存以适应更多的进程,但是程序对内存的增长速度比内存价格下降的要快 ,更大的内存往往导致更大的进程,而且不是更多进程
另一种解决内存:把内存中的某个进程的一部分或者全部转移在磁盘中,当内存中没有处于就绪态的进程时,操作系统会把所有阻塞进程换出到磁盘的“挂起列队”中
这是暂时保存从内存中被“驱逐”出进程列队
当内存中的所有进程都处于阻塞态,操作系统可以把内存中的其中一个进程换出到磁盘。内存中的释放空间可以调入另一个进程使用
可以接纳一个新创建的进程和调入一个以前挂起的进程,系统更倾向于调入一个挂起的进程,而不是增加系统的负载总数
进程被挂起有一下特点:
进程不能被立即执行
进程可能在等待一个事件
除非代理显示的命令系统进行状态转换,否则无法从这个状态转移
导致进程挂起的原因:
交换:释放内存空间
其他os原因:操作系统可能挂起后台进程和工具程序进程,或者被怀疑导致问题的进程
交互式用户请求
定时
父进程请求
操作系统维护这四个不同类型的表:内存表 I/O表 文件表 进程表
内存表用于跟踪内(实)存和外存(虚拟内存)
内存的某些部分为操作系统保存,剩余部分是进程使用,保存在外存的进程使用某种类型的虚拟内存或者简单的交换机制
内存表的信息包过
分配给进程的内存
分配给进程的外存
内存块和虚拟内存的任何保护信息
管理虚拟内存的任何保护信息
I/O表管理计算机系统的中的I/O设备和通道
文件表:这些表提供了文件是否存在,文件在外存中的位置,当前状态和其他属性的信息,大部分信息(不是所有信息)可能被文件管理系统维护和使用,在这种情况下,操作系统只有一点或者没有关于文件的信息,在其他操作系统中,很多文件管理细节都是由操作系统自己处理的
进程表
这四种表必须以某种方式连接起来或交叉引用,内存 I/O 文件是代表进程而被管理的,因此进程表必须能够对这些资源直接或者间接的引用