浙江大学 2004 —2005 学年 冬 学期期终考试
《操作系统分析与实验》课程试卷
考试时间: 120 分钟 开课学院: 专业:___________
姓名:____________ 学号:_____________ 任课教师:_____________
题序 一 二 三 四 五 总分
评分 评阅人
壱、 选择题。对于每一个小题,各选择一个正确的答案,填入“()”中 (共40分,每题2
分)
1. ( ) 2. ( ) 3. ( ) 4. ( ) 5. ( ) 6. ( ) 7. ( ) 8. ( ) 9. ( ) 10. ( ) 11. ( ) 12. ( ) 13. ( ) 14. ( ) 15. ( ) 16. ( ) 17. ( ) 18. ( ) 19. ( ) 20. ( )
1. Linux内核的发布者是________ 。
A. Linus Torvards B. http://www.kernel.org C. RedHat D. http://www.gnu.org 2. 目前Linux内核稳定的发行版本编号是________ 。
A. 9.0 B. 2.6.10 C. 2.4.18 D. 2.6.10-rc3-bk15
3. 在bash shell提示符后,键入set并且按下<Enter>键。系统显示________ 。 A. 一个帮助界面,列出了shell常用命令;
B. set命令应该随带的参数名称及其意义;
C. 环境变量和它们当前设置的列表;
D. shell的出错提示信息,表示set命令不存在。
4. Linux继承了UNIX的传统,也提供在线帮助系统。当你使用man passwd时,系统不会 显示________ 。
A. 与passwd命令相关的命令; B. passwd命令的格式;
C. passwd命令的参数的意义; D. passwd命令的历史。
5. shell是Linux的命令解释器。以下关于shell的说法中, ________是错误的 。
A. command.com是一种LINUX shell; B. C shell是一种LINUX shell;
C. TC shell是一种LINUX shell; D. Korn shell是一种LINUX shell。
6. 在Linux文件系统中,有一个目录叫“/dev”。该目录下的文件________ 。 A. 是某个设备的逻辑标识; B. 也是包含一串二进制数的通用文件;
C. 是某类设备的逻辑标识; D. 以上全不对。
7. Linux的一个目录项(directory entry)________ 。
A. 描述了该目录下,一个文件的信息; B. 是一种描述目录的数据结构;
C. 保存了某一子目录的全部信息; D. 保存了某一子目录或某一文件的全部信息。
8. 使用________,不能显示你的家目录的绝对路径。
A. 显示/etc/passwd的内容; B. cd
C. 查看环境变量$PWD; D. echo $HOME
9. 命令________显示当前目录下文件名满足如下条件的所有文件的类型:文件名以chapter开 始,后面跟着一个数字1、2、6、8或9,以.eps结尾。
A. ls chapter[12689].eps B. ls chapter[1,2,6,8,9].eps C. file chapter[1,2,6,8,9].eps D. file chapter[12689].eps 10. 命令chmod =r sample实现命令________的效果。
A. chmod 004 sample B. chmod 444 sample C. chmod 040 sample D. chmod 400 sample
11. 进程的作业号为3,pid号为10974,并且忽略2号signal和15号signal。尽管如此,命 令________将终止它。
A. kill –9 %3 B. kill –2 %3
C. kill –9 %10974 D. kill –2 %10974 12. CPU调度算法_____没有在LINUX的2.4.18版中使用。
A. FCFS B. SJF
C. ROUND ROBIN D. priority
13. 命令_____编译power.c并把生成的可执行代码保存到XpowerY文件。
A. gcc –c XpowerY power.c B. gcc –g XpowerY power.c C. gcc –o XpowerY power.c D. 以上命令都不能
14. SHELL终端中,输入“!vi”,将_____。
A. 不带参数执行vi命令 B. 执行以“vi”开头的一条命令
C. 无条件执行vi命令 D. 执行最近刚执行过的以“vi”开头的命令 15. 在一个磁盘分区中创建一个与Windows兼容的文件系统,可以用_____。
A. mknod B. mkdir C. mkfs D. mkfs.ext2
16. Linux为每一个文件系统设置了magic number,其作用是_____。
A. 描述文件系统的类型 B. 记录了该文件系统中文件、目录总数 C. 表达了共享该文件系统的进程数 D. 唯一表示该文件系统的id
17. Linux的系统调用mount(),属于_____。
A. 设备管理的操作 B. 文件系统的操作 C. 存储管理的操作 D. 进程管理的操作
18. Linux的系统调用fork()创建一个子进程。在所创建的子进程里,fork()_____。
A. 返回父进程的pid B. 返回值大于0 C. 返回值为0 D. 不返回任何值
19. Linux内核的全程变量_____的初值决定于计算机硬件。
A. jiffies B. kstat
C. ROOT_DEV D. high_memory 20. Linux内核的全程变量jiffies _____。
A. 用于记录定时器初始时间 B. 是CPU调度算法用来记录轮转时间片的 C. 是Linux所管理的计算机的基准时间 D. 是Linux内核的基准时间
二、判断题。对于每一个小题,各选择一个正确的答案,填入“()”中(共20分,每题2分)
1. ( ) 2. ( ) 3. ( ) 4. ( ) 5. ( ) 6. ( ) 7. ( ) 8. ( ) 9. ( ) 10. ( )
1.尽管Linux的distributor很多,但它们使用的Linux内核是一样的,最多只有内核版本的区别。
2.Linux没有版权,可以免费使用。
3.使用whoami命令可以让系统显示你的用户名。
4.利用/etc/passwd文件,可以判断你的系统允许哪些用户登录。
5.LINUX系统中有一文件“entry.S”。其扩展名“.S”表示特殊文件类型,即汇编语言源程序。
6.事实上,shell命令全部由对应的文件来执行。例如,“ls”命令就是通过执行“/bin/ls”文件实 现的。
7.bg %1命令把后台的1号作业转为前台作业。
8.对于所有的LINUX进程,只要它运行在前台,都可以用<Ctrl-C>终止它。
9.创建新进程运行可执行文件“/tmp/a.out”,可以用execv(“/tmp/a.out”)。
10. Hard link虽然与symbolic link不同,但都可以实现跨文件系统的连接。
三、(20分)Linux文件系统管理中,引入了虚拟文件系统VFS。在VFS层,根据路径查找对应 inode时,往往调用path_init()和path_walk()。其中,用到了函数follow_dotdot(),如下所示。
(1) 请说明函数 follow_dotdot()的作用。
(2) 阅读 Linux 内核第 2.4.18 版的函数 follow_dotdot(),逐行解释其含义和作用。必要的数据结 构见如下描述。
static inline void follow_dotdot(struct nameidata *nd) {
while(1) {
struct vfsmount *parent; struct dentry *dentry;
read_lock(¤t->fs->lock);
if (nd->dentry == current->fs->root &&
nd->mnt == current->fs->rootmnt){
read_unlock(¤t->fs->lock); break;
}
read_unlock(¤t->fs->lock);
spin_lock(&dcache_lock);
if (nd->dentry != nd->mnt->mnt_root) { dentry = dget(nd->dentry->d_parent);
spin_unlock(&dcache_lock);
dput(nd->dentry);
nd->dentry = dentry;
break;
}
parent=nd->mnt->mnt_parent;
if (parent == nd->mnt) {
spin_unlock(&dcache_lock);
break;
}
mntget(parent);
dentry=dget(nd->mnt->mnt_mountpoint);
spin_unlock(&dcache_lock);
dput(nd->dentry);
nd->dentry = dentry;
mntput(nd->mnt);
nd->mnt = parent;
} }
struct nameidata {
struct dentry *dentry; struct vfsmount *mnt; struct qstr last;
unsigned int flags; int last_type;
};
struct vfsmount {
struct list_head mnt_hash;
struct vfsmount *mnt_parent; /* fs we are mounted on */
struct dentry *mnt_mountpoint;/* dentry of mountpoint */
struct dentry *mnt_root; /* root of the mounted tree */
struct super_block *mnt_sb; /* pointer to superblock */
struct list_head mnt_mounts; /* list of children, anchored here */
struct list_head mnt_child; /* and going through their mnt_child */
atomic_t mnt_count; int mnt_flags;
char *mnt_devname; /* Name of device e.g. /dev/dsk/hda1 */
struct list_head mnt_list;
};
struct dentry {
atomic_t d_count; unsigned int d_flags;
struct inode * d_inode; /* Where the name belongs to - NULL is negative */
struct dentry * d_parent; /* parent directory */
struct list_head d_hash; /* lookup hash list */
struct list_head d_lru; /* d_count = 0 LRU list */
struct list_head d_child; /* child of parent list */
struct list_head d_subdirs; /* our children */
struct list_head d_alias; /* inode alias list */
int d_mounted; struct qstr d_name;
unsigned long d_time; /* used by d_revalidate */
struct dentry_operations *d_op;
struct super_block * d_sb; /* The root of the dentry tree */
unsigned long d_vfs_flags;
void * d_fsdata; /* fs-specific data */
unsigned char d_iname[DNAME_INLINE_LEN]; /* small names */
};
struct fs_struct {
atomic_t count; rwlock_t lock; int umask;
struct dentry * root, * pwd, * altroot;
struct vfsmount * rootmnt, * pwdmnt, * altrootmnt;
};
四、编程序,显示系统的缺页中断次数(20分)
(1) 请叙述Linux的缺页中断调用机理。
(2) 请给出你的显示方案。