Operating System Principles And Implementation

操作系统原理与实现
陈香兰
Spring 2016


课程基本信息


  1. 必修
  2. 课时:2课时/次*2次/周*15周=60课时
  3. 机时:40;
SundayMondayTuesdayWednesdayThursdayFridaySaturday
Time slots 1-2
Time slots 3-4
Time slots 5-7
Time slots 8-9
Time slots 10-13

主讲老师信息


陈香兰(xlanchen@ustc.edu.cn)
  • 课程QQ群:459744064(请提供验证信息“OS_student:你的学号_你的姓名”)

助教信息


  • 人数(3人)
  • PB13011阮震元(rzy@mail.ustc.edu.cn)
  • SA15011王俊彦(wjuny@mail.ustc.edu.cn)
  • SA15011王震(wzzju@mail.ustc.edu.cn本课程作业和实验相关的助教链接)

  • 教材


    使用“恐龙书”,即《Operating System Concepts》
    1. 教材主页:http://www.os-book.com/
    2. 教材信息:英文原版的最新版为第9版,目前国内有第7版的影印版和翻译版。
    http://codex.cs.yale.edu/avi/os-book/images/os9c-cover.jpg http://ecx.images-amazon.com/images/I/51Jq1Aw1fiL._AA200_.jpg http://images.china-pub.com/ebook50001-55000/54793/zcover.jpg

    其他参考书


    Understanding the linux kernel

    Slides


    0. 课程简介
    1. 第一章 2. 第二章 3. 第三章 4. 第五章 5. 第四章 6. 第六章 7. 第七章 8. 第八章 9. 第九章 10. 第十章 11. 第十一章 12. 第十二章 13. 第十三章

    交作业通知


    第一次交作业的时间:2016年3月9日。截止时间为2016年3月9日晚9点之前,以交到助教手上的时间为准。不接受迟交的作业。
    第二次交作业的时间:2016年3月23日。截止时间为2016年3月23日晚9点之前,以交到助教手上的时间为准。不接受迟交的作业。
    第三次交作业的时间:2016年4月6日。截止时间为2016年4月6日晚9点之前,以交到助教手上的时间为准。不接受迟交的作业。
    第四次交作业的时间:2016年4月20日。截止时间为2016年4月20日晚9点之前,以交到助教手上的时间为准。不接受迟交的作业。
    第五次交作业的时间:2016年5月4日。截止时间为2016年5月4日晚9点之前,以交到助教手上的时间为准。不接受迟交的作业。
    第六次交作业的时间:2016年5月18日。截止时间为2016年5月18日晚9点之前,以交到助教手上的时间为准。不接受迟交的作业。
    第七次交作业的时间:2016年6月1日。截止时间为2016年6月1日晚9点之前,以交到助教手上的时间为准。不接受迟交的作业。

    上机实验(上机时间:待定;地点:待定)


    实验1[实验报告截止时间:待定]


    1、【全体适用】在虚拟机(VirtualBox)上安装一款Linux发行版操作系统(推荐KUbuntu)
  • 注意:使用虚拟机不是必须的。可以直接在裸机上安装。也可以使用wubi安装。
  • 熟悉Linux下的软件安装方法
  • 安装一个可用的集成开发环境(推荐:eclipse CDT)和GCC编译工具链(大多自带)
  • 学会编写简单的shell脚本
  • 注意:为防止数据因重装系统丢失,建议将数据与系统分开管理
  • 完成时间:由助教指定
  • 2、【早就安装过Linux,平时工作在Linux平台上,并且不想再次安装Linux的同学适用】
  • 截图并说明你的Linux平台,包括版本信息等内容
  • 查看你的MBR内容,并截图说明
  • 截图并说明你的Linux平台上的集成开发环境或者你的喜欢使用的(其他/非集成)开发环境界面
  • 提供一个你自己编写的shell脚本,脚本中提供使用手册说明脚本编写的目的和使用方法
  • 提供一个你自己编写的C语言程序,附README文件说明编写此程序的目的和编译及运行方法
  • 完成时间:同1
  • 实验2:进程的创建、通信和新程序的执行[实验报告截止时间:待定]


    在linux中,编写一个程序:
  • 父进程创建一个子进程
  • 父进程输出当前的时间和日期
  • 父进程输出自己的进程号和子进程的进程号
  • 父进程将自己的进程号通过某种IPC方式告诉子进程
  • 子进程输出自己的进程号和父进程的进程号
  • 最后,让子进程执行另外一个程序。
  • 关于IPC方式的选择:
    • 学号尾数为0或5:pipe;
    • 学号尾数为1或6:FIFO;
    • 学号尾数为2或7:message queue;
    • 学号尾数为3或8:shared memory;
    • 学号尾数为4:socket,stream;
    • 学号尾数为9:socket,datagram;
  • 提示:getpid,pipe,write,read,close,fork,execve
  • 提示:IPC部分参考资料(ppt示例
  • 使用strace跟踪父子进程的运行情况,了解程序是如何在系统中运行起来的。
  • 对可执行程序进行反汇编,了解用户程序是如何请求操作系统的系统调用的。
  • 提供上机报告(上机报告模板参考),说明:
    • 进程创建的原理和关键接口原型说明
    • Linux维护当前时间的原理和关键接口原型说明
    • 你所使用的IPC方式的原理和关键接口原型说明
    • strace的原理和关键接口原型说明
    • API和系统调用的原理
    • 一个进程执行一个新的可执行程序的原理和关键接口原型说明
    • 程序设计:给出你的算法或伪代码,要求画出流程图
    • 实验过程和报告中参考的材料或网页
    • 实验过程中出现的错误,解决问题的方法
    • 附上源代码和运行结果的截图
  • 完成时间:由助教指定
  • 实验3:制作启动硬盘并启动一个操作系统映像[实验报告截止时间:待定]


    • 下载grub-0.97.tar.gz并编译,或者直接下载grub-0.97-i386-pc.tar.gz(这是已经编译好的)
    • 制作grub启动软盘,进而制作启动硬盘
    • 操作系统映像:可以到网络上下载一个可用的OS映像,然后编写menu.lst或grub.cfg,利用grub启动之
      • 例如dlxlinux,或其他
      • 这里提供2个RTEMS操作系统的映像: hello.exe ticker.exe
      • 也可以自己编译一个Linux内核、制作一个根文件系统,并启动之
    • 可以参考 这里
    • 提交实验报告
    • 完成时间:由助教指定

    实验4:多线程编程实践[实验报告截止时间:待定]


    • 1(学号尾数为奇数的同学选此题) 写一个多线程的程序,求素数。
    • 2(学号尾数为偶数的同学选此题) 写一个多线程的程序,生成Fibonacci序列。(fib_0=0; fib_1=1; fib_n=fib_n-1+fib_n-2)
    • (对于1)要求1:用户运行程序时在命令行输入一个数N,然后程序创建一个独立新的线程来输出小于或等于N的所有素数。
    • (对于2)要求1:用户运行程序时在命令行输入一个数N,然后程序创建一个独立新的线程来输出连续N个Fibonacci数。
    • 要求2:采用两种thread来实现(pthread或者Windows thread或者Java thread)
    • 完成时间:由助教指定

    实验5:操作系统进程调度和进程同步实验(本实验在讲完同步后才考虑截止)[上机时间:待定;上机地点:待定;实验报告截止时间:待定]


    实验6:存储管理实验[实验报告截止时间:待定]


    多媒体/视频制作(选一)


    1. 请制作一个小视频,介绍不同人群对“什么是操作系统”的理解。(1人)
    2. 主板专题:例如介绍一款主板,给出整体介绍、局部介绍、使用、对比等。
    3. Linux操作系统专题:例如介绍完整的Linux的启动过程,要求:
      1. 进入BIOS界面
      2. 说明启动介质(硬盘还是网络)
      3. 有Linux启动菜单选择界面
      4. 有启动完成后的Linux桌面
    4. Windows操作系统专题:例如介绍完整的Windows操作系统启动过程,要求类似2。
    5. 其他操作系统专题:例如安装、启动、使用示例等。
    6. 课程实验专题:例如说明你在课程实验过程中遇到的软件安装问题和解决过程,要求:
      1. 清楚说明问题来源
      2. 清楚说明你的资料来源
      3. 清楚说明你的解决方法
    7. C语言中的volatile变量和普通变量的区别
    8. FAT文件系统专题:例如剖析fAT文件系统格式;或者使用FAT文件系统(或其他文件系统),在该文件系统中删除一个文件然后恢复该文件;等等
    9. 其他文件系统专题:例如文件系统格式、安装使用、逆向剖析、删除后恢复数据等等
    10. NFS文件系统专题:例如安装NFS文件系统服务环境实现文件共享(可以使用多个物理/虚拟机)
    11. 安全攻防专题:例如堆溢出或栈溢出或两者皆有的实验
    12. 后续逐渐添加中...(题目可以自拟,经主讲老师确认后使用)

    Edited by xlanchen@ustc.edu.cn
    HeFei, AnHui, China.
    Spring, 2016.