2021计算机专业复试总结1

这是我在2021年复试的时候做的笔记,总结1包含:数据结构、数据库、操作系统。

一、数据结构

1.关键路径是什么数据结构实现的?

答:有向图,并且无环。

2.是不是所有的图都可以实现关键路径?

答:不是。只有有向且没有回路(环)的图才能实现。

3.栈和队列的相同点和区别是什么?

答:相同点:栈和队列都是抽象的数据类型(ADT),都是操作受限制的线性表

​ 不同点:栈是后进先出(LIFO),只允许在一端操作;队列是先进先出(FIFO),队尾进,队头出。

4.你在哪里用到过栈和队列?

栈的应用:递归、函数调用、(在JVM中都有栈区、堆区、方法区)等

队列的应用:广度优先遍历(BFS),二叉树的层次遍历、打印机、缓冲区、等

5.度为2的树和二叉树的区别?

度为2的树:在度为2的树中,至少存在一个度为2的节点

二叉树:二叉树的特点是每个节点至多有两棵子树(即二叉树中不存在节点的度 >2 ,二叉树的子树有左右之分,其次序不可颠倒。

另外,二叉树可以为空树。

6.图的遍历方法?

广度优先遍历(Breadth-First-Search):需要用到辅助队列,类似于二叉树的层次遍历。

**基本思想:**首先访问起始顶点V,然后选取与V邻接的全部顶点w1,w2,….,wn进行访问,再一次访问与w1,w2,…

,wn邻接的全部顶点(不包括已访问过的顶点),以此类推,直至所有顶点都被访问过为止。

c语言代码:

bool visited[MAX_VERTEXT_NUM]  //访问标记数组
void BFSTraverse(Graph G){     //对图G进行广度优先遍历
    for(i = 0;i < G.vexnum; i++)
        visited[i] = false;    //访问数组进行初始化
    InitQueue(Q);			   //初始化辅助队列Q
    for(i = 0;i < G.vexnum; i++)
        if(!visited[i])        //对每一个连通分量调用一次BFS
            BFS(G,i);
    
}

void BFS(Graph G, int v){
    visit(v);
    visited[v] = true;
    Enqueue(Q,v);
    while(!isEmpty(Q)){
        Dequeue(Q,v);
        for(w = FirstNeighbor(G,v);w >= 0;w = NextNeighbor(G,v,w)){
            if(!visited[w]){
                visit(w);
                visited[w] = true;
                Enqueue(Q,w);
            }//if
        }//for
    }//while
}

深度优先遍历(Depth-First-Search):类似于二叉树的先序遍历。

**基本思想:**首先访问出发点V,并将其标记为已访问;然后选取与V邻接的未被访问的邻接顶点W,访问W;再选取与W邻接的未被访问的顶点访问,以此类推。当一个顶点所有的邻接顶点都被访问过时,则依次退回最近被访问过的顶点,若该顶点还有其他邻接顶点未被访问,则从这些顶点中去一个顶点进行上述的过程,直至图中所有顶点都被访问过为止。
c语言代码:

bool visited[MAX_VERTEX_NUM];          //标记访问数组
void DFSTraverse(Graph G){             //对图G进行深度优先遍历
    for(i = 0;i < G.vernum;i++)
        visited[i] = true;             //初始化访问数组
    for(i = 0;i < G.vernum;i++){       //防止出现非连通图
        if(!visited[i])
            DFS(G,i);
    }
}

void DFS(Graph G,int v){
    visit(v);
    visited[v] = true;
    for(w = FirstNeighbor(G,v);w >= 0;w = NextNeighbor(G,v,w)){
        if(!visited[w])
        	DFS(G,w);
    }
}

注意:当图的结构用邻接表存储:BFS和DFS的时间复杂度为O(V+E) (V表示定点数,E表示边数)

当图的结构用临界矩阵存储: BFS和DFS的时间复杂度为O(V2)

7.最小生成树的两种方法,以及时间复杂度,各适用于什么情况,为什么?

7.1 Prim算法:

Prim算法和贪心算法有点类似,Prim算法的时间复杂度为O(V2),不依赖边,因此适用于边稠密的图求解最小生成树

7.2 Kruskal算法:

Kruskal算法的时间复杂度为O(E *logE),因此适用于边稀疏而顶点多的图求解最小生成树。

8.最好的时间复杂度和最坏的时间复杂度一样的排序算法有哪些?

8.1 插入排序
算法种类最好情况平均情况最坏情况空间复杂度是否稳定
直接插入排序O(n)O(n2)O(n2)O(1)
希尔排序O(1)
8.2 交换排序
算法种类最好情况平均情况最坏情况空间复杂度是否稳定
冒泡排序O(n)O(n2)O(n2)O(1)
快速排序O(nlogn)O(nlogn)O(n2)O(logn)
8.3 选择排序

注意:选择排序算法都不稳定

算法种类最好情况平均情况最坏情况空间复杂度是否稳定
简单选择排序O(n2)O(n2)O(n2)O(1)
堆排序O(nlogn)O(nlogn)O(nlogn)O(1)
8.4 归并排序和基数排序

注意二路归并排序和基数排序都稳定

算法种类最好情况平均情况最坏情况空间复杂度是否稳定
二路归并排序O(nlogn)O(nlogn)O(nlogn)O(n)
基数排序O(d(n+r))O(d(n+r))O(d(n+r))

因此,时间复杂度最好和最坏的一样的排序算法有:希尔排序、简单选择排序、堆排序、二路归并排序、基数排序。

9.循环队列的顺序表中为什么要空出一个位置?

这是为了区分队空和堆满的条件。如果没有空出一个位置,则队空和堆满的情况是一样的,就无法区别了。

10.哈夫曼树

定义:

给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。

构造方法:

假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:

(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);

(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;

(3)从森林中删除选取的两棵树,并将新树加入森林;

(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。

特点:

① 权值越大的结点,距离根节点越近;

② 树中没有度为一的结点。

应用:

哈夫曼编码,减少编码的长度。哈夫曼编码就是长度最短的前缀编码。

11.什么是哈希冲突?以及如何解决。

散列(哈希)表:

根据关键码值(Key value)而直接进行访问的数据结构。根据给定的关键字来计算出关键字在表中的地址,以加快查找的速度。

冲突:指的是多个关键字映射同一个地址的情况。

解决办法:

(1) 开放定址法

① 线性探查法(产生堆积问题);

② 平方探查法(不能探查到哈希表上所有的地址,但至少能探查到一半的地址)

(2) 链地址法

把所有的同义词用单链表连接起来。

补充(常见的哈希函数构造方法)

直接定址法,数字分析法,平方取中法,除留余数法。

HashMap的底层,就用到了Hash算法,计算HashCode和hash值。

12. 迪杰斯特拉(Dijkstra)算法的过程

该算法可以求得某一顶点到其余各顶点的最短路径。

算法思想:设有两个顶点集合S和T,其中集合S中存放的是图中已找到最短路径的顶点,集合T中存放的是图中的剩余顶点。

初始状态时,集合S中只包含源点V0,然后不断从集合T中选取到顶点V0路径最短的顶点Vu并加入集合S中。集合S每加入一个新的顶点Vu,都要修改V0到集合T中各个顶点的最短路径的长度值。不断重复这个过程,直至集合T中的顶点全部并入到S中为止。

13.图的存储方式

① 邻接矩阵:是图的顺序存储结构,用两个数组分别存储数据元素(顶点)信息和数据元素之间的关系(边/弧)的信息。图的邻接矩阵表示是唯一的,无向图的邻接矩阵是对称的。

② 邻接表:是图的链式存储结构,由单链表的表头形成的顶点表和单链表其余结点所形成的边表两部分组成。

③ 十字链表:有向图的另一种链式存储结构。

④ 邻接多重表:无向图的链式存储结构。

14.图的相关概念

图:由结点的有穷集合V和边的集合E组成。

类别:有向图和无向图。

顶点的度:出度和入度。

有向完全图和无向完全图: 若有向图有n个顶点,则最多有n(n-1)条边,则称为有向完全图;

若无向图有n个顶点,则最多有n(n-1)/2条边,则称为无向完全图。

路径:相邻顶点序偶所构成的序列。

简单路径:序列中的顶点和路径不重复出现的路径。

回路:路径中第一个顶点和最后一个顶点相同的路径。

连通: 无向图中,如果Vi到Vj有路径,则称这两个顶点连通。如果图中任意两个顶点之间都连通,则称改图为连通图。

有向图中,如果Vi到Vj有路径,则称这两个顶点连通。如果图中每一对顶点Vi和Vj,从Vi到Vj和Vj到Vi都有路径,则称改图为强连通图。

连通分量:无向图中的极大连通子图(极大要求连通子图包含所有的边)称为连通分量。

强连通分量:有向图中的极大连通子图称为强连通分量。

15.M阶B-树和M阶B+树的主要区别

① B+树所有有效数据全在叶子节点,而B-树所有节点分散在树中,B-树中的关键字不重复。

② B+树种有几个关键字就有几个子树,B-树中具有n 个关键字的节点含有(n+1)棵子树。

③ B+树有两个指针,根指针和指向最小节点的指针,叶子节点连接成一个不定长的线性链表。

④ B+树中,每个节点(除根节点外)中的关键字个数n 的取值范围是⌈m/2⌉<=n<=m,根节点n 的取值

​ 范围是1<=n<=m。B-树中,每个节点(除根节点外的所有最底层非叶子节点)中的关键字取值范围是

​ ⌈m/2⌉-1<=n<=m-1,根节点n 的取值范围是1<=n<=m-1。

⑤ B+树中的所有非叶子节点仅仅起到索引的作用,节点中的每个索引项只包含对应子树的最大关键字和

指向该子树的指针,不含有该关键字对应记录的存储地址。而在B-树中,每个关键字对应记录的存储

地址。

二、数据库

1.数据库管理系统的主要功能是什么?

数据定义
数据操纵
数据库运行管理
数据库建立和维护(安全性检查、完整性控制、并发控制、恢复能力)

数据库管理系统(DBMS)一般有七大功能:
一、数据定义
DBMS提供数据定义语言DDL(Data Definition Language),供用户定义数据库的三级模式结构、两级映像以及完整性约束和保密限制等约束。DDL主要用于建立、修改数据库的库结构。DDL所描述的库结构仅仅给出了数据库的框架,数据库的框架信息被存放在数据字典(Data Dictionary)中。
二、数据操作
DBMS提供数据操作语言DML(Data Manipulation Language),供用户实现对数据的追加、删除、更新、查询等操作。
三、数据库的运行管理
数据库的运行管理功能是DBMS的运行控制、管理功能,包括多用户环境下的并发控制、安全性检查和存取限制控制、完整性检查和执行、运行日志的组织管理、事务的管理和自动恢复,即保证事务的原子性。这些功能保证了数据库系统的正常运行。
四、数据组织、存储与管理
DBMS要分类组织、存储和管理各种数据,包括数据字典、用户数据、存取路径等,需确定以何种文件结构和存取方式在存储级上组织这些数据,如何实现数据之间的联系。数据组织和存储的基本目标是提高存储空间利用率,选择合适的存取方法提高存取效率。
五、数据库的保护
数据库中的数据是信息社会的战略资源,所以数据的保护至关重要。DBMS对数据库的保护通过4个方面来实现:数据库的恢复、数据库的并发控制、数据库的完整性控制、数据库安全性控制。DBMS的其他保护功能还有系统缓冲区的管理以及数据存储的某些自适应调节机制等。
六、数据库的维护
这一部分包括数据库的数据载入、转换、转储、数据库的重组合重构以及性能监控等功能,这些功能分别由各个使用程序来完成。
七、通信
DBMS具有与操作系统的联机处理、分时系统及远程作业输入的相关接口,负责处理数据的传送。对网络环境下的数据库系统,还应该包括DBMS与网络中其他软件系统的通信功能以及数据库之间的互操作功能。

2.数据库系统的特点

共享度高、冗余度低、独立性高、共享性高、易扩充、由DBMS统一管理

3.三级结构、两级映射

外模式、模式、内模式
外模式:局部逻辑结构和特征的描述
模式:全局逻辑结构和特征的描述
内模式:物理结构和存储方式
模式/外模式:模式变化,DBA修改模式/内模式,从而外模式不变,程序不变,逻辑独立性
内模式/模式:内模式变化,修改内模式/模式,从而模式不变,外模式不变、程序不变,物理独立性

4.关系模型中的完整性约束是哪几类?定义?

实体完整性:主码不为空
参照完整性:要么为空,要么另一关系模式的主码
用户自定义完整性

5.SQL特点

综合统一
高度非过程化
面向集合的操作方式。
同一种语法结构提供多种使用方式。
语言简洁,易学易用。

6.等值连接和自然连接的区别是什么?

自然连接是等值连接的一种特殊情况
等值连接不要求属性,自然连接要求属性相同
自然连接要求去除重复属性列

7.索引的作用?和它的优点缺点是什么?

加快查询速度
占用一定的存储空间,基本表更新时需要相应的维护
视图是什么?有何作用?
视图是一个或多个基本表导出的表,是虚表,数据库中只存放视图的定义,不存放视图对应的数据

优点:

简化用户操作
多种角度查看同一数据
安全保护
逻辑独立性

8.数据库的设计流程

数据库的设计过程一般包括几个阶段?每个阶段的主要任务是什么?
答:

  • 需求分析:获取需求
  • 概念结构设计:概念模型。将用户的需求抽象为信息结构(概念模型),E-R模型即实体-联系模型,用来描述现实世界的概念模型
  • 逻辑结构设计:把概念结构设计好的E-R图转换为数据库管理系统产品所支持的数据模型相符合的逻辑结构(模式、外模式在这个阶段
  • 物理结构设计:在关系型数据库中主要指的是存取方法(B+树索引存取、Hash索引存取)和存储结构。(内模式
  • 数据库的实施:
  • 数据库运行和维护:

9.简述ER图转化为关系模型的转化规则。

答:一个实体转换为一个关系模式。实体的属性就是关系的属性,实体的标识属性就是关系的主键。
对于实体间的联系有以下不同的情况:
(1)1∶1联系:一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。

(2)1 : n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。

(3)m : n联系转换为一个关系模式。

(4)三个或三个以上实体间的一个多元联系可以转换为一个关系模式。

(5)具有相同码的关系模式可合并。

10.层次模型、网状模型、关系模型

  • 层次模型:是最早出现的数据模型,层次模型就像数据结构中的树一样;典型的代表是IBM公司的IMS(information Management System)、
  • 网状模型:网状模型有点像数据结构中的图,特点:
  • 关系模型:为数据库技术奠定了基础。一个关系对应一张表。关系莫模型把存储路径向用户隐蔽起来,用户只需要指出“干什么”或“找什么”,不需要详细说明“怎么干”,这极大地提高了数据的独立性。

11.什么是热备份和冷备份?

1、热备份是数据库仍旧处于工作状态时进行备份。是针对归档模式的数据库备份。

​ 优点:优点在于当备份时数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。

2、冷备份指在数据库关闭要备份的服务后进行备份,适用于所有模式的数库。

​ 优点:优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。

12.数据库范式

人们已经提出了许多类型的数据依赖,其中最重要的是函数依赖多值依赖

第一范式(1NF):一个二维表,关系要符合一个最基本的条件:每个分量必须是一个不可分割的数据项,满足了这个条件的关系模式就属于第一范式。

第二范式:若R is 1NF,且每一个非主属性都完全函数依赖于任何一个候选码,则R is 2NF。

第三范式:从2NF中消除非主属性对码的传递函数依赖。

BCNF:是修正的第三范式,从3NF中消除主属性对码的部分函数和传递函数依赖

第四范式:从BCNF中消除非平凡且非函数依赖的多值依赖。

13.ACID特性

事务是用户定义的一个数据库操作序列,这个操作要么全做,要么全不做,是一个不可分割的工作单位。

一个事务须具备以下特性(ACID):

  • 原子性:事务中包含的操作要么都做,要么都不做。
  • 一致性:事务执行的结果必须是使数据库从一个一致的状态变到另一个一致的状态。
  • 隔离性:一个事务的执行不被其他事务打扰。
  • 永久性:也成为持久性,一个事务一旦提交,它对数据库中数据的更改就是永久性的。

数据转储和登记日志文件是恢复中最经常使用的技术。

14.并发控制

1.并发导致的问题

脏读:对于两个事务T1和T2,T1读取了T2更新但还没提交的字段,若T2回滚,T1读取的内容就是临时无效的

不可重复读:对于两个事务T1和T2,T1读取了一个字段,然后T2更新了该字段之后,T1再此读取同一个字段,值就不同了
幻读:对于两个事务T1和T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行之后,如果T1再次读取一个表,
就会多出几行。

2.如何解决并发问题

隔离级别脏读不可重复读幻读
read uncommittedNONONO
read committed(oracle默认)YESNONO
repeatable(mysql默认)YESYESNO
serializableYESYESYES

15.锁

排他锁(exclusive locks,简称X锁):又称为写锁。若事务T对数据对象A加上X,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,知道T释放A上的锁为止。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。

共享锁(share locks,简称S锁):又称为读锁。若事务T对数据对象A加上了S锁,则事务T可以读取A但是不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的锁为止。

**两段锁协议:**所谓的两段锁协议是指所有事务必须分为两个阶段对数据项加锁和解锁。

  • 在对任何数据进行读和写操作之前,首先要申请并获得对该数据的封锁。
  • 在释放一个封锁之后,事务不再申请和获得任何其他封锁。

16.三级封锁协议

一级封锁协议:事务T在修改数据之前先对其加X锁,直到事务结束时才释放锁。事务结束包括正常结束(commit)和非正常结束(rollback)。

二级封锁协议:在一级封锁协议的基础上增加事务T在读取数据R之前必须对其加S锁,读完即可释放S锁。

三级封锁协议:在一级封锁协议的基础上增加事务T在读取数据R之前必须对其加S锁,直到事务结束才可释放。

17.故障的种类和恢复

1.事务内部的故障:事务内部的故障是非预期的,是不能由应用程序处理的。如运算溢出、并发事务发生的死锁而被选中撤销该事务等。

UNDO(撤销的方法)反向扫描日志文件。

2.系统故障:系统故障造成的数据库不一致的状态的原因有两个,一是未完成事务对数据库的更新可能已经写入数据库,二是已提交事务对数据库的更新可能还留在缓冲区还没来得及写入数据库。**恢复的策略是:**撤销故障发生时未完成的事务,重做(REDO)已提交的事务,使得数据库真正恢复到一致的状态。

**3.介质故障:**这是最严重的一种故障,恢复的方法是重装数据库,然后重做已完成的事务。

三、操作系统

1.操作系统的简单概念

**操作系统(Operating System,OS)**是指控制和管理整个计算机系统的硬件和软件资源;合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合。操作系统是计算机系统最基本的系统软件。

2.进程和程序的区别?

① 进程是动态的,程序是静止的。进程是程序的执行,程序是有序代码的集合。

② 进程是暂时的,程序是永久的。进程是一个状态变化的过程,程序可以长久保存。

③ 进程和程序的组成不同:进程包括程序,数据和进程控制块(PCB)。

④ 进程和程序是密切相关的。通过多次执行,一个程序可以对应多个进程;通过调度关系,一个进程可以包括多个程序。

⑤ 进程可以创建其他进程,但是程序不能形成新的程序。

3.进程和线程的区别?

① 调度:线程是独立调度的基本单位,进程是资源拥有的基本单位。在同一进程中,线程的切换不会引起进程切换。在不同进程中进行线程切换,将会引起进程切换。

② 拥有资源:进程是拥有资源的基本单位,而线程不拥有系统资源(除了少量资源,比如栈,程序计数器,寄存器),不过线程可以访问其隶属进程的系统资源。

③ 并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,而且同一个进程内的多个线程之间也可以并发执行,能提高系统的吞吐量,系统的并发性也更好。

④ 系统开销:在创建进程和撤销进程时,系统都要为之分配或回收资源,所以操作系统为进程付出的系统开销远大于创建线程或撤销线程的开销。

⑤ 同步和通信:多线程之间的同步和通信容易实现。

4. 什么是DMA?什么是中断?两者的区别。

① 中断方式是I/O设备主动打断CPU的运行并请求其服务,而DMA方式则是在所要求传送的数据块全部传送结束时要求CPU 进行中断处理。这就大大减少了CPU进行中断处理的次数。

② 中断方式的数据传送是在中断处理时由CPU控制完成的,而DMA方式则是在DMA控制器的控制下,不经过CPU控制完成的。这就排除了CPU因并行设备过多而来不及处理以及因速度不匹配而造成数据丢失等现象。

5. 页面置换算法有哪些?什么是LRU?

① 最佳置换算法(OPT):在预知一个进程的页面号引用串的情况下,每次都淘汰以后不再使用的或以后最迟再被使用的页面。该算法不能实现,只能作为一个标准来衡量其他置换算法的优劣。

② 先进先出算法(FIFO):每次总是淘汰最先进入内存的页面,也就是将在内存中驻留时间最长的页面淘汰。(可能会产生Belady异常,缺页次数随着分配的物理块的增加而增加)。

③ 最近最少使用算法(LRU):选择最近最少未被使用的页面淘汰,其思想是用以前的页面引用情况来预测将来会出现的页面引用情况。利用了局部性原理。

④ 时钟置换算法(CLOCK):是LRU和FIFO的折中,具体方法略。

⑤ 工作集算法

⑥ 工作集时钟算法

⑦ 第二次机会算法

⑧ 最近未使用(NRU)

6.CPU调度算法(了解详细的算法思想)

① 先来先服务调度FCFS:算法简单,但效率低。对长作业有利,对短作业不利(相较于SJF和HRRN);有利于CPU繁忙型作业,不利于I/O型繁忙型作业。

② 短作业优先调度SJF:该算法对长作业不利,该算法不能保证紧迫性作业被及时处理;

③ 优先级调度Priority:静态优先级、动态优先级。该算法中的优先级用于描述作业运行的紧迫程度。

系统进程 > 用户进程

交互型进程 > 非交互型进程(前台进程 > 后台进程)

I/O型进程 > 计算型进程

④ 时间片轮转调度RR:时间片轮转主要用于分时系统。

⑤ 高响应比优先调度HRRN:是对FCFS和SJF调度算法的一种综合平衡,同时考虑了每个作业的等待时间和估计的运行时间。

⑥ 多级队列调度

⑦ 多级反馈队列调度:是RR和HRRN的综合,UNIX使用的就是多级反馈队列调度算法

7.磁盘调度算法

①先来先服务(FCFS):FCFS算法根据进程请求访问磁盘的先后顺序进行调度,这是一种简单的调度算法。

②最短寻道时间优先(SSTF):该算法处理的磁道是与当前磁头所在磁道距离最近的磁道,以便每次寻找的时间最短。缺点:会产生饥饿

③扫描算法(SCAN):又称为电梯调度算法。

④循环扫描算法(CSCAN):在扫描算法的基础上规定磁头单方向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。

8.信号量和PV操作

①整型信号量:用于表示资源数目。

②记录型信号量:用一个结构体实现,里面包括记录资源的个数和一个等待队列。

typedef struct{
    int value;			//剩余资源数
    struct process *L;  //等待队列
}

相应的P()V()操作:
    void wait(semaphore S){
    S.value--;
    if(S.value < 0){
        add this process to S.L;
        block this process;
    }
}

	void signal(semophore S){
        S.value++;
        if(S.value <= 0){
            remove a process P from S.L;
            wakeup(P);
        }
    }

9.简述操作系统中系统调用过程?

系统调用提供了用户程序和操作系统之间的接口,应用程序通过系统调用实现其与OS的通信,并取得它的服务。系统调用不仅可供所有的应用程序使用,而且也可供OS本身的其它部分,如命令处理程序。

系统调用的处理步骤(三步):

首先,将处理机状态由用户态转为系统态;

然后,由硬件和内核程序进行系统调用的一般性处理,即首先保护被中断进程的CPU环境,将处理机状态字PSW、程序计数器PC、系统调用号、用户栈指针以及通用寄存器内容等压入堆栈;再然后将用户定义的参数传送到指定的地址保存起来。

其次,分析系统调用类型,转入相应的系统调用处理子程序。(通过查找系统调用入口表,找到相应处理子程序的入口地址转而去执行它。)

最后,在系统调用处理子程序执行完后,应恢复被中断的进程或设置新进程的CPU现场,然后返回被中断进程或新进程,继续往下执行。

10.存储器管理应具有的功能?

存储管理的主要任务是为多道程序的运行提供良好的环境,方便用户使用存储器,提高存储器的利用率以及从逻辑上扩充存储器,故应具有以下功能:

① 内存的分配和回收:实施内存的分配,回收系统或用户释放的内存空间。

② 地址变换:提供地址变换功能,将逻辑地址转换成物理地址。

③ 扩充内存:借助于虚拟存储技术活其他自动覆盖技术,为用户提供比内存空间大的地址空间,从逻辑上扩充内存。

④ 存储保护:保证进入内存的各道作业都在自己的存储空间内运行,互不干扰。

11.程序的装入方式有哪些?

补充:应用程序从用户编写的源文件到内内存中执行的进程大致分为三个阶段,经过编译程序将源代码便以为若干个目标模块,在通过链接程序将编译好的目标模块以及所需的库函数链接到一起,形成完整的装入模块,最后通过装入程序将这些装入模块装入内存并执行。(编译,链接,装入)

装入方式:

① 绝对装入:在编译时就知道程序将要驻留在内存的物理地址,编译程序产生含有物理地址的目标代码,不适合多道程序设计。

② 可重定位装入:根据内存当前情况,将装入模块装入到内存的适当位置,地址变换通常在装入时一次完成,之后不再改变,也称静态重定位。当操作系统为程序分配一个以某地址为起始地址的连续主存区域后,重定位时将程序中指令或操作数的逻辑地址加上这个起始地址就得到了物理地址。

静态重定位的特点是:一个作业装入内存时,必须给它分配要求的全部内存空间,若没有足够的内存,则不能装入改作业。此外,作业一旦进入内存,整个运行期间就不能在内存中移动,也不能再申请内存空间。

③ 动态运行装入:允许程序运行时在内存中移动位置,把装入模块装入到内存后的所有地址都是相对地址,在程序执行过程中每当访问到相应指令或数据时,才将要访问的程序或数据的相对地址转换为物理地址。动态重定位的实现要依靠硬件地址变换机构。

动态重定位的特点是:可以将程序分配到不连续的存储区中;在程序运行之前可以只装入它的部分代码即可投入运行,然后在程序运行期间,根据动态申请分配内存;

12. 程序的链接方式有哪些?

① 静态链接:在程序运行之前,先把各个目标模块及所需库链接为一个完整的可执行程序,以后不再拆开。

② 装入时动态链接:将应用程序编译后所得到的一组目标模块在装入内存时采用边装入边链接的链接方式。

③ 运行时动态链接:知道程序运行过程中需要一些模块时,才对这些模块进行链接。

13.内存连续分配管理方式有哪些?

① 单一连续分配:优点:简单、无外部碎片;缺点:只能用于单用户、单任务的操作系统中,有内部碎片,存储器的利用率极低。

② 固定分区分配(分区大小可以不等,但事先必须确定,运行时不能改变):优点:无外部碎片;缺点:存储器利用率低。

③ 动态分区分配:

  • 首次适应算法(First Fit): 空闲分区按地址递增的次序链接
  • 邻近适应算法(Next Fit): 又称为循环首次适应算法,由First Fit演变而成,不同的是分配内存时从上次查找结束的位置开始继续查找。
  • 最佳适应算法(Best Fist): 空闲分区按容量递增的次序链接
  • 最坏适应算法(Worst Fit): 空闲分区以容量递减的次序链接

14. 常用的存储保护方法

(1)界限寄存器

上、下界寄存器方法

基址、限长寄存器方法

(2)存储保护键:给每个存储块分配一个单独的存储键,它相当于一把锁。

15. 进程线程树图

进程树是一个形象化的比喻,比如一个进程启动了一个程序,而启动的这个进程就是原来那个进程的子进程,依此形成的一种树形的结构,我们可以在进程管理器选择结束进程树,就可以结束其子进程和派生的子进程。

16.同步的四个条件

(1)**空闲让进:**临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。

(2)**忙则等待:**当已有进程进入临界区时,其他试图进入临界区的进程必须要等待。

(3)**有限等待:**对请求访问临界区的进程,应保证能在有限的时间内进入临界区。

(4)**让权等待:**当进程不能进入临界区时,应当立即释放处理器,防止进程忙等待。

17.死锁

(1)死锁的概念

是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

(2)死锁的四个必要条件

① 互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。

② 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

③ 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

④ 环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0 正在等待一个P1 占用的资源;P1 正在等待P2 占用的资源,……,Pn 正在等待已被P0占用的资源。

(3)处理死锁的基本方法

① 预防死锁:这是一种较简单和直观的事先预防的方法。方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。预防死锁是一种较易实现的方法,已被广泛使用。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量降低。

② 避免死锁:该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的的四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。

③ 检测死锁:这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,此方法允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死锁清除掉。(资源分配图不可完全简化,就是死锁定理

④ 解除死锁:这是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。

解除死锁的方法:

  • 资源剥夺法:挂起某些死锁进程并抢夺它的资源,以便让其他进程继续推进。
  • 撤销进程法:强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源。
  • 进程回退法:让一个或多个进程回退到足以回避死锁的地步。

(4)安全性算法和银行家算法

18.分段和分页的区别

1、段是信息的逻辑单位,分段的目的是为了更好地实现共享,根据用户的需要划分,因此段对用户是可见的;页是信息的物理单位,是为了管理主存的方便而划分的,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要,其对用户是透明的。

2、段的大小不固定,由它所完成的功能决定;页的大小固定(一般为4K),由系统决定,将逻辑地址划分为页号和页内地址是由机器硬件实现的。

3、段向用户提供二维地址(段号+段内地址);页向用户提供的是一维地址(页号)

4、段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制。

19.硬中断和软中断是什么?区别是什么?

软中断:

1、编程异常通常叫做软中断

2、软中断是通讯进程之间用来模拟硬中断的一种信号通讯方式。

3、中断源发中断请求或软中断信号后,CPU 或接收进程在适当的时机自动进行中断处理或完成软中断信号

对应的功能

4、软中断是软件实现的中断,也就是程序运行时其他程序对它的中断;而硬中断是硬件实现的中断,是程序运

行时设备对它的中断。

硬中断:

1、硬中断是由外部事件引起的因此具有随机性和突发性;软中断是执行中断指令产生的,无外部施加中断

请求信号,因此中断的发生不是随机的而是由程序安排好的。

2、硬中断的中断响应周期,CPU 需要发中断回合信号(NMI 不需要),软中断的中断响应周期,CPU 不

需发中断回合信号。

3、硬中断的中断号是由中断控制器提供的(NMI 硬中断中断号系统指定为02H);软中断的中断号由指

令直接给出,无需使用中断控制器。

4、硬中断是可屏蔽的(NMI 硬中断不可屏蔽),软中断不可屏蔽。

区别:

1、软中断发生的时间是由程序控制的,而硬中断发生的时间是随机的

2、软中断是由程序调用发生的,而硬中断是由外设引发的

3、硬件中断处理程序要确保它能快速地完成它的任务,这样程序执行时才不会等待较长时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值