第1篇 Linux系统的安装和使用第1章 Linux系统的安装和启动 3
1.1 Linux的安装 3
1.1.1 安装前的准备工作 3
1.1.2 创建虚拟机 3
1.1.3 安装Linux 4
1.2 系统启动和用户管理 6
1.2.1 系统的启动 6
1.2.2 系统的关闭 7
1.2.3 用户管理 8
1.3 用户界面 10
1.3.1 字符虚拟终端 10
1.3.2 图形用户界面 12
1.4 获取系统帮助信息 13
1.4.1 man命令 13
1.4.2 info命令 14
1.4.3 apropos命令 15
第2章 编译Linux内核 16
2.1 Linux内核及gcc、gnumake版本 16
2.2 准备内核源代码 17
2.3 配置内核编译选项 18
2.4 编译内核和模块 19
2.5 修改启动设置 19
第3章 UNIX/Linux文件系统的shell命令 22
3.1 文件系统的安装和卸载 22
3.2 了解Linux文件系统的目录结构和文件属性 25
3.3 shell中的特殊字符 27
3.4 目录操作 28
3.4.1 创建目录和删除目录 28
3.4.2 列出某个目录下的内容 29
3.4.3 改变工作目录和确定当前所在的目录位置 29
3.4.4 显示特定目录的大小 29
3.4.5 复制目录和文件 30
3.4.6 目录和文件的改名和移动 30
3.4.7 改变文件或目录的存取权 31
3.4.8 改变文件的所有者和同组用户 32
3.5 文件管理 32
3.5.1 连接和显示文件内容 32
3.5.2 统计文件中包含的行、字和字符数 34
3.5.3 分类命令 34
3.5.4 建立链接的命令 34
3.5.5 在文件中寻找正文模式 35
3.5.6 查找指定的文件 36
3.5.7 查找文件的路径命令 37
3.6 输入输出重定向和管道操作命令 37
3.6.1 输入输出的重定向 37
3.6.2 管道操作命令 38
3.7 文件压缩命令 40
3.8 与进程有关的命令 40
3.9 网络命令 41
3.9.1 向特定主机发送ICMP包的命令 41
3.9.2 与其他主机建立连接的命令 41
3.9.3 远程文件传输命令 42
3.9.4 邮件命令 42
3.10 编译和运行程序命令 43
3.11 其他常用命令 45
3.11.1 清屏命令 45
3.11.2 Linux环境下支持的DOS软盘命令 45
第4章 shell的程序设计 46
4.1 了解Linux系统的shell 46
4.2 运行shell程序的方法 46
4.3 shell程序使用的环境变量和相关命令 48
4.3.1 变量的定义命令 48
4.3.2 用户定义的常用环境变量 49
4.3.3 输出环境变量命令export 50
4.3.4 位置参数 51
4.3.5 shell预定义变量 51
4.4 shell语言的控制结构 53
4.4.1 测试条件表达式命令 53
4.4.2 循环语句 56
4.4.3 case命令 57
4.4.4 无条件控制语句break和continue 57
4.5 一个典型的.profile文件 58
第5章 屏幕编辑程序vi 60
5.1 进入和退出vi 60
5.2 在屏幕上设置光标 61
5.3 在文件中设置光标 62
5.4 编辑文本文件 63
5.4.1 修改文本文件命令 63
5.4.2 检索、移动和复制文本文件 64
第2篇 操作系统模拟算法第6章 处理机管理 69
6.1 实验目的和要求 69
6.2 实验内容 69
6.2.1 设计一个按先来先服务的调度算法实现处理机调度 69
6.2.2 设计一个按时间片轮转法实现处理机调度的程序 70
6.2.3 设计一个按优先级调度的算法实现处理机调度 70
6.3 按时间片轮转法进行CPU调度的程序示例 71
第7章 死锁的避免 76
7.1 实验目的和要求 76
7.2 用银行家算法和随机算法实现资源分配 76
7.3 资源分配算法的示例 80
第8章 主存空间的分配与回收 91
8.1 实验目的和要求 91
8.2 可变式分区管理的主存的分配与回收 91
8.2.1 采用首次适应算法管理内存 91
8.2.2 采用最佳适应算法实现内存的分配与回收 97
8.3 分页管理的主存分配与回收 97
8.3.1 使用位示图管理主存空间 97
8.3.2 采用主存分块表管理主存 98
8.4 Linux系统内存的分配与回收 99
8.5 程序示例 100
8.5.1 可变分区管理示例 100
8.5.2 页式管理示例 104
8.6 实验题目 113
第9章 虚拟存储器管理 114
9.1 实验目的和要求 114
9.2 实验内容 114
9.2.1 模拟请求分页存储管理中的硬件地址变换的过程 114
9.2.2 采用先进先出(或LRU)算法实现分页管理的缺页调度 116
第10章 磁盘存储空间的管理 118
10.1 实验目的和要求 118
10.2 实验内容 118
10.2.1 用位示图管理磁盘空间实现磁盘块的分配与回收 118
10.2.2 采用空白文件目录管理磁盘空间 119
10.2.3 模拟UNIX系统V的空闲块成组链接法实现磁盘存储空间的管理 120
10.3 实验题目 123
第11章 文件系统 124
11.1 实验目的和要求 124
11.2 实验内容 124
11.2.1 采用二级目录结构实现对磁盘文件管理 124
11.2.2 模拟设计MS-DOS操作系统中磁盘文件的存储结构 131
11.2.3 模拟设计便于直接存取的索引文件结构的操作 134
11.3 索引文件的示例 135
第12章 SPOOLING假脱机输入输出技术模拟实验 140
12.1 实验目的和要求 140
12.2 SPOOLING假脱机输出的程序模拟 140
12.3 SPOOLING的模拟程序示例 144
第3篇 UNIX和Linux系统调用编程第13章 进程和线程控制 153
13.1 实验目的和要求 153
13.2 进程控制的API 153
13.2.1 进程的创建和终止函数 153
13.2.2 给进程指定一个新的运行程序的函数exec() 158
13.2.3 父进程等待子进程终止 160
13.3 UNIX和Linux多线程控制的API 162
13.3.1 线程控制接口的API 162
13.3.2 多线程同步 166
13.3.3 线程同步的综合示例 170
第14章 进程之间的通信 177
14.1 实验目的和要求 177
14.2 进程之间管道通信机制 177
14.2.1 无名管道通信 178
14.2.2 有名管道的通信 181
14.3 IPC通信 184
14.3.1 IPC资源及其数据结构 184
14.3.2 信号量机制 185
14.3.3 消息缓冲机制 191
14.3.4 共享内存区机制 198
第15章 文件系统的操作命令 202
15.1 实验目的和要求 202
15.2 文件系统的API 202
15.2.1 UNIX和Linux支持的文件类型 202
15.2.2 顺序文件的系统调用 205
15.2.3 文件的随机存取 211
15.3 目录操作的系统调用 212
第4篇 Windows 2000/XP的系统调用编程第16章 Windows应用程序基础和进程控制 219
16.1 实验目的和要求 219
16.2 应用程序基础 219
16.3 进程控制 222
16.3.1 进程控制相关的API 222
16.3.2 进程对象相关的函数 227
16.3.3 运行进程 233
16.3.4 进程终止和进程同步等待 238
第17章 Windows线程控制与同步 244
17.1 实验目的和要求 244
17.2 线程控制 244
17.2.1 线程的创建与终止相关的API 245
17.2.2 线程的恢复与挂起 249
17.2.3 线程的调度优先级 252
17.3 线程同步 256
17.3.1 事件 256
17.3.2 互斥体和临界区 261
17.3.3 信号量 269
17.4 综合举例 273
第18章 Windows存储器管理 284
18.1 实验目的和要求 284
18.2 虚拟内存机制 284
18.2.1 Windows系统机制 284
18.2.2 虚拟内存处理的API 287
18.3 程序示例 291
第19章 Windows文件系统 298
19.1 实验目的和要求 298
19.2 文件的输入输出 298
19.2.1 与文件相关的API 298
19.2.2 异步读写文件 306
19.2.3 创建临时文件 309
19.3 目录操作 312
19.4 文件映射对象 318
19.5 邮件槽和命名管道的数据通信 324
19.5.1 邮件槽和命名管道通信的基本概念 324
19.5.2 利用邮件槽实现数据通信 326
19.5.3 采用命名管道实现数据通信 332
参考文献 338