课程名称计算机操作系统实验

上传人:feng****ing 文档编号:65768391 上传时间:2022-03-25 格式:DOC 页数:13 大小:94.50KB
收藏 版权申诉 举报 下载
课程名称计算机操作系统实验_第1页
第1页 / 共13页
课程名称计算机操作系统实验_第2页
第2页 / 共13页
课程名称计算机操作系统实验_第3页
第3页 / 共13页
资源描述:

《课程名称计算机操作系统实验》由会员分享,可在线阅读,更多相关《课程名称计算机操作系统实验(13页珍藏版)》请在装配图网上搜索。

1、一、 课程名称:计算机操作系统实验(一)本课程实验总体介绍1、本课程上机实验的任务: 通过该实验真正认识多进程、多线程、微核、死锁、文件系统、缓存等概念 及实现原理;在充分理解原理和算法的基础上,发挥学生自我创造力,鼓励并创造机会让学生提出新的算法或实现 .2、本课程上机实验简介: 分为课程实验和课程设计两大部分 . 课程实验通过应用层编程调用系统接口加深对进程、内存、文件和设备等功 能的理解。具体为实验 14。课程设计通过对 Linux 核心源代码的实例分析和 设计掌握系统设计的原理和方法。具体为实验 5 12。3、本课程适用专业: 计算机相关专业。4、本课程上机实验涉及核心知识点:核心知识

2、点 : 微核、系统调用、核心态与用户态、进程、线程、同步、互斥、 并发、死锁、伙伴算法、文件及文件目录、 I/O 缓冲、调度算法、系统初始化、 时钟中断等。5、本课程上机实验重点与难点: 并发控制,内核代码的分析与设计 .6、本课程上机实验运用软件名称 :VC+编译环境,Source In sight分析器、gcc编译器,7、总学时:课程实验: 16 学时 课程设计:共 8个课程设计,每个根据难度在 820 学时。8、教材名称及教材性质(自编、统编、临时 ):名称:LINUX操作系统分析与设计性质:自编9、参考资料:计算机操作系统汤子瀛,西安电子科技大学出版社(第3版)Lin ux 设备驱动程

3、序第二版 Alessa ndro Rub ini & Jon athan Corbet编著 魏永明 骆刚等译 中国电力出版社2002年11月 第一版。Linux操作系统内核分析陈莉君 编 人民邮电出版社第一版。Linux操作系统内核实习Gary Nutt著机械工业出版社.(二)包含实验项目基本信息实验项目11、实验项目名称:进程调度算法设计实践2、实验项目的目的和任务:目的:通过该实验,加深对多道系统中调度算法的认识。任务:实现 FIFO, RR(q=1), SPN, SRT, HRRN, FB (去二 2i-1)六种调度算 法.并通过输入一组进程序列计算出每种算法的输出进程序列。3、上机实验

4、内容:(1) 实现主程序及六种调度算法。(2) 输入一组进程序列,对序列中的每一个进程,定义不同的优先级、总执 行时间,用六种调度算法输出调度最终的排序结果。序列例;进程号12345678优先级42213343运行时间2060365971823454、学时数:4实验项目21、实验项目名称:线程间同步与互斥2、实验项目的目的和任务: 目的:通过多线程并发程序设计,掌握同步与互斥的设计方法。 任务 :实现一个生产者、消费者的两线程同步算法 .3、上机实验内容:(1) 申请 10 个缓冲区。(2) 编制生产者线程 :首先产生一个随机数,写入到一个缓冲区中。其次将该 缓冲区置“满”标志 .(3) 编制

5、消费者线程 :取一个“满”标志的缓冲区中数据,打印输出,然后将该 缓冲区置“空”标志。(4) 添加相应的同步互斥控制代码。4、学时数 :4实验项目 31、实验项目名称: 内存分配与回收设计2、实验项目的目的和任务: 目的:学习内存管理的实现原理。 任务 :实现一个基于伙伴算法的内存分配回收算法, 并通过输入一组内存请求 与回收序列验证该算法执行情况。3、上机实验内容: (1)实现主程序及伙伴算法(设内存总量为 1M) 。 (2)用如下请求和释放序列验证该算法执行情况。请求100k请求240k请求64k 请求256k释放240k 释放100k 请求75k释放64k 释放75k释放256k 试输出

