[推荐]考中科院三个所的计算机试题范围(软件基础和硬件基础)
OS
基本概念部分
一. 对OS的认识
1. 外部:
模型:OS本身是个层次模型。在计算机中起承上启下的作用。层次:硬件,硬件抽象层,OS内核,OS外部程序,应用软件等。层次模型从两个方面认识:OS在计算机的层次模型中;OS本身也是分层的。OS层次见笔记。
类型(分类):批处理,分时,时事,单用户多用户,单机网络等。
功能:定义:1资源管理,2进程角度:安排计算机工作流程,3方便用户。
内部组成:进程,存储,设备,文件,磁盘管理等。也可以看成是进程存储,设备文件两个子系统。
现代OS特征:动态性等(不会直接考)。
2.内部:子系统:进程控制:进程+处理机
文件管理:设备+文件
3.对典型OS的认识
特点:UNIX,LINUX,NT各有什么特点?WHY?
对应的设计思想:为什么NT有多用户的特点?
一般的设计思想(OS几大模块的设计过程)
A.设计模型(层次模型,面向对象)
例如:给定条件,设计当中某个管理模块。
B.模块设计
一. 进程管理模块:(对进程的认识及控制)
并发的含义,条件,与顺序,并行之间的区别:给定条件,能否实现并发(保证读集写集)?如果不能为什么?什么情况下可以并发?什么情况下可以?
进程的特征,状态:在特定OS设计中各个状态之间的转换。如:LINUX下进程状态转换过程。
进程控制,原语,运行状态:原语的含义。
运行状态:1核心态:哪些进程运行在核心态,在什么情况下它们之间会相互转换?注意中断,系统调用。通过中断进入核心态。中断的处理过程。如NT下给出系统调用,给出函数名,问它在OS中的运行过程,在此过程中他要做的关键性的不走:参数检查,类型匹配,形参的个数处理,如果实参个数超过形参个数,如何处理?参考第10章OS接口。
2用户态:哪些进程运行在用户态。
线程的特征,与进程的比较:进程定义与线程定义+线程好处+线程缺点。
注意:比较题的答法:定义+各自优点+各自缺点。
1. 进程通信:(不会出编程题)
临界区与临界资源的含义:
进程的通信方式:低级,高级(消息,共享存储区等)
进程调度模型:分三层:进程调度,中间调度,作业调度。特定OS从属于哪一类?一般来说,UNIX无作业调度,而其他有3种调度。
常用进程调度算法:
1每种算法的思想:优先权调度,对动态优先权感兴趣;UNIX多级队列反馈轮转。
2各自特点:好?坏?
3实现时的支持:如动态优先权需要什么数据结构,硬件。
4实际OS中,采用的是什么?
二. 存储管理模块(内存+外存+CACHE+TLB)
1. 内存(尤其是分区式)
(1) 几种典型的内存分配方案:基本思想;设计方案,如何实现动态分区;特点(优缺)。
(2) 虚拟存储思想:
(3) 请求分页式:思想:
硬件支持:页表,地址转换,缺页中断
页面分配策略:
页面置换算法:OBT,LRU,LFU等。注意各自思想;软(数据结构)硬件(存储区,寄存器等)实现。
实例:
2. 外存(尤其是连续分配)
(1) 磁盘调度算法:1思想:
2实例:对特定例子,最好的磁盘调度算法是什么
(2) 外存分配方式:1连续:过程,如何做,分配不好出现的情况。
2链接:显式,隐式的含义特点:思想,大概做法。
3索引:常见的,所以不一定考。
3. 抖动(请求分页式):外存空间分配会不会出现抖动?从空间分配方法,内外存分配的区别表现在哪些方面?抖动是否可以看成一个方面?
4. 碎片:不同的分配方案要分别考虑这4个问题
(1) 含义:
(2) 引起原因:分区式的区内碎片,分页式的页内碎片,外存分配的连续分配。
(3) 解决方法:紧凑。什么时候用?分页式一般不谈紧凑
(4) 分类:1内碎片(内存中的)和外碎片(外存中)
2内碎片是页内碎片等已经分配给进程但不会被使用的空间。
5. 实例设计:尽量选用速度快价格可以接受的。EG:全用CACHE不用磁盘。
三.设备与文件管理模块(目前出题比较少)
1.I/O控制方式,做法:重点是中断方式。如:中断的处理过程,它所运行的状态(可以在核心态也可以在用户态)。
2.缓冲区:类型,作用(缓冲速度)。
注意:从设计角度出题。
实际OS
一. 她们体现出的特点及如何体现:如LINUX在完成一个任务花的时间比较短,WHY?从调度算法等多方面说明。
二. 进程/线程调度算法及算法流程,数据结构,特点。(优先权定义,如何改变,调度 的标准)
三. 请求分页方案的实现细节:数据结构,页面置换,淘汰等。
死锁不会考,UNIX估计也不会考,分区是重点,考LINUX和NT的可能性比较大。
1.1.3 1.2.5 2.1.2 2.1.3 2.1.4 2.2.1 2.2.2 2.3.1 2.3.2 2.4.1 2.4.2 2.4.3 3.1.1 3.1.2 3.5 4.1 4.2 5.2.2 5.2.3 5.2.4 5.4 5.5.1 5.5.2 6.1 6.2 6.3 6.4.3 7.2.2 7.3 8.2 9.1 9.2 10.2
DS
1. 数据结构的概念:数据之间的内在联系。要了解3种数据结构的概念:逻辑结构;物理结构;基本操作。
例如:栈和队的逻辑结构都是线性的,但她们的基本操作不同,就是不同的数据结构。
2. 常见的数据结构的分类:线性关系;集合关系;一对多;多对多(图);
3. 什么事物理结构(应该有印象)。
4. 算法设计时要用类PASCAL,类C,不要用C++.
5. 算法分析的常用方法:事前分析;事后统计。
6. 时间/空间复杂度的概念。空间是算法运行时资源占用情况。
时间复杂度:最坏,最好,平均。
例如:归并排序都是O(n*logn),最好,最怀,平均都是一样的
插入排序:最好为O(n) ,最坏为O(n2)
7. 线性表:逻辑关系,各种基本操作,两个有序表的归并。
线性表的顺序存储:线性表的操作在顺序表中的实现。
例如:1。插入与删除和插入的位置与表长有关。
2.在一个长为n的表中插入一个元素的平均复杂度,要有插入位置的概率分布表达式,即给出此表达式,算平均复杂度。
8. 线性表的链式存储:链表的基本操作:2个有序表的归并。
例如:1。把链表就地逆置:一个指针P指向当前逆置好的一系列节点的最后一个节点,取P的NEXT插入队头。
2.三色问题:节点红黄蓝在链表上无序排列,把他们按红黄蓝的顺序排好。要求只能从头到尾搜索一遍。设当前指针P,头指针S,S.NEXT为Q,S后接红节点。若P为红,插入S后。若P为黄,插入Q后。若P为兰,不动。然后P向后移,求下个。
注:要了解单链表的插入,删除在什么位置操作。
9. 静态链表(数组表示):不能象单链表那样不受限增加节点。
10. 循环链表:如果表示队列,用它最好。P指向队尾。好处:用于优先队列中。
11. 双向链表:单链表中只有P指向当前节点,不能删除P。因为无法找到P 的前驱。而双向链表可以。注意指针变化情况。
12. 栈:后进先出。基本操作:出入栈,取栈顶。在顺序表和链表上的实现;出栈序列是否合理?
例如:入栈序列是1,2,,,n,则出栈序列有几种?(即n个节点的二叉树的个数。因为树的先序是1,2,,,n)。
13. 栈与递归:见我给你寄过去的手写体。
14. 队列:先进现出。链队列,循环队列。
例如:1。把从队头开始的第i个元素删除:队列 只有出队入队,不能直接删除。要先将前i-1个出队,入队尾;i出队;i+1以后的出队入队尾。
2.队列逆置(队头与队尾交互):出队入栈;后出栈入队。
注意:这些结构的基本操作有什么,不能混。
15. 循环队列:队头指针和队尾指针。记住队空和满的标志。见手写版。
16. 串:1。KMP算法,求NEXT函数值等。时间:O(n+m)。其中,模式匹配为O(n);预处理为O(m),要会证明她们。简略证明见手写版。
2.求两串的最长公共子串,时间为O(n)是不行的,至少要O(n2)。具体证明估计不会考。
17.数组:存储位置与下标对应。特殊数组(对称,上三角等)。
三元组,稀疏矩阵(求逆)。计数技术,在设计算法中的应用。
十字链表不考。
广义表:基本概念,存储结构(二叉链表)。应用不考。
广义表递归算法了解。
18. 二叉树的性质(熟)。
存储结构:二叉链表,三叉链表。
遍历:中,先,后。 按层遍历:用辅助队列。例如求K层有多少节点。
19. 线索二叉树:中序(先后序不考)。线索中的插入删除不考。
20. 树与森林的遍历:树的先根与后根(分别对应相应二叉树的先序,中序)。森林的先序和后序(分别对应相应二叉树的先序,中序)。
树与二叉树一一对应。
由先序中序可以唯一确定二叉树。而由先序后序不能。例子见手写版。
二叉树可以为空,树不能为空(树为有根有序树)。
21. 树与等价:例如:判断一个元素是否属于一个特定的集合,可看这个节点是否在此树上。看两个节点是否在一个强联通分量,看他们是否在一棵树上。求KRUSCAL算法(最小生成树集合)。
22. 哈夫曼:前缀码。它是加权外部路径长度最小的二叉树。它是严格二叉树,无度为1的点。节点个数=2×叶节点-1。 构造,编码。
扩展:用0,1,2三进制编码:元素个数为奇。N个元素K进制:K-1整除N-1。否则增加概率为零的元素。
注意11。6节的最佳归并。
23. 树的计数:记结论。
1. N个操作符或N个括号,为操作符加括号的情况数目。
2. N+2个顶点的凸多边形,他的不同三角剖分的个数。
3. a1,a2,,,an, ai=1/-1,任意前k个ai之和大于等于0,求不同组合数。
4. 见手写版。
24. 图:存储结构(针对有向图和无向图)。邻接表中边节点中存储的信息不是顶点内容而是顶点序号。
25. 图的遍历:深度优先借助于栈;广度优先借助于队列。
26. 图的连通:深度优先搜索一次。
27. 有向图的强联通分量(不重要)。
28. 最小生成树:PRIM算法,KRUSCAL算法。写算法,要用到树与等价类。(SEL-UNION算法)。她们的时间复杂度。若用优先队列,时间复杂度降低。
29. 关节点,关键路径:深度优先数。
30. 有向无环图:拓扑排序。用邻接矩阵保存它,则入度为0的列全为0。去掉该节点,必还有节点入度为0,所以调整矩阵,可得上三角矩阵。
DAG图等价为拓扑有序。拓扑排序算法:2个共享链栈,利用空间。
若得逆拓扑序,不用栈而用队列;也可以增加一个栈。也可以用深度优先搜索,找最深得那个节点最先把它输出。
31. 最短路径:单源(有向图,且权值>=0是DIJISTRU算法的适应范围)。对无向图,可看成2个方向权值一样。例子见手写版。
问:DIJISTRU算法能否求图的最小生成树?不能。
打印最短路径,时间O(n2),空间O(n),可以用DIJISTRU算法得到集合的同时,记录每个节点前面那个元素,一个一个向前找。
32. 二部图:一个图是否是二部图?时间是O(n)。用等价类:一个边的两点分属于不用等价类(估计不会考太深)。
33. 伙伴系统,边界标识(要看)。无用单元收集不考。
34. 顺序查找时间(最坏,平均)。有序表查找,二分查找,折半查找(判定树,树的高度,平均检索长度(在成功和不成功时的不同情况))。
静态树表不考,静态次优不考。
索引顺序表:概念。
动态查找:二叉排序树:中序遍历有序,先序无序。给出先(或后)序的次序,写出此树(因为中序是顺序的,已知)。他的插入和删除(删除不一定考)。给定树,求平均查找长度。
查找长度的量级。
平衡二叉树:一定是二叉排序树。树的所有子树都是平衡二叉树。反之不成立。若要执行4种旋转,至少7个节点。
M阶B树:关键字个数的上下限。N个关键字构成树的节点数目层数。
B+树的概念。 键树。
35. 哈希表:解决冲突的方法。只有链地址法可以解决二次聚集。不是同义词不会竞争同一位置。链地址法是顺序结构和链结构的完美结合。
36. 查找长度:1。探测次数(包括最后一次比较为空的次数)。
2.关键字比较次数(不包括最后一次为空的)。
37.内部排序:简单插入排序(稳定);折半(不稳定);希尔(不稳定);冒泡(稳定);快速(不稳定);选择(不稳定);堆(不稳定);归并(稳定)。要记住她们的时间复杂度(最好,平均,最坏)。
基数排序:给定N个数,范围在(0,n2-1),以O(n)时间排序。记ni=ai*n+bi,按(ai,bi)先以bi为基数排序,再以ai 排。
基数排序利用关键字本身的值,而其他基于比较。
37. 找最大和最小值的时间[3/2n]-2。见手写版。两两比较,小的方一个数组,大的放一个数组,再找。
找最大和次大值:可以调整堆,也可以记下比较路径。