操作系统实验(复
习)
考试考什么?
• 常见的 shell 命令
• Linux 系统内核知识
• 三个实验中涉及到的知识
• 阅读内核代码的能力
常见 Linux 命令
• 目录类 : pwd 、 cd 、 ls 、 ln 、 . 、 .. 、 ~
• 权限类: chmod, chown
• 解压类: tar/gzip –c/x
• 搜索类: grep 、 find, find . -name "*.h" –print
• 设备类: mount 、 unmount
• 进程类: ps 、 top 、 kill
• 文件类: echo 、 cat 、 touch 、 mkdir
Linux 内核知识-基础
• 在大部分公司发行的 Linux 系统中,默认的 shell 是 : bash
• 哪个命令可以用来查看 Linux kernel 版本信息 : un ame
• 在创建 Linux 分区时,至少要创建的两个分区是 : Swap/root
• 哪一个只是在内核运行时存在的 : proc
• Linux 的内核受严格保护,与进程的用户态代码几
乎隔绝。若想从用户态进入内核态,可以通过 : i
nt 0x80
Linux 内核知识-系统相关
• Linux 2.6 内核相对于 2.4 内核来说很多方面得到了很 大的改进,请问下面的哪一个结构与内核堆栈放在 一起?
• A. thread_info B. files_struct C. mm_struct D. ta sk_struct
• Linux 操作的进程调度,没有采纳 算法的思想。
• A. SJF B. Round Robin C. priority D. FIFO
• Linux 内核源代码编译后,生成的 image 文件,其文
件名
• A. 必须是 bzImage B. 必须是 vmlinuz C .任意字符
串 D . 必须是 image
Linux 内核知识-系统相关
• Linux 设备的第一个扇区,也就是读取最前面的 ____ 个字节,叫做主引导扇区 MBR
• A. 1M B. 512K C. 512 D. 1024
• MBR 的最后两个字节是 ____ 和 ____
• A. 0x55,0xaa B. 0xFF, 0xFF C. 0x00,0x00, D. 0x80,0x80
• 一个硬盘最多只能有 __ 个一级分区,又叫 做 " 主分区 ”
• A. 1 B. 2 C. 3 D. 4
Linux 内核知识 —— 寄存器
• 在 Linux 的缺页中断响应程序中,引起缺页的虚 拟地址存放在哪个寄存器中 ?
• A. CR0 B. CR3 C. CR1 D. CR2
• 在 Linux 的进行 system call 处理时,系统调用号 存在那个寄存器中?
• A. EAX B. SS C. DS D. ES
• 内核可以快速的找到一个进程的 task_struct 地址
,可以将那个寄存器内容和 0xffffe000 进行与
• A. EAX B. ESP C. DS D. CS
Linux 内核知识 —— 寄存器
• Linux 内核中 CPU 执行的下一条代码地址存在那 个寄存器上
• A. EAX B. SS C. EIP D. ESP
Linux 内核知识 —— 进程管理
• 下面的哪一个结构可以被称为进程控制块 PCB (Process Con trol Block) 的最重要结构 ?
• A. struct mm_struct B. struct pcb C. struct thread_info D. struct t ask_struct
• 在 task_struct 结构中,下面的哪一个字段不是用来表示进 程的状态?
• A. volatile long state B. unsigned int flags C. int exit_state D. pi d_t exit_flags
• 在 task_struct 结构中,哪一个字段表示进程的静态优先级
• A. nice B. rt_priority C. priority D. counter
Linux 内核知识 —— 进程管理
• 如要遍历所有进程,?处应该填入
for (p = & ? ; (p = p->next_task) != & ? ; )
• A. current B. init_taskC. prev_task D. init
• 注意:
#include <stdio.h>
main( ) {
execl(“/bin/ls”,”ls”,”-l”,0);
printf(“Can only get here on error/n”);
}
Linux 内核知识 —— 进程管理
• 众多版本的 fork 函数,都会调用 do_fork 函数来 做实际的工作,其中不包括:
• A. 把父进程 task_struct 的值全部赋给子进程 task_st ruct
• B. 检查是否超过了资源限制
• C. 共享或复制父进程文件处理、信号处理及进程虚
拟地址空间等资源
• D. 初始化子进程的 counter 值为 0
Linux 内核知识 —— 内存管理
• 多个进程的 32 位 Linux 内核中,虚存的管理是 如何的?
• A. 内核占有 3-4G 空间,其他进程共享 1-3G
• B. 内核占有 3-4G 空间,其他每个进程独自占有 1-3 G
• C. 所有进程共享 1-4G 空间
• D. 用户空间进程可以访问 1-4G 全部虚存地址
Linux 内核知识 —— 内存管理
• Linux 的每个进程都有若干个 VMA ( vm_area_stru ct )结构,下面哪个不是正确描述 VMA 的 ?
• A .不能出现两个地址连续的 VMA 。
• B . VMA 结构中的 vm_ops 是指向 vm_operations_struc t 结构体的指针,该结构体中包含着指向各种操作的函 数的指针。
• C . VMA 是虚存空间中一个连续的区域,在这个区域 中的信息具有相同的操作和访问特性
• D .一个进程的 VMA 互不重叠, Linux 内核为每个进 程维护了一棵红黑树 (Red Black Tree) ,以保证搜索速 度
Linux 内核知识 —— 内存管理
• Linux 能够在几乎所有类型的 CPU 上面运行。在 I NTEL 386 架构上运行时 ____ 。
• A .它利用其 MMU 的 paging 机制;它不用其 segme ntation 机制,只是不得不做了 规定动作 “ ”
• B .它利用其 MMU 的 paging 机制,也利用其 segme ntation 机制
• C .它不用其 MMU 的 paging 机制;它不用其 segme ntation 机制,只是不得不做了 规定动作 “ ”
• D .它不用其 MMU 的 paging 机制,但利用其 segme
ntation 机制
Linux 内核知识 —— 内存管理
• Linux 进程的页表,由页目录表依次索引。而普 通进程(注意,不是内核线程)的页目录表则由 进程 PCB 的 取得。
• A. pgd 指针 B. mm 指针 C. active_mm 指
针 D. CR3
• Linux 内存管理子系统采用基于内存区域 算法来管理物理页帧的分配和回收。
• A .伙伴( Buddy ) B . Slab 分配器 C . LR
U D. 位示图
Linux 内核知识 —— 内存管理
• Linux 使用 slab 分配器的主要目的?
• A .为申请不足一页帧的小对象(缓冲)申请与释放
物理内存,以减少碎片。
• B. 为了更加快速申请与释放物理内存。
• C .为申请多个连续的物理页帧而设置。
• D. 用伙伴( buddy )系统申请和释放内存需要花费
很多时间。
Linux 内核知识 —— 内存管理
• Linux 将内存分为若干的区域,其中只有 Normal _Zone 可以直接访问,它占内存的位置为:
• A. 0-1G
• B. 16MB-1G
• C. 16MB-896MB
• D. 0-896MB
Linux 内核知识 —— 文件管理
• 文件对象 file 表示进程已打开的文件,只有当文 件被打开时才在内存中建立 file 对象的内容。该 对象由 open() 系统调用创建,由 close() 系统调用 销毁。文件 file 被进程 P1 打开 2 次,进程 P2 打 开 1 次,请问在内存中有几个 file 对象?
• A. 1 B. 2 C. 3 D. 不确定
• 下面的哪一个结构被称为内存 FCB (File Control Blo ck)?
• A. struct dentry B. struct pcb C. struct file D. struct i
node;
Linux 内核知识 —— 文件管理
• ext2/ext3 文件系统的实现机理,采用的是 _____
。
• A . contiguous allocation B . linked allocation
• C . indexed allocation D .一种 B 和 C 的组合
• 用 ln 命令生成了一个符号链接 new ,指向文件 old 。如果你将文件 old 删除了,是否还能够通 过 new 访问文件 old 中的数据?
• A .仍然可以访问 B .不可能再 访问到
• C .能否访问取决于 new 的所有者 D .能
否访问取决于 new 的权限
Linux 内核知识 —— 文件管理
• 下面的哪一个结构是描述 VFS 的一个目录项 ?
• A. struct inode B. struct file C. struct dentry D. struct dir_entry
• 当某个文件执行第一次打开操作时,读入内存的 是哪一项的?
• A. 引导记录 B. 超级块( superblock ) C. 文件
的 inode 信息 D. 文件数据
Linux 内核知识 —— 文件管理
• 文件对象 file1 , file2 表示进程已打开的文件,
假设 file2 其时是 file1 的一个链接文件。那么文 件 file1 被进程 P1 打开 2 次,文件 2 被进程 P2 打开 1 次,请问在内存中有几个 dentry 和几个 i node 对象?
• A. 1, 1
• B. 2, 1
• C. 3, 1
• D. 3, 2
Linux 内核知识 —— 文件管理
• 调用 open 打开一个文件后,系统会返回一个文 件描述符,该描述符说法错误的是:
• A. files_struct 里面的打开文件数组 fd 下标
• B. 同一个文件打开多次有同样的描述符
• C. 描述符是按照顺序递增
• D. 一个进程最多打开 256 个文件
Linux 内核知识 —— 文件管理
• 字符设备文件和块设备文件。 Linux 把对设备的 I/O 作为对文件 的读取 / 写入操作内核提供了对设备处理和对文件处理的统一接 口。
• fd0 (for floppy drive 0)
• hda (for harddisk a)
• lp0 ( for line printer 0)
• tty(for teletype terminal)
• 管道 (PIPE) 文件:用于在进程间传递数据。 Linux 对管道的操 作与文件操作相同,它把管道做为文件进行处理。
• 链接文件:又称符号链接文件,它提供了共享文件的一种方法
。
• socket 文件
Linux 内核知识 —— misc
• Makefile
TARGET = helloworld
KDIR = /lib/modules/$(shell uname -r)/build PWD = $(shell pwd)
obj-m += $(TARGET).o default:
make -C $(KDIR) M=$(PWD) modules
Linux 内核知识 —— misc
• 安装/卸载内核模块
• insmod 命令加载模块
# insmod helloworld.ko Hello World!
• 使用 lsmod 命令查看 模块
# lsmod
Module Size Used by helloworld 464 0 (unused)
…
• rmmod 命令卸载模块
# rmmod helloworld
Goodbye!
Linux 内核知识 —— misc
• /sbin/init
• init 进程首先读取文件 /etc/inittab ,它是运行级别的 设置文件
/etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d
$ ls -l /etc/rc2.d
README
S01motd -> ../init.d/motd S13rpcbind -> ../init.d/rpcbind
S14nfs-common -> ../init.d/nfs-common
S16binfmt-support -> ../init.d/binfmt-support S16rsyslog -> ../init.d/rsyslog
S16sudo -> ../init.d/sudo
S17apache2 -> ../init.d/apache2 S18acpid -> ../init.d/acpid
Linux 内核知识 —— misc
• System call
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
type name(type1 arg1,type2 arg2,type3 arg3) \
参数 参数在堆栈的位置 传递参数的寄存器
arg1 00(%esp) ebx
arg2 04(%esp) ecx
arg3 08(%esp) edx
arg4 0c(%esp) esi
arg5 10(%esp) edi
Linux 内核知识 —— misc
• Linux 2.6 的进程设置 140 个优先级。实时进程优先级为 0-99 ,普通 进程优先级 100-139 的数。 0 为最高优先权, 139 为最低优先权。
• 优先级分为静态优先级和动态优先级
• 调度程序根据动态优先级来选择新进程运行
• static_prio 静态优先级
• 与 2.4 版本中的 nice 值意义相同,但取值区间不同,是用户可影响的优先级
• 通过 set_user_nice() 来改变
• static_prio= MAX_RT_PRIO + nice + 20
• MAX_RT_PRIO 定义为 100
• prio 动态优先级
• 普通进程: prio = max (100, min ( static priority - bonus + 5, 139))
• 实时进程计算更加复杂
Linux 内核知识 —— misc
• 调度队列
struct prio_array{
unsigned int nr_active; /* 本进程组中的进程数 */
unsigned long bitmap[BITMAP_SIZE];/* 加速 HASH 表访问 的位图快速定位第一个非空的就绪进程链表 */
struct list_head queue[MAX_PRIO];/* 以优先级为索引的 HA SH 表 */
}
Linux 内核知识 —— misc
• 3 种用户和 3 种访问权限 :
• 用 ls -l 或 ls -ld 命令显示文件的访问权限:
-rwxr--r-- 1 sarwar faculty 163 may 05 23:13 temp
文件类型 访问 权限
链接计数 所有者 文件 日期 时间 文件名 所在组 大小
三个实验中用到的知识
• 一个设备名为 /dev/sdb 的 usb 盘, U 盘的文件 系统为 FAT32 ,安装到 Linux 系统的 /mnt/usb 目 录下的命令是?
• A . mount –t vfat /dev/sdb /mnt/usb
• B . mount –t fat32 /dev/sdb /mnt/usb
• C . mount –t vfat /mnt/usb
• D . mount –t fat32 /mnt/usb
三个实验中用到的知识
• 试图新增一个系统调用,但是修改内核代码遇到 了错误。为了找出 bug ,可以
• A. 用 printf(“whatever I like to check\n”); 然后从终端 查看输出结果
• B. 用 printf(“whatever I like to check\n”); 然后从 /var/l og/messages 查看输出结果
• C. 用 printk(“whatever I like to check\n”); 然后从终端 查看输出结果
• D. 用 printk(“whatever I like to check\n”); 然后从 /var/
log/messages 查看输出结果
三个实验中用到的知识
• 编译内核,在输入命令 make install 后 , 启动的 映像文件存在哪个目录中 。
• A. arch/i386/boot B. arch/i386/image
• C. boot/grub D. /boot
• 下面哪一个是编译内核时的内核配置文件名?
• A. .config B. .configure
• C. makefile D. Makefile
三个实验中用到的知识
• 实验中既用到 printk() ,又用到 printf() 。如下阐 述,哪个最准确?
• A. printf() 在进程用户态使用, printk() 在进程内核态 使用
• B. printf() 将输出结果显示在 terminal , printk() 将结 果输出至 kernel ring buffer
• C. A 和 B 都正确
• D. A 和 B 都不正确
三个实验中用到的知识
• 在添加一个文件系统实验中,使用如下命令进行 测试(开始的数字为行号),假设使用 mount 命令有足够的权限,请回答下面两个问题:
1. dd if=/dev/zero of=myfs bs=2M count=1 2. /sbin/mkfs.ext2 myfs
3. ./changeMN myfs
4. mount –t myext2 –o loop ./fs.new /mnt 5. mount
6. umount /mnt
7. mount –t ext2 –o loop ./fs.new /mnt
三个实验中用到的知识
• 第 1) 行命令的功能是 。
• A. 创建一个新的文件 myfs
• B. 把大小为 2M 字节的文件 /dev/zero 复制到 myfs
• C. 创建大小为 1M 字节的,名字为 myfs 的,内容全 为 0 的文件
• D. 创建大小为 2M 字节的,名字为 myfs 的,内容全
为 0 的文件
三个实验中用到的知识
• 第 2) 行命令的功能 _____ 。
• A .创建一个新的文件 myfs
• B .把 myfs 格式化成 ext2 文件系统
• C .把 myfs 格式化成 myext2 文件系统
• D .在硬盘上建立一个卷号为 myfs 的 ext2 分区
• 哪一行命令会产生错误信息 ?
• A. 第 4) 行 B. 第 5) 行
• C. 第 6) D. Line 7)
阅读内核代码的能力
define nr_syscalls ((syscall_table_size)/4) /* LINE A */
#include “syscall_table.S”
syscall_table_size = (.-sys_call_table)
而源文件 arch/i386/kernel/syscall_table.S” 的所有程序行为:“ ENTRY(sys_call_table)
.long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */
.long sys_exit .long sys_fork
…………
.long sys_ppoll
.long sys_unshare /* 310 */ /* 文件 syscall_table.S最后一行 */