6、每次请求和释放动作产生后的内存状态。4、学时数: 4 实验项目 41、实验项目名称: 文件复制2、实验项目的目的和任务: 目的:掌握文件系统的系统调用的使用。任务:产生两个文件A和B,并将这两个文件内容交叉复制到文件C中,并输出文件 C 的结果。3、上机实验内容:(1 )产生一个1k的文件A,其内容为数字。(2)产生一个1k的文件B,其内容为字母。(3)以 100字节为单位,将 A、B 两文件的内容交替复制到文件 C 中。最后 输出 C 的结果 .4、学时数: 4实验项目 51 、实验项目名称:Linux 时间系统分析2、实验项目的目的和任务 :通过对 LINUX 系统与时间有关的系统源代码分

7、析 ,学习多任务系统中调 度的核心事件时钟中断的实现原理,学习 LINUX 的内核机制以及内核时钟 维护机制。3、上机实验内容:编写一个拾取当前时间的应用程序,熟悉系统调用 gettimeofday() 的 使用。分析linuxkerneltime.c中的sys_gettimeofday()过程,说明时间是从何处 取得的,并给出分析流图。分析 linuxkernelitimer.c 中的 sys_getitimer()和 sys_setitimer()过程,给 出分析流图。分析 linuxarchi386kernel 中的时钟中断处理过程 do_timer_interrupt()和 中的tim

8、er_bh()过程,给出分析流图,解释时钟中断处理的 全过程.4、学时数 :10实验项目 61、实验项目名称 :Linux 系统初始化过程分析2、实验项目的目的和任务:通过对 LINUX 启动处理代码的分析 ,学习操作系统初始化与其他模块实 现的关系 ;学习各个模块的初始化顺序, 深入理解操作系统的功能划分及相互 关系;学习一个大型软件系统中初始化模块的设计方法。3、上机实验内容:分析在linuxinitmain.c中的start_kernel ()函数过程,它是整个操作系统 初始化最重要的过程。分析要求 :由于涉及初始化系统各个模块,内容很 广,这里要求了解start_kernelO函数中所

9、调用的各个子过程所属模块, 无需对被调用的子模块进一步分析认识系统各个模块的初始化时机 详细分析start_kernel ()函数中调用的 schednit和time_init两过程, 说明它们的主要功能,给出分析流图。详细分析start_kernel()函数中调用的kernel_thread(init,)、分析init函 数及其中调用的do_basic_setup(函数;给出分析流图。4、学时数: 4实验项目71、实验项目名称:Linux 文件系统分析2、实验项目的目的和任务:通过对 Linux 系统源代码分析 ,学习 Linux 虚拟文件系统 VFS 的原理及实 现框架;学习 VFS 和逻

10、辑文件系统如何协同实现对磁盘的管理 ;理解软件层 状设计的特点 .3、上机实验内容:分析文件 linuxincludelinuxfs.h 中 file_operations、 inode_operations、 super_operations、 file_system_type 等几个数据结构,了解它们各自的作 用.分 析文 件 linuxfssuper.c 中 sys_mount ( )、 sys_umount ( )、 register_filesystem()和 unregister_filesystem()的实现过程,并给出分析流 图。分析文件 linuxfsfilesystems.

11、c 中函数 filesystem_setup()了解文件系统初 始化过程分析vfs的fopen函数的实现过程,即分析文件linuxfsopen。c中的 sys_open(),理解文件的各种操作集合的挂接过程,给出分析流图。4、学时数: 12实验项目81、实验项目名称 :Linux 网络通信协议分析2、实验项目的目的和任务:分析 linux 通信协议的组织结构;掌握 SOCKET 接口;掌握协议数据的 接收和发送流程;掌握网卡的数据接收和发送机制。3、上机实验内容:分析 socket()系统调用过程,包括linuxnetsocket。c 中的 sys_socketcall ()、sys_sock

12、et)、sock_creat()和linuxnetipv4Af_inet。c 中的 inet_create 等函数。分析 bi nd ()系统调用,包括 linu xnetsocket.c 中的 sys_bi nd()和 lin uxnetipv4Af_i net。c 中的 in et_bi nd ()函数。分析 listen ()系统调用,包括 linuxnetsocket.c 中的 sys_listen ()和 linuxnetipv4Af_inet.c 中的 inet_listen()函数。分析 connect ()系统调用,包括 linuxnetsocket。c 中的 sys_conn

13、ect () 和linuxnetipv4Af_inet。 c 中的 inet_stream_connect()函数。分析 accept ()系统调用,包括 linuxnetsocket。c 中的 sys_accept(和 linuxnetipv4Af_inet。c 中的 inet_accept()函数。分 析 send ( ) 系 统 调 用 , 包 括 linuxnetsocket.c 中 的 sys_send()、 sys_sendto() sock_sendmsg )、linuxnetipv4Af_inet。c 中的 inet_sendmsg ( )、 linuxnetipv4Tcp_i

