操作系统实验指导书_第1页
操作系统实验指导书_第2页
操作系统实验指导书_第3页
操作系统实验指导书_第4页
操作系统实验指导书_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 实验前准备工作 实验前准备工作 Linux 的安装的安装 一一 实验目的实验目的 1 掌握 Red Hat Linux 操作系统的安装步骤 2 掌握启动 关闭操作系统的方法 二 实验准备二 实验准备 Red Hat Linux 操作系统既可以单独安装在一个计算机系统中 也可以与其它操作系统 如 windows 操作系统一起安装在一个计算机系统中 但注意在安装时要先装 windows 操作 系统 再装 Linux 或者利用主机的资源 如 CPU 内存 硬盘 模拟出的一台新计算机 然后在虚拟机中安装 windows Linux 等系统 使用虚拟机对主机的要求比较高 建议内存 512MB 以上 1 硬盘分区 理解硬盘 分区的名称 IDE 硬盘名称 dev hda dev hdb SCSI 硬盘名称 dev sda dev sdb 分区名称 dev hda1 dev hda2 一个硬盘最多分 4 个主分区和扩展分区 扩展分区最多只能建 1 个 扩展分区不能直 接放数据 还必须建立逻辑分区才能使用 安装 Red Hat Linux 至少需要两个硬盘分区 一个或多个 Linux native 类型的分区 一 个 Linux swap 类型的分区 即使将 Linux 安装在一个专门的硬盘上 或者一台不安装其他 操作系统的计算机上 仍然需要为其创建分区 在安装过程中 会提示用户为 Red Hat Linux 创建分区 必须保证有足够的硬盘空间来创建分区 推荐以下分区配置 1 一个根分区 2 一个交换分区 3 一个 usr 分区 4 一个 home 分区 2 安装类型 Red Hat Linux 提供了三种类型的安装 1 客户机类型安装 workstation 2 服务器类型安装 server system 3 自定义类型的安装 custom system 三 实验内容三 实验内容 请在虚拟机中安装 Linux 1 安装虚拟机软件 常用的虚拟机软件有 Vmware 和 VPC 如果主机性能较好 还能同时虚拟出多台虚拟 机 一台虚拟机对应主机上的一个目录 删除该目录就删除了虚拟机 该目录拷到其它电 2 脑上可直接使用 使用虚拟机的步骤 1 安装 Vmware 软件 2 在 Vmware 中新建虚拟机 确定虚拟机的配置 内存大小 硬盘类型 IDE 创建一个新进程 fork 返回值意义如下 0 在子进程中 pid 变量保存的 fork 返回值 为 0 表示当前进程是子进程 0 在父进程中 pid 变量保存的 fork 返回值 为子进程的 id 值 进程唯一标识符 1 创建失败 execl int execl 新程序名 0 重新加载进程 用新程序替换原进程 如 execl bin ls 0 用 bin ls 替换原进程 wait int wait int status 例 wait 等待子进程运行结束 如果子进程没有完成 父 进程一直等待 wait 将调用进程挂起 直至其 子进程因暂停或终止而发来软中断信号为止 如 果在 wait 前已有子进程暂停或终止 则调用进 程做适当处理后便返回 exit void exit int status 终止进程的执行 9 1 进入 Linux 的字符界面 输入 vi 进入 vi 例 vi hello c 2 利用实验指导中的相关内容完成在屏幕上显示 Hello world 的 C 语言源程序 hello c 的创建 保存上述程序 并退出 vi 3 用 gcc 编译上述 C 程序 并运行之 编译 gcc o hello hello c 运行 hello 4 进程控制之一 1 先在 vi 窗口中编写下列程序 使用系统调用 fork 创建两个子进程 当此程序运行时 在系统中有一个父进程和两 个子进程活动 让每一个进程在屏幕上显示一个字符 父进程显示 a 子进程分别显示字 符 b 和字符 c 2 保存上述程序 并退出 vi 3 编译并多次运行上述程序 分析运行结果 参考程序 include main int p1 p2 while p1 fork 1 创建子进程 p1 if p1 0 putchar b exit 0 else while p2 fork 1 创建子进程 p2 if p2 0 putchar c exit 0 else putchar a exit 0 10 5 进程控制之二 分析下列程序的运行结果 getpid 函数为取当前进程号 include main int p1 p2 printf pid d getpid while p1 fork 1 创建子进程 p1 if p1 0 putchar b else putchar c printf pid d getpid 6 进程控制之三 选做 创建一个子进程 并给它加载新程序 hello hello 即上述显示 Hello world 程序 提示 创建程序 parent c 在该程序中创建子进程 在子进程分支中用 execl 加载 hello 四 实验报告四 实验报告 1 需给出实验课题 目的与主要内容要求 2 实际进行的实验详细记录实验详细记录 完整的命令串或程序 执行结果 结果分析 11 实验实验 3 进程通信进程通信 一 实验目的一 实验目的 了解和熟悉 Linux 支持的消息队列通信机制 管道通信机制 二 实验内容二 实验内容 1 进程的管道通信 编写程序实现进程的管道通信 使用系统调用 pipe 建立一管道 二个子进程 P1 和 P2 分别向管道各写一句话 Child 1 is sending a message Child 2 is sending a message 父进程从管道中读出二个来自子进程的信息并显示 要求先接收 P1 再接收 P2 2 消息的创建 发送和接收 使用系统调用 msgget msgsnd msgrev 及 msgctl 编制一消息长度为 k 的消息发 送和接收的程序 三 实验指导三 实验指导 1 所涉及的系统调用所涉及的系统调用 1 pipe 建立一无名管道 格式 int pipe filedes 参数定义 int filedes 2 其中 filedes 1 是写入端 filedes 0 是读出端 使用头文件 include inlcude include 2 read 格式 int read fd buf nbyte 功能 从 fd 所指示的文件中读出 nbyte 个字节的数据 并将它们送至由指针 buf 所指 示的缓冲区中 如该文件被加锁 等待 直到锁打开为止 参数定义 int fd 文件指针 char buf 接收数据缓冲区 unsigned nbyte 读取数字数 3 write 格式 write fd buf nbyte 功能 把 nbyte 个字节的数据 从 buf 所指向的缓冲区写到由 fd 所指向的文件中 如 文件加锁 暂停写入 直至开锁 参数定义同 read 4 msgget 创建一个消息 获得一个消息的描述符 格式 msgqid msgget key flag 使用头文件 include include include 12 参数定义 key t key int flag 其中 key 是用户指定的消息队列的名字 flag 是用户设置的标志和访问方式 如 IPC CREAT 0400 是否该队列已被创建 无则创建 是则打开 IPC EXCL 0400 是否该队列的创建应是互斥的 msgqid 是该系统调用返回的描述符 失败则返回 1 5 msgsnd 发送一消息 向指定的消息队列发送一个消息 并将该消息链接到该消息队列的尾部 格式 msgsnd msgqid msgp size flag 使用头文件同 msgget 参数定义 int msgqid size flag struct msgbuf msgp 其中 msgqid 是返回消息队列的描述符 msgp 是指向用户消息缓冲区的一个结构体指 针 缓冲区中包括消息类型和消息正文 即 long mtype 消息类型 char mtext 消息的文本 6 msgrcv 接受一消息 从指定的消息队列中接收指定类型的消息 格式 msgrcv msgqid msgp size type flag 使用头文件同 msgget 参数定义 int msgqid size flag struct msgbuf msgp long type 7 msgctl 消息队列的操纵 读取消息队列的状态信息并进行修改 如查询消息队列描述符 修 改它的许可权及删除该队列等 系统调用格式 msgctl msgqid cmd buf 使用头文件同 msgget 参数定义 int msgqid cmd struct msgqid ds buf 其中 函数调用成功时返回 0 不成功则返回 1 buf 是用户缓冲区地址 供用户存放 控制参数和查询结果 2 参考程序参考程序 1 include include include int pid1 pid2 main int fd 2 char outpipe 100 inpipe 100 13 pipe fd 创建一个管道 while pid1 fork 1 if pid1 0 lockf fd 1 1 0 sprintf outpipe child 1 process is sending message 把串放入数组 outpipe 中 write fd 1 outpipe 50 向管道写长为 50 字节的串 sleep 5 自我阻塞 5 秒 lockf fd 1 0 0 exit 0 else while pid2 fork 1 if pid2 0 lockf fd 1 1 0 互斥 sprintf outpipe child 2 process is sending message write fd 1 outpipe 50 sleep 5 lockf fd 1 0 0 exit 0 else wait 0 同步 read fd 0 inpipe 50 从管道中读长为 50 字节的串 printf s n inpipe wait 0 read fd 0 inpipe 50 printf s n inpipe exit 0 运行结果 延迟 5 秒后显示 child 1 process is sending message 再延迟 5 秒显示 child 2 process is sending message 2 1 client c include include include define MSGKEY 75 struct msgform long mtype 14 char mtext 1000 msg int msgqid void client int i msgqid msgget MSGKEY IPC CREAT 0660 打开 75 消息队列 for i 10 i 1 i msg mtype i printf client sent n msgsnd msgqid 发送消息 exit 0 main client 2 server c include include include define MSGKEY 75 struct msgform long mtype char mtext 1000 msg int msgqid void server msgqid msgget MSGKEY IPC CREAT 0600 创建 75 消息队列 do msgrcv msgqid 接收消息 printf server received n while msg mtype 1 msgctl msgqid IPC RMID 0 删除消息队列 归还资源 exit 0 main server 15 实验实验 4 内存管理内存管理 一 实验目的一 实验目的 请求页式存储管理中常用页面置换算法模拟 理会操作系统对内存的调度管理 二 实验内容二 实验内容 假设有一程序某次运行访问的页面依次是 0 1 2 4 3 4 5 1 2 5 1 2 3 4 5 6 试计算当内 存为 4 20 页时 下列不同页面调度算法的命中率 先进先出算法 FIFO 最近最少使用算法 LRU 最佳淘汰算法 OPT 先淘汰最不常用的页地址 选做 最少访问页面算法 LFU 选作 命中率的算法为 命中率 1 缺页中断次数 总页数 三三 实验报告要求实验报告要求 1 实验报告中要有程序特别是算法的详细流程图 2 实验报告中要有程序清单及执行的结果 3 对不同算法的性能进行评价 16 实验实验 5 文件系统管理之一 文件系统管理之一 Linux 文件管理文件管理 1 实验目的 实验目的 1 掌握 Linux 提供的文件系统调用的使用方法 2 熟悉文件和目录操作的系统调用用户接口 3 了解操作系统文件系统的工作原理和工作方式 2 实验内容 实验内容 1 利用 Linux 有关系统调用函数编写一个文件工具 filetools 要求具有下列功能 0 退出 1 创建新文件 2 写文件 3 读文件 4 复制文件 5 修改文件权限 6 查看文件权限 7 创建子目录 8 删除子目录 9 改变当前目录到指定目录 10 链接操作 3 实验指导实验指导 1 有关系统调用 FILE fopen const char filename int flags 打开或创建文件打开或创建文件 flags 参数取值 O RDONLY 只读方式 O WRONLY 只写方式 O RDWR 读写 方式 还可以用或运算对下列标志进行组合 O CREAT 如果文件不存在则创建 存在则不再创建 O TRUNC 如果文件已存在 则清除文件原有内容 O EXECL 如果文件已存在 又设置了 O CREAT 则强制 open 失败 O APPEND 每次写入时从文件尾部开始 例 创建一个可读可写的文件 file1 可用 fd open file1 O CREAT O RDWR int fclose int fd 关闭文件关闭文件 size t fwrite const void buffer size t size size t count FILE stream 写文件写文件 size t fread void buffer size t size size t count FILE stream 读文件读文件 int fseek FILE stream long offset int origin 文件读写指针定位文件读写指针定位 int chmod char pathname mode t mode 更改文件权限更改文件权限 mode 参数取值 参数取值 文件主同组其他用户 S IRWXU 读 写 执 行 S IRUSR 读 S IWUSR 写 S IXUSR 执行 S IRWXG 读 写 执行 S IRGRP 读 S IWGRP 写 S IXGRP 执行 S IRWXO 读 写 执 行 S IROTH 读 S IWOTH 写 S IXOTH 执行 17 int mkdir const char path mode t mode mode 是子目录的权限是子目录的权限 int rmdir const char path int chdir const char path int link const char pathname1 const char pathname2 创建一个指向已经存在且可共享的文件的共享指针 创建时 将其所在的子目录下创 建一个目录项 其 i 结点号复制被共享文件 pathname1 的 i 结点号 并将 pathname1 的 磁盘 i 结点计数加 1 int unlink const char pathname 取消指定的目录连接取消指定的目录连接 有关头文件 include include include include include include include include 2 部分参考程序 设置文件权限 int chmd int c mode t mode S IWUSR printf 0 0700 n 1 0400 n 2 0200 n 3 0100 n 还可以增加其它权限 printf Please input your choice 0 3 scanf d switch c case 0 chmod file1 S IRWXU break case 1 chmod file1 S IRUSR break case 2 chmod file1 S IWUSR break case 3 chmod file1 S IXUSR break default printf You have a wrong choice n return 0 查看文件权限 int dispmode char path bin ls char argv 4 ls l file1 NULL execv path argv 执行 ls l file1 18 实验实验 5 文件系统管理之二 文件系统管理之二 Windows 文件管理文件管理 1 实验目的实验目的 通过分析磁盘映像文件 了解 FAT 文件系统中文件的物理结构 文件组织 文件查找 文件的读写操作 感性认识 FAT 格式文件的管理 2 实验预备知识实验预备知识 FAT 文件格式的物理组织结构 3 实验要求实验要求 事先预习 自行查阅实验预备知识 4 实验内容 以下实验可二选一 实验内容 以下实验可二选一 1 构建一个大小为 32M 的 FAT16 磁盘格式文件存储系统 提示 新建一数据文件 fat16 dat 把该文件看作磁盘 将 FAT 磁盘文件的物理结构数据 写入 fat16 dat FAT 磁盘数据分析 1 扇区大小选 512 字节 32M 由包含 65536 个扇区 2 0 扇区为引导扇区 只将下列数据填写到相应位置 其余清 0 偏移偏移长度长度数据数据 0 x003跳转标志 EB 3C 90 0 x038厂商标识和 DOS 版本号 如 MSDOS1 0 0 x0B2每扇区字节数 此处 512 0 x0D1FAT 簇的大小可选取 2 个扇区 0 x0E2保留扇区为 0 x101FAT 表的个数为 2 0 x112根目录项数为 512 0 x162每个 FAT 表所占扇区为 128 个 128 需要程序中计算得来 0 x204扇区总数为 65536 3 1 128 扇区为 FAT 表 前两项分别为 0 xFFF8 0 xFFFF 其余清 0 4 129 256 扇区为备份 FAT 5 257 288 扇区为根目录区 初始全清 0 6 289 65535 扇区为数据区 全清 用 C 语言的文件操作命令将上面分析的数据写入 fat16 dat 2 网上下载 winhex 工具 在 winhex 中打开一个 U 盘或硬盘 分析该盘上的数据 即找出该盘上的文件和目录 并将它们与在资源管理器中看到的文件和目录进行对比 5 实验报告实验报告 1 必须给出实验课题 目的与主要内容要求 2 实际进行的实验详细记录及分析与结论 实验总结 19 实验实验 6 Linux 字符设备驱动字符设备驱动 1 实验目的 1 了解 Linux 设备驱动程序的编写 编译和装载 卸载方法 2 了解设备文件的创建 3 了解如何编写测试程序测试自己的驱动程序能否正常工作 2 实验内容 1 设计两个终端设备文件实现一个字符设备驱动程序 使一对进程之间利用该字 符设备驱动程序能互相传递可变长度的信息 要求 使用终端文件的基本操作 如 init open release read write ioctl 2 以可加载的模块方式编译 1 的驱动程序 并编写测试程序测试之 3 实验指导 1 Linux 设备驱动程序与外界的接口 驱动程序与操作系统内核的接口通过 file operations 数据结构完成 驱动程序与系统引导的接口利用驱动程序对设备进行初始化 驱动程序与设备的接口描述驱动程序如何与设备进行交互 根据驱动程序的功能 设备驱动程序代码可以分为 5 个部分 驱动程序的注册与 注销 设备的打开与释放 设备的读写操作 设备的控制操作 设备的中断与轮 询处理 2 设备驱动程序的注册与注销 注册函数 register chrdev driver major driver name driver major 主设备号 driver name 设备名或描述 driver fops 设备文件操作 file operations 指针 注销函数 unregister chrdev driver major driver name 3 编写 file operations 数据结构中有关函数 struct file operations dynchar fops seek read write readdir poll ioctl mmap open flush release fsync fasync check media change revalidate lock 20 4 编译设备驱动模块 gcc O2 D KERNEL DMODULE I usr src linux 2 4 include c driver c 其中 O2 指明对程序进行优化编译 连接 D KERNEL 表示将程序编译为内核代码而不是普通用户代码 DMODULE 表示把文件作为模块而不是普通可执行文件来编译 编译成功后将在同一目录下生成可加载的目标代码文件 driver o 5 设备驱动模块的加载 insmod driver o 加载后可以用 lsmod 命令查看是否加载成功 再用 vi proc devices 命令获取实际主设备号 6 创建字符设备文件 driver mknod dev driver c 主设备号 次设备号 创建成功后 通过 ls 命令可以查询到 dev 下的 driver 文件 7 编写 driver 的测试程序 按文件进行使用 先用 open 函数打开 再用 read write 函 数进行读写 8 参考程序 chardev c ifndef KERNEL define KERNEL endif ifndef MODULE define MODULE endif define WE REALLY WANT TO USE A BROKEN INTERFACE define NO VERSION include include char kernel version UTS RELEASE include include include include include include include include include include 21 include include include chardev h define DEVICE NAME dynchar static int usage new msg control flags static char data open the device static int dynchar open struct inode inode struct file filp MOD INC USE COUNT printk This chrdev is in open n return 0 close the device static int dynchar release struct inode inode struct file filp MOD DEC USE COUNT printk This chrdev is in release n return 0 write to device transfer from user space to kernel space static ssize t dynchar write struct file filp const char buf size t count loff t offset if count 0 return EINVAL if usage new msg return EBUSY usage 1 kfree data data kmalloc sizeof char count 1 GFP KERNEL if data return ENOMEM copy from user data buf count 1 start transfering usage 0 new msg 1 return count read from device transfer from kernel space to user space static ssize t dynchar read struct file filp char buf size t count loff t offset int length 22 if count 0 return EINVAL if usage return EBUSY usage 1 if data NULL return 0 length strlen data if length count count length copy to user buf data count 1 start transfering new msg 0 usage 0 return count ioctl for device control or set the device static int dynchar ioctl struct inode inode struct file filp unsigned long int cmd unsigned long arg int ret 0 switch cmd case DYNCHAR RESET kfree data data NULL usage 0 new msg 0 break case DYNCHAR QUERY NEW MSG if new msg return IOC NEW MSG break case DYNCHAR QUERY MSG LENGTH if data NULL return 0 else return strlen data break default return ENOTTY return ret struct file operations dynchar fops NULL seek 23 dynchar read read dynchar write write NULL readdir NULL poll dynchar ioctl ioctl NULL mmap dynchar open open NULL flush dynchar release release NULL fsync NULL fasync NULL check media change NULL revalidate NULL lock Initialize the module Register the character device int init module if register chrdev DYNCHAR MAJOR DEVICE NAME dynchar fops printk registering character device major d failed n DYNCHAR MAJOR return EIO initialize the data ptr data NULL usage 0 new msg 0 return 0 Clean up Unregister the character device void cleanup module free data memory if any if data kfree data unregister chrdev DYNCHAR MAJOR DEVICE NAME printk Sorry The dynchar is unloading now n chardev h ifndef DYNCHAR DEVICE H define DYNCHAR DEVICE H include 24 define DYNCHAR MAJOR 42 define DYNCHAR MAGIC DYNCHAR MAJOR define DYNCHAR RESET IO DYNCHAR MAGIC 0 reset the data def

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论