数据结构的基本概念以及算法和算法评价
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构的基本概念以及算法和算法评价相关的知识,希望对你有一定的参考价值。
参考技术A 1.基本概念和术语数据:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合
数据元素:数据元素是数据的基本单位,通常作为一个整体进行考虑和处理
数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集
数据类型:数据类型是一个值的集合和定义在此集合上的一组操作的总称
分类:
原子类型:其值不可再分的数据类型
结构类型:其值可以再分解为若干成分(分量)的数据类型
抽象数据类型:抽象数据组织及与之相关的操作
数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合
数据结构包括三方面:逻辑结构、存储结构、数据的运算
2.数据结构三要素
数据的逻辑结构:逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据与数据的存储无关,是独立于计算机的
分类:
线性结构:线性表、栈、队列、数组
非线形结构:集合、树、图
数据的存储结构:存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构。数据元素的表示和关系的表示。存储结构是用计算机语言实现的逻辑结构,它依赖于计算机语言
分类:顺序存储、链式存储、索引存储、散列存储
数据的运算:施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能。运算的实现是针对存储结构的,指出运算的具体操作步骤。
3.算法的基本概念
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作
重要特性:有穷性、确定性、可行性、输入、输出
优秀算法的标准:正确性、可读性、健壮性、效率与低存储量需求
4.算法效率的度量
算法效率的度量是通过时间复杂度和空间复杂度来描述的
时间复杂度:一个语句的频度是指该语句在算法中被重复执行的次数
空间复杂度:算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数
一个程序在执行时除需要存储空间来存放本身所用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和和存储一些为实现计算所需信息的辅助空间
算法原地工作是指算法所需的辅助空间为常量,即O(1)
处理机调度概念进程调度的时机调度方式及其切换与过程以及调度算法评价指标
一、处理机调度
(一)基本概念
- 当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。
(二)调度的三个层次
1. 高级调度
- 高级调度(作业调度)【简化理解:好几个程序需要启动,到底先启动哪个】。按一定的原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。
2. 低级调度
- 低级调度(进程调度/处理机调度)—— 按照某种策略从就绪队列中选取一个进程,将处理机分配给它。
- 进程调度是操作系统中 最基本的一种调度 ,在一般的操作系统中都必须配置进程调度。
- 进程调度的 频率很高 ,一般几十毫秒一次。
3. 中级调度
- 内存不够时,可将某些进程的数据调出外存。等内存空闲或者进程需要运行时再重新调入内存。
- 暂时调到外存等待的进程状态为 挂起状态 。被挂起的进程PCB会被组织成 挂起队列
- 中级调度(内存调度) ——按照某种策略决定将哪个处于挂起状态的进程重新调入内存。
- 一个进程可能会被多次调出、调入内存,因此中级调度发生的频率要比高级调度更高。
(三)进程的挂起态与七状态模型
- 暂时调到外存等待的进程状态为挂起状态(挂起态,suspend)
- 挂起态又可以进一步细分为 就绪挂起、阻塞挂起 两种状态
- 五状态模型 →七状态模型
(四)三层调度的联系、对比
二、进程调度的时机
- 进程调度 (低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。
- 临界资源:一个时间段内只允许一个进程使用的资源。各进程需要 互斥地 访问临界资源。
- 临界区:访问临界资源的那段代码。
- 内核程序临界区一般是用来访问某种内核数据结构的,比如进程的就绪队列(由各就绪进程的PCB组成)
- 有的系统中,只允许进程主动放弃处理机器。
- 有的系统中,进程可以主动放弃处理机,当有更紧急的任务需要处理时,也会强行剥夺处理机(被动放弃)
三、进程调度的调度方式
- 非剥夺调度方式 ,又称 非抢占方式 。即,只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。
【实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统】 - 剥夺调度方式 ,又称 抢占方式 。当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程。
【可以优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合于分时操作系统、实时操作系统】
四、进程调度的切换与过程
- “狭义的进程调度”与“进程切换”的区别:
①、狭义的进程调度 指的是从就绪队列中 选中一个要运行的进程 。(这个进程可以是刚刚被暂停执行的进程,也可能是 另一个进程 ,后一种情况就需要 进程切换 )
②、进程切换是指一个进程让出处理机,由另一个进程占用处理机的过程。 - 广义的进程调度 包含了选择一个进程和进程切换两个步骤。
- 进程切换的过程主要完成了:
①、对原来运行进程各种数据的保存
②、对新的进程各种数据的恢复(如:程序计数器、程序状态字、各种数据寄存器等处理机现场信息,这些信息一般保存在进程控制块) - 注意:进程切换是有代价的 ,因此如果 过于频繁的 进行进程 调度、切换 ,必然会使整个 系统的效率降低 ,使系统大部分时间都花在了进程切换上,而真正用于执行进程的时间减少。
五、调度算法的评价指标
(一)CPU利用率
- 由于早期的CPU造价极其昂贵,因此人们会希望让CPU尽可能多地工作
- CPU利用率:指CPU “忙碌”的时间占总时间的比例。
(二)系统吞吐量
- 对于计算机来说,希望能用尽可能少的时间处理完尽可能多的作业
(三)周转时间
- 对于计算机的用户来说,他很关心自己的作业从提交到完成花了多少时间。
- 周转时间,是指从作业被提交给系统开始,到作业完成为止的这段时间间隔。
- 它包括四个部分:作业在外存后备队列上等待作业调度(高级调度)的时间、进程在就绪队列上等待进程调度(低级调度)的时间、进程在CPU上执行的时间、进程等待I/O操作完成的时间。
- 后三项在一个作业的整个处理过程中,可能发生多次。
(四)等待时间
- 计算机的用户希望自己的作业尽可能少的等待处理机
- 等待时间 ,指进程/作业 处于等待处理机状态时间之和 ,等待时间越长,用户满意度越低。
- 对于进程来说,等待时间就是指进程建立后等待被服务的时间之和,在等待I/O完成的期间其实进程也是在被服务的,所以不计入等待时间。
- 对于作业来说,不仅要考虑建立进程后的等待时间,还要加上作业在外存后备队列中等待的时间。
- 一个作业总共需要被CPU服务多久,被I/O设备服务多久一般是确定不变的,因此调度算法其实只会影响作业/进程的等待时间。当然,与前面指标类似,也有“平均等待时间”来评价整体性能。
(五)响应时间
- 对于计算机用户来说,会希望自己的提交的请求(比如通过键盘输入了一个调试命令)尽早地开始被系统服务、回应。
- 响应时间,指从用户提交请求到首次产生响应所用的时间。
以上是关于数据结构的基本概念以及算法和算法评价的主要内容,如果未能解决你的问题,请参考以下文章