资源描述
第二章
2.1 什么是数据结构?它对算法有什么影响?
数据结构是指同一数据对象中各数据元素间存在的关系。
数据结构对算法的影响:算法的实现必须借助程序设计语言中提供的数据类型及其运算。一个算法的效率往往与数据的表达形式有关,因此数据结构的选择对数据处理的效率起着至关重要的作用。它是算法和程序设计的基本部分,它对程序的质量影响很大。
2.2 何谓算法?它与程序有何区别?
广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。计算机算法是通过计算机能执行的算法语言来表达的。
和程序的区别:一个程序包括两个方面的内容:
(1)对数据的描述,即数据结构。
(2)对操作的描述,即算法。
所以算法是程序的一个要素。
2.3 何谓频度,时间复杂度,空间复杂度?说明其含义。
频度:在某个算法中某个语句被重复执行的次数就是此语句的频度。
时间复杂度:是用来估算一个算法的执行时间的量,以算法中频度最大的语句来度量。
空间复杂度:指在算法中所需的辅助空间的单元,而不包括问题的原始数据占用的空间。
2.4试编写一个求多项式Pn =anxn +an-1 xn-1+a1x+a0的值Pn(x 0)的算法,要求用乘法次数最少,并说明算法中主要语句的执行次数及整个算法的时间复杂度。
A=(a0, a1 ……an)
mul = 1 //
sum=a0
for i=1 to n
mul = mul * x // x
sum = A[i]*mul + sum //求和
end(i)
进行了n次
时间复杂度为:2n
2.5计算下列各片段程序中X←X+1执行次数
(1)
for i=1 to n
for j=1 to i
for k=1 to j
x←x+1
end(k)
end(j)
end(i)
执行次数:n*n*n
(2)
i←1
while i<n do
x←x+1
i←i+1
end(while)
执行次数:n-1
(3)
for i=1 to n
j←1
for k=j+1 to n
x← x+1
end(k)
end(i)
执行次数:n*(n-1)
2.6 数据的存储结构主要有哪两种?它们之间的本质区别是什么?
数据的存储结构:向量和链表。
本质区别:
向量是连续存放的,其存储空间是静态分配的,以存放顺序来表达元素的前后件的关系。
链式存储结果不需要一组连续的存储单元,其数据元素可以分散存放在存储空间中,其元素关系由指针来指向。
2.8已知线性表L(a1, a2, … , an ) 元素按递增有序排列。用向量作为存储结构,试编写算法:删除表中值在c与d之间(c<=d)的元素
大于等于c
序号4
大于d
序号11
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
a11
a12
a130
a14
a15
找到第1个大于等于c的元素,序号为s
找到第一个大于d的元素,序号为t
L[s] ← L[t]
L[s+1] ← L[t+1]…
L[s+m] ← L[t+m] // s+m = t -1 m = t – s - 1
L[s + i ] ← L[t + i ] // i = 0 to t-s-1
i=1; // i 从1 循环到n
s = -1; // 第1个大于等于c的元素序号
t = -1; // 第1个大于d的元素序号
for i = 1 to n step -1
if s ==-1 and L[i]>=c // 找到第1个大于等于c的元素
s = i
if t == -1 and L[i] >d // 找到第1个大于d的元素
t = i ;
end (i)
if s != -1 and t !=-1
i = s
while i < t and i + t – s <=n
L[i] = L [i + t – s ]
i++
end(while)
else
return(错误 没有找到 元素在c和d之间)
end(if)
for j=c to n-d+c
L[j]<--L[j+d-c]//把j+d-c项给j
End(j)
N<--n-d+c//所有项数减少
Return
2.9 线性表A,B中的元素为字符串类型,用向量结构存储,试编写算法,判断B是否为A的子序列(例如A=ENGLISH ,B=LIS ,则B为A的子序列)
A[m] B[n]
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
a11
a12
a130
a14
a15
A:
b1
b2
b3
b4
b5
b6
B:
i=1 检查A中第1个元素开始的字符串是否与B匹配
i=2 检查A中第2个元素开始的字符串是否与B匹配
… …
i= m – n + 1 检查 A中 第(m-n+1)个元素开始的字符串是否与B匹配
A[m]
B[n]
if ( m<n ) then return error
for ( i =1; i<= m-n+1; i++)
for (j = 1; j<= n ; j++)
if (A[i+j-1 ] != B[j ])
break;
end(j)
if j>n then return( A字符串中第i个字符开始的子串与B匹配 )
end(i)
renturn (找不到匹配的子串)
设A,B两个线性表的元素个数为m,n
If (m<=n)then{return}
For i=0 to n-1
a=A[i]
for j=0 to m-1
if(a=B[j])then{b++}
end(j)
end(i)
if(b=m)then{B 为A的子集}
return
2.11写一个将向量L(a1 ,a2, an)倒置的算法。
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
a11
a12
a130
a14
a15
对L(a1,a2, ... ..., an )
如果是奇数个元素,则
1, 15 交换 1, n 交换
2,14 交换 2, n-1 交换
3,13 交换 3,n-2 交换
4,12 交换 4,n-3 交换
5,11 交换 5,n-4 交换
6,10 交换 6,n-5 交换
7,9 交换 7,n-6 交换
8,8 交换 8,n-7 交换
9,7 交换 9,n-8 交换? 停止!!!
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
a11
a12
a130
a14
a15
如果是偶数个元素,则
1,14 交换 1, n 交换
2,13 交换 2, n-1 交换
3,12 交换 3,n-2 交换
4,11 交换 4,n-3 交换
5,10 交换 5,n-4 交换
6,9 交换 6,n-5 交换
7,8 交换 7,n-6 交换
8,7 交换? 8,n-7 交换? 停止!!!!
小结:n个元素倒置的算法是,
i = 1
while ( i<n-i+1)
a[i] 与 a[n-i+1] 交换
i++
end(while)
2.12试编写算法求已知单链表长度,并考虑表空的情况。
^
p = head
i = 0
While(p!=nil) //表不为空
P<-- next(p)//移动到下一个元素
i++
End(while)
Return i //返回数据的个数
2.13试编写算法删除单链表中第k个结点。
标签
GETNODE(q)
GETNODE(p)
q<-head
For i=1 to k-1
q<-next(q)
End(i)
P<-next(q);next(q)<-next(p)
Ret(p)
Return
2.14 已知一循环链表中数值已按递增有序排列现要插入一个新结点,并使插入一个新节点,并使插入后链表仍为有序序列
GETNODE(p)
Data(p)=a
While(data(p)<data(n))
n<-next(n)
End(while)
q <-n
next(p) <--next(q)<-p
return
2.18 设在长度大于1 的循环链表中,即无头结点,也无头指正,p为指向链表中每个节点的指针,试编写算法删除该节点的前趋结点。
q<-Next(p)//找到该节点的前趋结点
p<-next(q);next(q)<-next(p)
RET(p)
Return
2.20 试用单链表表示两个多项式:A=4X12 +5X8+6X3+4 ,B=3X12+6X7+2X4+5
(1)设计此两个多项式的数据结构
-1
A
0
4
3
6
8
5
12
4
-1
B
0
5
4
2
7
6
12
3
(2)写出两个多项式相加的算法
II 答案参见33页即可
2.22 CQ[0:10]为一循环队列,初态 front=rear=1,画出下列操作后队的头,尾指示器状态:
(1)d,e,b,g,h入队;rear=6 front=1
(2)d,e出队 rear=6 front=3
(3)I,j,k,l,m入队 rear=0 front=3
(4)b出队 rear=0 front=4
(5)n,o,p,q,r入队 rear=5 front=4
2.25 有一个二维数组A[1:m ;1:n],假设A[3,2]地址为1110,A[2,3]地址为1115,
若每个单元占一个空间,问A[1,4]的地址是多少
答案:1120
2.26 用三维数组和带行辅助向量形式表示下列稀疏矩阵:
答案:
(1)
1
1
15
1
4
22
1
6
-15
2
2
11
2
3
3
3
4
-6
5
1
91
6
3
28
I
1
2
3
5
6
Pos
1
2
4
1
3
Num
3
2
1
1
1
(2)参考上面的,和47,48页的内容
2.28将题图2.3的一般树化为二叉树。
答案:
2.29 设一颗完全二叉数有1000个结点,试问:
(1)有多少个叶子结点 489
(2)有多少个度为2的结点 2
(3) 有多少个结点只有非空左子树 1
2.30 设一颗二叉树其中序和后序遍历为
中序:BDCEAFHG
后序:DECBHGFA
答案:ABCDEFHG
2.31.对二叉树写出如下算法:
(1)复制一棵二叉树;
(2)判断两棵二叉树是否相等;
(3)计算二叉树的树叶;
(4)计算二叉树的深度;
解:
1)//复制一棵二叉树
/*算法思想
采用递规函数来实现
(1)如果树为空,则复制一棵空树;
(2)如果树不为空,则依次递规复制已知二叉树的左子树和有子树;
(3)生成一个新的根结点,使复制得到的左子树和右子树的根指针分别成为这个新生成结点的左指针域和右指针域的值。
算法编写:
*/
BiTree *CopyTree(BiTree *T){
//
if(!T) return NULL;
if(T->lchild)
newlchild=CopyTree(T->lchild);//
else newlchild=NULL;//
if(T->rchild)
newrchild=CopyTree(T->rchild);//
else newrchild=NULL;//
newnode=GetTreeNode(T->data,newlchild,newrchild); //
return newnode;
}//CopyTree
BiTNode *GetTreeNode(TelemType item,BiTNode *lptr,BiTNode *rptr){
//
T=new BiTNode;
T->data=item;T->lchild=lptr;T->rchild=rptr;
return T;
}//GetTreeNode
(2)
在这里要对一种情况进行说明
当root1的左子树与root2的左子树相同,root1的右子树与root2的右子树相同时,这两颗二叉树相同。
当root1的左子树与root2的右子树相同,root1的右子树与root2的左子树相同时,这两颗二叉树同样相同。
以下是实现代码
bool IsBSTEqual(BNode* root1,BNode* root2)
{
if (root1==NULL && root2==NULL)
{
return true;
}
else if (root1==NULL || root2==NULL)
{
return false;
}
else
{
if (root1->data != root2->data)
{
return false;
}
bool is_left = IsBSTEqual(root1->left,root2->left);
bool is_right = IsBSTEqual(root1->right,root2->right);
if (is_left&&is_right)
return true;
else
{
is_right = IsBSTEqual(root1->right,root2->left);
is_left = IsBSTEqual(root1->left,root2->right);
if (is_left&&is_right)
return true;
else
return false;
}
}
}
3)4)
计算叶子数和树的深度。计算叶子:递归每个节点,当没有左孩子和右孩子时即为叶子。计算深度:对每个节点计算左右子树的深度,节点的最终深度是其子树深度的最大值加1,空树返回-1.
struct Tree
{
ElementType Element;
Tree *left;
Tree *right;
};
int CountLeaf(Tree *T)
{
static int count = 0;
if (T != NULL)
{
CountLeaf(T->left);
CountLeaf(T->right);
if (T->left == NULL && T->right == NULL)
count++;
}
return count;
}
int Depth(Tree *T)
{
int depthLeft, depthRight, depth;
if (T == NULL)
return -1;
else
{
depthLeft = Depth(T->left);
depthRight = Depth(T->right);
depth = 1 + (depthLeft > depthRight ? depthLeft:depthRight);
}
return depth;
}
2.32.给定一组元素{17,28,36,54,30,27,94,15,21,83,40},画出由此生成的二叉排序树。
83
28
30
40
21
94
54
36
15
17
解:
27
2.33.给定一组权值W={8,2,5,3,2,17,4},画出由此生成的哈夫曼树。
2
2
3
4
5
17
8
2.34.有一图如题图2.4所示:
(1)写出此图的邻接表与邻接矩阵;
(2)由给点V1作深度优先搜索和广度优先搜索;
(3)试说明上述搜索的用途。
2
10
18
20
19
17
16
15
13
14
12
11
9
7
8
4
6
5
3
1
解:(1)
^
8
5
2
1
^
10
3
1
2
^
12
2
4
3
^
14
5
3
4
^
6
4
1
5
^
15
7
5
6
^
17
1
8
6
7
^
15
7
11
8
^
18
10
8
9
^
11
9
2
10
^
19
12
10
11
^
13
11
3
12
^
20
14
12
13
^
15
13
4
14
^
16
14
6
15
^
20
17
15
16
^
18
16
7
17
^
19
17
9
18
^
20
18
11
19
^
19
16
13
20
(2)
V1作深度优先搜索:
V1作广度优先搜索:
(3)为了避免同一顶点被多次访问。
2.35.有一又向图如题图2.5所示:
5
1
6
2
4
3
(1)写出每一结点的入度和出度各为多少;
(2)写出上图的邻接矩阵和邻接表。
解:
V1:入度=3 出度=0
V2:入度=2 出度=2
V3:入度=1 出度=2
V4:入度=2 出度=2
V5:入度=2 出度=1
V6:入度=0 出度=4
^
1
^
5
3
1
2
3
4
5
6
^
1
4
^
2
^
4
5
^
2
1
6
^
3.36 求题图2.6中结点a到各结点之间最短路径。
h
f
g
e
d
c
b
a
2
2 2 2
1 2 3
3 1 4
1
解:
2.37 求题图2.7中所示AOV网所有可能的拓扑顺序结果。
解:
2
1
7
3
8
5
4
6
V1
V2
V3
V4
V5
V6
0
0
0
0
0
1
3
8
^
6
8
^
4
^
8
^
V7
0
V8
0
0
^
^
8
^
4
^
拓扑排序:V7->V5->V2->V4->V6->V3->V1->V8
2.38 题图2.8所示AOE网,求:
(1).每一事件最早开始时间和最晚开始时间;
(2).该计划最早完成时间为多少。
解:
活动最早最迟开始时间
a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14
E 0 0 5 6 6 12 12 12 19 19 16 20 23 25
L 4 0 9 6 16 12 19 16 19 19 23 20 23 25
L-E 4 0 4 0 10 0 7 4 0 0 7 0 0 0
事件最早最迟开始时间
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
VE 0 5 6 12 19 16 20 23 25 27
VL 0 9 6 12 19 23 20 23 25 27
2.39 画出进行分块查找的数据组织形式。
解:设将数据分成4块,每块中记录个数5,
先查找索引值
97451 97517 97528 97543
第1块 2 3 4
97321,97421,97451,
97241,97118
97250,97407,97239,
97227,97517
97438,97102,97528
97136,07338
97543,97309
2.40 画一棵对20个记录进行对分查找的判定树,并求等概率情况下的平均查找长度。
ASL=(1+2*2+3*4+4*8+5*5)/20=3.7
2.6 数据的存储结构主要有哪两种?它们之间的本质区别是什么?
数据的存储结构:向量和链表。
本质区别:
向量是连续存放的,其存储空间是静态分配的,以存放顺序来表达元素的前后件的关系。
链式存储结果不需要一组连续的存储单元,其数据元素可以分散存放在存储空间中,其元素关系由指针来指向。
2.5 试比较顺序表和链表的优缺点。
1. 线性表的长度是否固定方面:由于向量的存储空间是静态分配的,链表的存储空间是动态分配的,因此若表长不固定时采用线性链表较好。
2. 线性表的主要操作是什么:由于向量是连续存放的,所以适用于查找操作,不适用插入、删除操作。由于线性链表只能顺序存取,所以适用于插入、删除操作,不适用于查找操作。
3. 采用的算法语言:线性链表要求所使用的语言工具提供指针类型变量。
2.6 试比较单向链表与双向链表的优缺点。
1. 单向链表只能单方向地寻找表中的结点,双向链表具有对称性,从表中某一给定的结点可随意向前或向后查找。
2. 在作插入、删除运算时,双向链表需同时修改两个方向上的指针,单向链表则简便些。
2.7 试说明树与二叉树有何不同?为何要将一般树转换为二叉树?
树与二叉树区别:树是由n个(n>=0)结点组成的有限集合T,其中有且仅有一个结点称为根结点,在此类元素结点之间存在明显的分支和层次关系。
二叉树是一种特殊的树结构,每一个结点最多只有两个孩子,即最多只有两个分支。
为何要转换:一般树,树中结点次序没有要求,分支庞杂。而二叉树,元素之间存在严谨的前后代关系,在对数据元素进行删除、查找、插入等运算时更加有效率。
2.8 若一棵排序二叉树的关键字输入序列为{80,6,10,7,8,25,100,90},请画出该二叉树。
解:二叉排序树为:
80
6
100
90
10
7
25
8
2.9 对于关键字序列{49,38,65,97,76,13},回答下述问题。(共12分)
(1)写出一趟冒泡排序的结果。(6分)
(2)写出一趟快速排序的结果。
参考答案如下:
(1)写出一趟冒泡排序的结果。(6分)
{38,49,65,76,13,97}
(2)写出一趟快速排序的结果。(6分)
{13,38,49,97,76,65}
2.10 请给出图1的所有最小生成树。(10分)
a
e
b
d
f
c
1
2
3
8
6
6
5
图1
答:共有两颗:
a
e
b
d
f
c
1
2
3
6
5
a
e
b
d
f
c
1
2
3
6
6
5
2.11请给出图2的所有拓扑排序序列。(16)
图2
a
b
d
f
g
c
e
h
答案如下:仅有两个
第一个:abcdefgh
第二个:abcdegfh
2.12已知某二叉树的前序遍历序列为:A B C D E F G
和中序遍历序列为:C B E D A F G。请画出该二叉树。
答案如下:
2.13构造该图的最小生成树。
a
e
f
g
d
b
h
c
2
1
1
1
1
2
2
2
2
4
3
图的最小生成树如下
a
e
f
g
d
b
h
c
2
1
1
1
1
2
2
第三章
3.1 操作系统的基本功能是什么?它包括哪些部分?
基本功能: 操作系统应该具有处理器管理,存储管理,设备管理和文件管理功能,同时,为了使用户能方便地使用机器,操作系统还应提供用户接口功能。
构成部分: (1). 对CPU的使用进行管理的进程调度程序 。
(2). 对内存分配进行管理的内存管理程序。
(3). 对输入输出设备进行管理的设备驱动程序。
(4) . 对外存中信息进行管理的文件系统。
3.2 试说明虚拟机的概念以及实现的方法。
在裸机外面每增加一个软件层后就会变成一台功能更强的机器,我们通常把这种计算机系统称为虚拟机。
虚拟机的实现方法:在裸机上装上操作系统对机器进行首次扩展,再在操作系统的基础上增加其他软件,这样就可以实现“虚拟机”。
3.3通常操作系统有哪几种基本类型?各有什么特点及适用于何种场合?
三大类:(1)多道批处理系统:计算机内存中同时可以存放多道作业,用户与作业之间没有交互作用,用户不能直接控制作业的运行。此类系统一般用于计算中心等较大型的计算机系统中。(2)分时系统:多个用户通过终端分享同一台计算机,并通过终端直接控制程序运行,进行人与机器之间的交互。此类系统适用于程序的开发。(3)实时系统:对外部发生的随机事件作出及时的响应,并对它进行处理。此类系统一般用于工业控制系统或事物处理系统。
3.4试说明你所使用过的操作系统的类型和特点。
Windows系统:多用户多任务操作系统。
特点:全新的、友善的用户界面。
提供了功能强大的应用程序。
具有多任务并行处理能力,各种应用程序之间可以方便地进行切换和交换信息。
具有强大的内存管理能力,支持扩展内存功能,提高系统运行效率。
3.5 解释名空间、作业地址空间和存储空间的关系以及逻辑地址和物理地址的区别。
存放源程序的空间称为名空间。当汇编或编译程序将源程序转换成目标程序后,一个目标程序所占有的地址范围称为地址空间,这些地址的编号是相对于起始地址而定的,一般定起始位零,称为逻辑地址或相对地址。存储空间是指当目标程序装入主存后占用的一系列物理单元的集合,这些单元编号称为物理地址或绝对地址。
3.6 什么是重定位?静态重定位和动态重定位的区别是什么?各举一例说明。
当用户程序要调入内存时,必须把相对地址转换为绝对地址,同时要包括对程序中与地址有关的指令进行修改,这一过程称为重定位。静态重定位是在程序装入时进行,一般通过处理机中一对界地址寄存器来实现。动态重定位是在程序执行过程中进行的,当处理器访问主存指令时由动态变换机构自动进行地址转换。
3.7 存储管理器的功能是什么?为什么要引入虚拟存储器的概念?虚存的容量由什么决定?
存储管理的功能主要分为:内存分配、地址转换、存储保护和内存扩充。
虚拟存储器能提供给用户一个比实际内存大得多的存储空间,使用户在编制程序时可以不必考虑存储空间的限制。
虚存的容量受两个条件约束:指令中地址场长度的限制、外存储器容量的限制。
3.10 什么是作业、作业步和进程?
作业是用户在一次算题过程中或一个事务处理中要求计算机系统所做的集合。
一个作业是由一系列有序的作业步所组成。一个作业步运行的结果产生下一个作业步所需的文件。
进程可以看成是程序的一次执行,即是在指定内存区域的一组指令序列的执行过程。
3.11 处理器管理主要解决什么问题?
在大型通用系统中,可能数百个批处理作业存放在磁盘中,又有数百个终端用户与主机联接,如何从这些作业中挑选一些作业进入主存运行,又如何在主存各进程间分配处理器,是操作系统资源管理的一个重要问题,处理器管理就是用来解决此问题的。
3.12 什么是进程的同步和互斥?什么是临界区?
“同步”是指两个事件的发生存在某种时序上的关系,如果系统中有若干个进程要共同完成某一任务,那么它们相互之间必须协调配合。
“互斥”是指当多个进程要求共享系统中某些硬件或软件资源,而这些资源却又要求排它性使用时,这样往往引起由于多个进程竞争同一资源使运行结果出现问题。
如果在两个进程P1、P2中加入P、V操作后,可以实现对公用变量count的互斥使用。其中P(s)、V(s)之间的程序段称为临界区。
3.15 进程间的通信可以由哪些方式进行?
低级通信方式:P-V操作。
高级通信方式:直接通信、信箱通信。
3.16 死锁产生的必要条件是什么?死锁的预防、避免和检测各有什么不同?各举一种相应的方法。
死锁产生的必要条件有:1.所涉及的资源是非共享的;2.进程在等待新资源时,继续占用已分配到的资源;3.一个进程占有的资源不能被别的进程强行抢占;4.一个进程获得的资源同时被另一个进程所请求,从而形成一个进程的循环链。
死锁的预防是研究如何破坏产生死锁的必要条件之一,从而达到不使死锁发生地目的。死锁的避免与死锁的预防区别在于,死锁的预防是严格破坏形成死锁的必要条件之一,使得死锁不在系统中出现。预防方法之一,采用假脱机技术将非共享设备变成共享设备来实现。
而死锁的避免并不严格限制必要条件的存在,因为必要条件存在并不一定产生死锁。而进程推进顺序不当,也可以导致系统发生死锁,因此死锁的避免是考虑万一当死锁有可能出现时,就小心地避免这种情况的最终发生。避免方法有采用相应的银行算法和方法。
死锁的检测和恢复,这是一种变通的方法,它允许死锁的发生,但能在适当时间检测出来,并设法进行恢复。利用化简进程-资源有向图的方法来检测系统在某一特定状态时是否处于死锁状态。
3.17 通道、控制器和设备的各种不同连接方式各有什么特点?
第一种连接方式(书中图3.41(a)):控制器与设备是一一对应的,当系统对某设备提出申请时,CPU将设备号及有关操作要求传递给通道,由通道启动该设备,并完成对该设备的操作。
第二种连接方式(书中图3.41(b)):是一个控制器控制若干个设备,只有当被申请的设备及相应的控制器均为空闲状态时才能启动。
第三种连接方式(书中图3.41(c)):是同道、控制器与设备交叉连接,提高了控制的灵活性,但必须在相应的设备、控制器、同道均为空闲时才能工作。
3.18 什么是“瓶颈”问题?引入缓冲区为何可以解决这一问题?
系统中的独占类型设备,只能由单个作业独占,这样使其他需要改设备的进程由于等待设备而被阻塞,称为系统的“瓶颈”。
缓冲技术是指在内存中划出一个由n个单元组成的区域,称为缓冲区,作为外部设备在进行数据传输时的暂存区。引入缓冲技术的根本原因是CPU数据处理速度与设备传输数据速度不相匹配,利用缓冲区来缓解其间的速度矛盾,减少瓶颈现象。
3.19 设备管理的功能是什么?怎样把一台物理设备虚拟为多台设备?
设备管理的功能:设备驱动程序;
即插即用;
通用即插即用;
集中、同一管理;添加硬件。
通过虚拟机软件,就可以在一台物理计算机上模拟出一台或多台虚拟的计算机。
3.20 什么是记录、文件、文件系统?
记录:文件由若干个记录组成,每一个记录是一些相关信息的集合。
文件:在逻辑上具有完整意义的数据或字符序列的集合。
文件系统:负责存取和管理文件的机构,又称为
展开阅读全文