文档库 最新最全的文档下载
当前位置:文档库 › 清华08计算机考研试题

清华08计算机考研试题

清华08计算机考研试题
清华08计算机考研试题

数据结构》

、选择题

3给了一序列比如6.7.4.8.9.3. 散列函数是H(key)=key%11. 一问成功时的平均搜索长度二问不成功的平均搜索长度

哪种数据结构,从某一个结点到根结点的路径序列组成一个降序排列

a. b. 最大堆c. 最小堆d

还有一个题是关于关键路径的,答案选项是49

/B -C \

/F\ \

\D-E H

\G/

什么是数据结构?A B C定义在一个数据集合上的属性和操作D 高度为h的完全二叉树,一共有多少种? A B 2A(h-1)

、证明题

1.什么样的有向无环图有唯一的拓扑有序序列,并证明。

三、计算题

1 有n 个结点的二叉树最大高度,最小高度分别是多少?

2 一棵有n个结点的树有m个叶节点,如果用做兄弟-右子女表示法,则有多少个结点的右指针域为空?

3 霍夫曼树中,有n 个叶结点,问一共有多少个结点?

4有n 个结点的树的不同排列形式有多少种。

四、给定一个文件有1,000,000个记录,每个200B,记录中关键码大小50B,页面大小为

4kB,现以B+树(最大关键码复刻)方式组织该文件,尽量使每结点拥有尽可能多的关键码,已知每个指针占用5B。

问1.该B+树有多少个叶结点,共有多少层;2.该B+树共有多少个索

引结点;3. 每次搜索要读盘多少次?

五、算法设计题

1. 给定A[n], 设计一个算法,重排数组,使得奇数都在数组前半部分,偶数都在后半部分。要求时间复杂度O(n) 。

函数头:void exstorage(int A[], int n)

2.重新设计一个直接选择算法函数,采用递归方式。对一个大小为n 的数组,初始的调用方式为:selectsort(A, 0, n-1) 。

函数头:void selectsort(int A[],int left, int right) 操作系统》

、简答题

1.磁盘I/O 操作的时间组成部分,阐述优化磁盘调度策略的目标。

2.什么是内碎片,外碎片。

3.内核线程和用户线程的区别?各自有什么特点。

4.什么是内核模式和用户模式?为什么系统要设置这两种模式

5.什么是上下文(context), 请说出它的组成,系统是如何实行多个进程之间调度的,具体过程是怎样的。

、计算题已知系统为32位实地址,采用48位虚拟地址,页面大小4kB,页表项大小为8 个字节;每段最大为4G。

1. 系统将采用多少级页表,页内偏移多少位?

2.假设系统采用一级页表,TLB命中率为98% TLB访问时间10ns,内存访问时间100ns,并假设当TLB访问失败时才开始访问内存,问平均页面访问时间多少?

3.如果是二级页表, 页面平均访问时间是多少?

4.每用户最多可以有多少个段?段内采用几级页表?

5.如果要满足访问时间<=120ns, 那么命中率需要至少多少?

三、pv操作题给定一个全局数组a[n] b[n] ,然后是T1~Tn-1 共n-1 个线程,线程为代码如下

Ti(){ a=g(a,a[i-1]);

b=f(a);

其中g 和f 函数的作用是通过输入参数,进行一系列运算后返回。相当于Ti 以

a 和a[i-1] 为输入参数,a 和

b 为输出。

要求使用pv原语,实现T1?Tn-1的并发互斥,尽量保证最大限度的并发。

(a[i-1] 为Ti-1 线程的结果,)

四、进程同步问题假设当前处于非抢占调度策略,进程只有两种方式可以放弃cpu, —个是主动调用系统调度函数yieldO ,此时进程主动放弃cpu;另一个方式是当进程执行I/O 操作时,系统将调度下一个进程。试分析如下三种进程对,何时会出现不符合下列原则,并说明原因:1)空闲则入2)有限等待3)保证互斥。

第一种:

Thread1(){

yield();

-- critical section

g=g+b;

f=g-a; // 这部分确切的语句想不起来了,但不影

响。只要记得临界区不能被打断。

-- critical section

Thread2(){

-- critical section

g=g+b;

f=g-a;

-- critical section

第二种:

Thread1(){

yield();

-- critical section

g=g+b;

f=g-a;

-- critical section

Thread2(){

-- critical section

g=g+b;

f=g-a;

-- critical section

yield();

第三种:

Thread1(){

yield();

-- critical section

g=g+b;

f=g-a;

-- critical section

Thread2(){

yield();

-- critical section

g=g+b;

f=g-a;

-- critical section

五文件操作题很长,大意如下给定两种文件系统,分别采用FAT方式和索引方式组织文件结构。然后给出缓冲区,缓冲区大小为4个数据块,使用LRU替换算法,并假设所有操作均不涉及内存或cache,只考虑缓冲区。

并声明只有如下两种状态才会刷新缓冲区:a)缓冲区冲突b)系统主动调用一个同步函数

sync() ,同步缓冲区。然后给出当前根目录文件共有10块,分别分布在缓冲区的位置,缓冲区一个24个数据块。用一个表格把它们对应起来了。

然后就是一个超大的表格,给出一些列操作,例如读第几个数据块,并偏移多少字节之类的,然后让填写在fat 和索引方式下读盘次数,写盘次数和当前缓冲区内容。

ps :本题实在记不清了,光读题都要十分钟

file 表存放在第23 块

(第一列都是类似一下的语句)

从偏移量100字节处读入50 字节从偏移量1000 字节处读入20 字节从偏移量*** 字节处读入** 字节调用sync()

FAT

索引方式

读次数写次数缓存内容读次数写次数缓存内容从偏移量100字节处读入50 字节

相关文档