Linux操作系统分析

陈香兰
Fall 2011


主讲老师信息


  • 陈香兰(xlanchen@ustc.edu.cn)
    • 课程接待日:周一上午,来之前请先电话联系
    • 联系信息(合肥):科大西区电三421,0551-3606864-83

    助教信息


  • 人数(1人)
    1. 周金红
    2. Email: zjh@mail.ustc.edu.cn
      Phone(O): 0551-3606864-83
      主页: 暂无
      办公室: 科大西区电三421

    参考书


  • Understanding the Linux Kernel (O'reilly)
  • 各种网站

  • 课时和上课时间


    课时:2课时/次*2次/周*12周+考试=50课时
    教学周
    星期二
    (7:50~9:25)
    9月6日 9月13日 9月20日 9月27日(交作业
    星期四
    (7:50~9:25)
    9月8日 9月15日 9月22日 9月29日
    教学周
    星期二
    (2:00~17:20)
    10月4日(国庆 10月11日 10月18日 10月25日(交作业
    星期四
    (2:00~17:20)
    10月6日(调课到10月8日 10月13日 10月20日 10月27日
    教学周 十一 十二 十三
    星期二
    (2:00~17:20)
    11月1日 11月8日 11月15日 11月22日(交作业
    星期四
    (2:00~17:20)
    11月3日 11月10日 11月17日 11月24日
    教学周 十四
    星期二
    (2:00~16:00)
    11月29日
    星期四
    (2:00~16:00)
    12月1日(暂定考试
  • 注:考试相关参考资料

  • 幻灯片


  • 0,课程介绍
  • 1,绪论
  • 1_2,GNU Tools
  • 2,基于x86的Linux的启动,2011-10-8
  • 2_2,制作简单的Linux系统
  • 3,内存寻址
  • 4.1,进程管理1
  • 4.2,进程管理2,2011-3-31
  • 4.3,进程管理3
  • 5,中断和异常
  • 6,系统调用
  • 7,时钟和定时
  • 8,内存管理
  • 9.1,地址空间
  • 9.2,程序的执行
  • 10,文件系统
  • 11,信号机制
  • 12,IO管理
  • 13,进程的同步和通信几个例子

  • 实验课时间安排(参见助教主页


    报告和上机


  • 1,准备源代码分析和实验环境
    • 请根据课堂内容准备源代码分析和实验环境
    • 要求(1):准备好Linux主机环境,安装好开发工具链
    • 要求(2):下载并缺省编译Linux-2.6.26,成功
    • 要求(3):安装源代码阅读工具,推荐SourceInsight,并基于编译过的Linux-2.6.26源代码,建立Linux-2.6.26的源代码工程
      • 若使用SourceInsight,建立利用SourceInsight的文件管理功能,去除arch目录和include目录下非x86的其他体系结构的源代码
      • 使用其他源码阅读工具,可是可以的
      • 要能看到若干Makefile文件
      • 要能看到若干*.lds文件
    • 注:可以直接在Linux中使用Wine来运行SourceInsight,也可以使用Windows系统中安装的SourceInsight
    • 目标(1):熟悉安装并使用Linux主机环境
    • 目标(2):熟悉Linux编译步骤
    • 目标(3):熟悉安装并使用常用GCC相关工具软件
    • 目标(4):熟悉安装并使用源代码阅读工具
    • 目标(5):初步掌握Linux-2.6.26的内核源代码框架
    • 检查方法
      • 每个同学提交一份自查报告,由助教汇总
      • 助教根据自查报告给分,并随机抽查若干进行验证(凡验证不合格者,须重新准备环境,且得分最高不超过6分

  • 2,报告:基于x86体系结构分析linux-2.6.26的启动过程
    • 仅考虑32位体系结构
    • 不考虑多核多处理器
    • 要求1:分析流程按照开机-->BIOS-->grub-->Linux的顺序进行,到start_kernel结束
    • 要求2:首先给出Linux映像的make过程分析,说明grub将跳转到哪个Linux源文件中的哪处开始执行
    • 要求3:从make过程,给出Linux中的启动相关的几个关键源文件的执行顺序
    • 要求4:从第一个源文件开始给出主要流程,到start_kernel结束

  • 3,对Linux2.6.26的进程调度和切换过程进行分析,提交分析报告
    • 要求(1):分析从schedule()开始,说明几种不同类型的进程之间的调度选择;在相同类型的进程之间的调度选择算法
    • 要求(2):在选择好next进程之后,以ppt动画的方式或其他动画方式,画出prev进程切换到next进程时,相关堆栈内容、CPU的堆栈指针以及相关数据结构内容变化的情况
    • 要求(3):从CPU的IP值的变化上,说明在switch_to宏执行后,执行了哪个函数?执行了这个函数之后,又到哪里执行了?
    • 要求(4):说明哪一行代码切换了堆栈,在切换堆栈前后,求current_thread_info有什么变化
    • 要求(5):说明哪一行代码切换了地址空间,在切换堆栈前还是后?为什么地址空间的切换不会影响后续切换代码的执行?
    • 要求(6):说明哪一行代码的执行,使得current宏所代表的进程发生了变化
    • 要求(7):说明哪一行代码的执行,使得任务状态段中关于内核堆栈的信息发生了变化

  • 4,进程的创建,提交实验和分析报告
    1. 从用户态体验进程的创建
      • 使用C语言编写一个程序,调用fork创建一个子进程,然后让子进程和父进程分别输出fork的返回值和各自的pid。
      • 编写另外一个程序,连续3次调用fork, 然后让子进程和父进程分别输出fork的返回值和各自的pid,说明一共创建了几个进程?画出进程之间的创建关系(进程使用pid来标识)
    2. 对Linux中进程的创建进行分析

  • 5,中断/异常/系统调用
    • 分析中断、异常和系统调用的代码(任选其一),提交分析报告
    • 要求(对于中断):
      • 说明x86的中断机制,说明它在Linux中是如何实现的
      • 说明Linux体系结构无关层是如何组织中断处理程序的
      • 请结合一个具体的中断进行分析,例如某个设备驱动中的中断处理程序
        1. 分析该中断处理程序是如何注册的?
        2. 当该中断被触发,CPU是如何响应的,从什么代码开始执行,如何执行到这个设备驱动所注册的中断处理程序上的?
      • 说明Linux中的软中断、tasklet和工作队列机制,在Linux中分别找到一个例子来说明设备是如何使用这三种机制的
      • 请采用某种方法截获一个中断,例如键盘中断
    • 要求(对于异常):
      • 说明x86的异常机制,说明它在Linux内核中是如何实现的
      • 以某个异常为例,从这个异常被触发开始,说明这个异常在Linux中是如何处理的
      • 采用某种方法制造缺页异常
    • 要求(对于系统调用):
      • Linux的系统调用利用了x86的哪种硬件机制?
      • 说明Linux是如何组织系统调用的?
      • 说明一个用户态的程序是如何进入系统调用中执行的?
      • 以某个系统调用为例,从用户激活系统调用开始,分析系统调用在Linux中是如何一步一步执行的
      • 自己编写一个系统调用,并编写用户态程序,从这个用户态程序中调用这个系统调用
    • 任选其一,其中异常的难度最低,起评分最低
    • 实验与分析报告和源代码

  • 6,定时器
    1. 在用户态编写一个程序,该程序设定一个定时器,在时间到期的时候做出某种可观察的响应(方法不限)
    2. 分析你的程序的实际执行借助了内核的哪些机制
    3. 提交实验与分析报告

  • 7,虚拟字符驱动
    1. 模拟一个字符设备,提供字符设备驱动
    2. 在Linux 2.6环境中,动态加载虚拟字符驱动模块
    3. 编写一个应用程序,对虚拟字符设备驱动进行读写
    4. 课堂举例的参考

    Edited by xlanchen@ustc.edu.cn
    SuZhou, JiangSu, China.
    Fall, 2010.