14、pv4 。 c 中 的 tcp_v4_sendmsg( )、linuxnetipv4Tcp.c 中的 tcp_do_sendmsg()、 linuxnetipv4Tcp_output。 c 中的 tcp_send_skb()、 tcp_transmit_skb()、 linuxnetipv4Ip_output.c 中 的 ip_queue_xmit()、 linuxincludenetIp 。 h 中 的 ip_output( )、 ip_finish_output ()、linuxnetcoredev。c 中的 dev_queue_xmit()等函数。 分析 receive ()系统调用,包

15、括 linuxnetsocket。 c 中的 sys_recv()、 sys_recvfrom() 、 linuxnetipv4Af_inet.c 中 的 inet_recvmsg( )、 linuxnetipv4Tcp.c 中的 tcp_recvmsg()、 linuxnetipv4Tcp_input.c 中的 tcp_rcv_established)、linuxnetipv4Tcp_ipv4。c 中的 tcp_v4_do_rcv()、 tcp_v4_rcv () linuxnetcoredev.c 中的 net_bh()、linuxnetipv4lp_input。 c 中的 ip_loca

16、l_deliver ()、ip_rcv()等函数.分析网卡驱动中数据发送和接收处理过程。4、学时数: 16实验项目 91、实验项目名称 :Linux 系统调用分析与实现2、实验项目的目的和任务:理解操作系统内核与应用程序的接口关系;加深对内核空间和用户空间 的理解;学会增加新的系统调用。3、上机实验内容:a) 增加系统调用函数 直接在原有程序文件中增加,减少修改 Makefile 文件的麻烦。该函 数的名称应该是新的系统调用名称前面加上sys_B志.例如新加的系统调用为 mycall (int number),在/usr/src/linux/kernel/sys。c文件中添加源 代码,如下所示

17、 :asmlinkage int sys_mycall(int number)printk (“call number is dn”,number); return number;b) 连接新的系统调用 添加新的系统调用后 ,下一个任务是使 Linux 内核的其余部分知道该 系统调用的存在。为了从已有的内核程序中增加到新的系统调用函数的 连接,需要编辑两个文件。第一个要修改的文件是 : /usr/src/linux/include/asm-i386/unistd.h 该文件中包含系统调用清单, 用来给每个系统调用分配一个唯一的号 码。将新增的系统调用名称加到清单最后,并给它分配号码序列中下一

18、个可用的系统调用号。例如 :define _NR_mycall 239 系统调用号为 239,之所以系统调用号是 239,是因为内核自身的系 统调用号码已经用到 238。第二个要修改的文件是: /usr/src/linux/arch/i386/kernel/entry。 S 该文件中有类似如下的清单:long SYMBOL_NAME( )该清单用来对sys_call_tableU数组进行初始化。该数组包含指向内 核中每个系统调用的指针 .这样就在数组中增加了新的内核函数的指针。 在清单最后添加一行:long SYMBOL_NAME(sys_mycall)c) 重建新的 Linux 内核,作以下

19、命令make menuconfigmake depmake cleanmake bzImagenew配置内核选项生成依赖关系 清除旧的编译结果 编译内核映象make modules编译内核模块make modules_install安装内核模块d)用新的内核启动系统修改 /etc/lilo.conf 文件,添加新的引导内核: image=/boot/bzImage-new label=linux newroot=/dev/hdb1read-only添加完毕后,为了使用新的lilo。conf配置文件,还应执行下面的命令:cp /usr/src/linux/arch/i386/boot/zImag

20、e /boot/bzImage-new 其次配置 lilo: /sbin/lilo当重新引导系统时,在boot:提示符后面有三种选择:linux new、linux、 doso选择linux new即可以新内核启动。用新内核启动后则可使用新的系 统调用。e)使用新的系统调用 编写应用程序使用新添加的系统调用 mycall。4、学时数: 8实验项目 101、实验项目名称 : 内核模块机制和新模块编写2、实验项目的目的和任务:理解 Linux 操作系统模块机制,学会使用模块设计系统的方法,学习编 写一个新的内核模块 .3、上机实验内容:1)设计一个在 /proc 中实现 clock 文件的模块,该

21、文件只支持文件的 read()操作。当调用read0操作时,返回一个单一的 ASCII字符串,其中包括 用一个空格分开的两个数字子串。例如,若系统时间变量xtime设置为:xtime.tv_sec=923264577 xtime.tv_usec=234438,则该模块必须返回如下形式的一个字符串:923264577 234438a)写一个空内核模块,编译测试.编辑:#i nclude #i nclude int ini t_module()printk( ft is a null kernel modulen ”; return 0;void clea nu p_module()printk(

