南 京 中 医 药 大 学
《操作系统》实验教学大纲
(适用于 计算机类、医学信息工程、人工智能类 专业)
课程名称: 操作系统 英文名称:Operating System
课程类别:必修课 课程编码:081106
课程学分:0.5(3.5) 课程学时:16(72)
开课单位:软件工程教研室 实验室:软件工程
实验(实训)项目数:5课程负责人:何菊
课程简介
《操作系统》是计算机类专业的专业核心课程。本课程全面系统地介绍操作系统的体系结构、设计原理及实现方法和技术,包括自启动装入、系统调用、进/线程概念、同步/通信机制、调度算法、死锁处理、基于分区/分页/分段的内存管理及虚拟存储、设备管理、文件系统等。通过本课程的学习,使学生认识到操作系统在计算机软硬件资源管理中的地位和作用,了解操作系统的发展方向,培养学生观察问题、分析问题、解决问题和实际动手能力。
二、教学目标与基本要求
通过本课程的学习,从深层次了解操作系统的组成、结构和功能,增强学生大型系统软件的开发能力,并注重专业素养的不断提高,为学生以后参与系统软件分析和开发奠定基础。
1、理解和掌握操作系统的基本概念、特性、功能组成及体系结构;
2、掌握自启动装入和系统调用实现机制,以及操作系统内核中关于处理机管理、内存管理、设备管理和文件系统的基本设计原理、方法与技术,培养学生分析、设计、开发、移植和维护计算机系统软件的综合素养及基本技能;
3、引导学生应用信号量机制及各类调度算法进行计算机编程问题的分析、建模、设计、编码和测试,逐步具备应用操作系统核心方法和技术解决计算机系统工程领域复杂问题的能力;
4、引导学生理解操作系统技术的发展历程,培养他们分析和解决工程实践问题的创新意识和创新设计能力。
三、实验(实训)项目、内容与学时分配
实验项目
序号 | 实验项目名称 | 学时 | 内容提要 | 实验类型 |
基础性 | 综合设计性 | 创新性 |
1 | OS Lab实验环境的使用与熟悉 | 3 | [实验目的] 1、熟悉操作系统集成实验环境OS Lab的基本使用方法。 2、练习编译调试EOS操作系统内核以及EOS应用程序。 [实验内容] 1、学习OS Lab的基本使用方法 2、EOS内核项目的生成和调试 3、EOS应用程序项目的生成和调试。 [实验方法及原理] 运用OS Lab创建内核项目、应用程序项目,学会使用调试工具进行调试。 思考题: 1、练习使用单步调试功能(逐过程、逐语句),体会在哪些情况下应该使用“逐过程”调试,在哪些情况下应该使用“逐语句”调试。练习使用各种调试工具(包括“监视”窗口、“调用堆栈”窗口等)。 2、思考生成EOS SDK文件夹的目的和作用。查看EOS SDK文件夹中的内容,明白文件夹的组织结构和各个文件的来源和作用。查看EOS应用程序包含了SDK文件夹中的哪些头文件,是如何包含的? |
| √ |
|
2 | 操作系统的启动 | 3 | [实验目的] 1、跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程。 2、查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。 [实验内容] 调试EOS操作系统的启动过程 调试BIOS程序 调试软盘引导扇区程序 调试加载程序 调试内核
6、查看EOS启动后的状态和进程线程信息 [实验方法及原理] 1、复习汇编语言的相关知识,并掌握NASM汇编代码的特点。 2、了解Bochs和Virtual PC这两款虚拟机软件的特点,重点熟悉Bochs的调试命令。 思考题: 1、为什么EOS操作系统从软盘启动时要使用boot.bin和loader.bin两个程序?使用一个可以吗?它们各自的主要功能是什么?如果将loader.bin的功能移动到boot.bin文件中,则boot.bin文件的大小是否仍然能保持小于512字节? 2、软盘引导扇区加载完毕后内存中有两个用户可用的区域,为什么软盘引导扇区程序选择将loader.bin加载到第一个可用区域的0x1000处呢?这样做有什么好处?这样做会对loader.bin文件的大小有哪些限制。 |
| √ |
|
3 | 进程的创建 | 3 | [实验目的] 1、练习使用EOS API函数CreateProcess创建一个进程,掌握创建进程的方法,理解进程和程序的区别。 2、调试跟踪CreateProcess函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。 [实验内容] 1、练习使用控制台命令创建EOS应用程序的进程。 2、练习通过编程的方式让应用程序创建另一个应用程序的进程。 3、调试CreateProcess函数。 4、调试PsCreateProcess函数 5、练习通过编程的方式创建应用程序的多个进程。 [实验方法及原理] 理解程序和进程的关系,熟悉进程控制块结构体以及进程创建的过程。 思考题: 1、在源代码文件NewTwoProc.c提供的源代码基础上进行修改,要求使用hello.exe同时创建10个进程。 提示:可以使用PROCESS_INFORMATION类型定义一个有10个元素的数组,每一个元素对应一个进程。使用一个循环创建10个子进程,然后再使用一个循环等待10个子进程结束,得到退出码后关闭句柄。 2、尝试调试PspCreateThread函数,观察线程控制块(TCB)初始化的过程。 3、在PsCreateProcess 函数中调用了PspCreateProcessEnvironment 函数后又先后调用了PspLoadProcessImage和PspCreateThread函数,学习这些函数的主要功能。能够交换这些函数被调用的顺序吗?思考其中的原因。 |
| √ |
|
4 | 进程的同步 | 3 | [实验目的] 1、使用EOS的信号量,编程解决生产者—消费者问题,理解进程同步的意义。 2、调试跟踪EOS信号量的工作过程,理解进程同步的原理。 3、修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。 [实验内容] 1、使用EOS的信号量解决生产者-消费者问题。 2、调试EOS信号量的工作过程。 3、修改EOS的信号量算法,并进行测试。 [实验方法及原理] 学习EOS内核提供的三种同步对象,学习经典的生产者-消费者问题。 思考题: 1、思考在ps/semaphore.c文件内的PsWaitForSemaphore和PsReleaseSemaphore函数中,为什么要使用原子操作? 2、绘制ps/semaphore.c文件内PsWaitForSemaphore和PsReleaseSemaphore函数的流程图。 |
| √ |
|
5 | 分页存储管理 | 3 | [实验目的] 1、学习i386处理器的二级页表硬件机制,理解分页存储器管理原理。 2、查看EOS应用程序进程和系统进程的二级页表映射信息,理解页目录和页表的管理方式。 3、编程修改页目录和页表的映射关系,理解分页地址变换原理。 [实验内容] 1、查看EOS应用程序进程的页目录和页表。 2、查看应用程序进程和系统进程并发时的页目录和页表。 3、查看应用程序进程并发时的页目录和页表。 4、编程实现在二级页表中映射新申请的物理页。 [实验方法及原理] 了解i386处理器的二级页表硬件机制,EOS操作系统的分页存储器管理方式,以及进程地址空间的内存分布。 思考题: 1、页目录被复用为了页表。假设修改页目录使其第0x100个PDE映射的页框号是页目录本身,此时页目录和页表会映射在4G虚拟地址空间的什么位置呢?说明计算方法。 2、修改EOSApp.c中的源代码,通过编程的方式统计并输出用户地址空间占用的内存数目。 |
| √ |
|
四、教材及主要参考资料
1. 教材
[1]汤小丹等.计算机操作系统(第四版), 西安电子科技大学出版社, 2014
[2]自编实验指导手册
2. 参考资源
(1)教学平台
南京中医药大学在线教育平台,http://e.njucm.edu.cn,QQ:515963042
(2)参考书目
①张尧学,史美林.计算机操作系统教程(第二版),清华大学出版社,2000
②邹鹏.操作系统原理与实践,高等教育出版社, 2008
③Ramez Elmasri,翟高寿译.操作系统实用教程:螺旋方法,机械工业出版社,2018
④费翔林,骆斌.操作系统教程(第五版),高等教育出版社,2014
⑤刘刚,赵鹏翀.操作系统实验教程,清华大学出版社,2013