22、 f am exiting now n ”;编译:gcc -c -Wall -)_KERNEL_ -DMODULE testmodule.c运行:装入模块/检查装入是否成功/卸载模块/检查卸载是否成功in smod testmodule.olsmodrmmod testmodulelsmodb) 生成一 proc文件,以用于读取系统时钟。在模块中使用 proc_register()和 proc_unregister ()注册和 注销。它们引 用一个 struct proc_dir_entry数据结构,将该结构中get_info指针指向自己构造的读函数. 模版如下:#i nclude int t

23、est_read(char*, char *, off_t, in i, i nt) struct proc_dir_e ntry test_proc_file= 0,9,”estmodule ”S_IFREG|S_IRUGO, 1,0,0, SIZE, NULL, test_read, NULL;int ini t_module() /*proc_root 是/proc 的根 */return proc_register(&proc_root, &test_proc_file);void clea nu p_module() proc_ un register(&proc_root, tes

24、t_proc_file .lowino); 设计一个演示模块应用程序,读取/proc/testmodule的内容并打印输出。4、学时数:12实验项目111、实验项目名称:Linux环境设备驱动程序设计2、实验项目的目的和任务:学习linux系统设备驱动程序的组织结构及管理方法,掌握设备驱动程序 的设计方法,并编写一个字符空设备驱动实例。通过实验进一步理解操作系 统对设备管理的共性以及设备驱动程序的个性,理解各种设备驱动工作方式。3、上机实验内容:(1) 模块初始化时完成对设备的注册.为使模块加载命令insmod来把设备驱动程序插入到内核之中。在 insmod 调用的init_module ()

25、函数中调用register_chrdev()注册一个字符设备(其 他块设备与网络设备类似)。如果成功,设备名就会出现在/proc/devices文 件中.(2) 在文件系统为其创建一个代表节点.mknod /dev/ dev_name vtypemajor_number minor_number 如: mknod /dev/test.c major minor(3) 完成设备打开、关闭、读和写几个基本过程。例如:struct file_operati ons Test_Fops = NULL,/*寻找*/Read: device_read,/ *读设备*Write: device_write

26、,/*写设备*/NULL ,/*读目录*/NULL ,/*选择*/NULL ,/* ioctl * /NULL ,/* mmap * /Open: device_ope n,/*打开*/NULL ,/ *刷新* /release: device_release,/*关闭*/;int init_module()Major = module_register_chrdev(0, DEVICE_NAME, &Test_fops);static int device_open(struct inode *inode, struct file *file)static int device_releas

27、e(struct inode * inode, struct file * file)static ssize_t device_read( struct file *file , char *buffer, size_t length, loff_t * offset)static ssize_t device_write(struct file * file,const char *buffer, size_t length, off_t *offset)本文为互联网收集,请勿用作商业用途个人收集整理,勿做商业用途(4) 在模块卸载时卸载驱动程序模块。通过执行模块卸载命令rmmod中的cl

28、eanup_module ()函数,调用module_unregister_chrdev()注销设备,对驱动程序模块进行卸载。(5) 写一个测试该设备的应用程序完成测试.4、学时数:12 实验项目 121、实验项目名称 :LIUNX 文件系统设计2、实验项目的目的和任务: 通过设计一个独立的逻辑文件系统,掌握 linux 文件系统设计的注册、注 销、挂接操作的实现细节掌握VFS和LFS的挂接实现技术。深入理解Linux 文件操作集设计模式。3、上机实验内容:(1) 模块初始化时完成对文件系统的注册。a) 申明一个新的文件系统:static DECLARE_FSTYPE ( tfs_type,

29、tfs ”, tfs_read_super, 0); tfs_read_super是tfs文件系统的读超级块过程。b) 在模块初始化函数in it_module ()中调用文件系统注册函数 register_filesystem(tfs_type);(2) 实现新文件系统的 super_block、 inode、 file 操作集合 ,操作集合的具 体内容可以是空操作。(3) 用mount /umount完成对新文件系统的挂接测试.例如:mount - tfs /tmpl /tmp2umount - tfs /tmp2(4) 在模块卸载时卸载文件系统。 在 cleanup_module( )函数中 调用 unregister_filesystem(&tfs_type);(5) 写一个测试该文件系统的应用程序完成对操作集合的测试。4、学时数 :20

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!