Linux操作系统分析(G430113373)

陈香兰

Autumn 2008


  • Instructor: 陈香兰
  • phone number: 
    0512-87161312(苏州);
    0551-3606864-83(合肥)
  • 办公室地址:亲民楼312
  • Course Time:
    周一下午6、7、8;
    周三下午6、7、8.
  • 助教:
    裴建国
    (owenustc@gmail.com)
    冯晓静
    (bangyan@mail.ustc.edu.cn)
  • phone number:
    0512-87161316(苏州)
  • 实验室地址:亲民楼316
  • Project Time:
快速链接:
  • 课程简介
  • 参考书
  • 课程内容

project提交截止时间时间:考试结束后一周,即11月22日之前


考试

方式:闭卷。
时间:2008年11月15日(周六)上午9点-11点。

助教的链接

课程简介

本课程通过Linux操作系统源代码分析了解Linux操作系统与底层硬件、上层应用之间的结构关系、调用关系,熟悉Linux操作系统的配置、安装过程,深入分析Linux操作系统对底层硬件的封装方法、它是如何将体系结构相关部分与体系结构无关部分进行分离的,掌握Linux操作系统的内核关键技术,例如中断和异常处理、地址空间管理、内存分配技术、进程管理、进程切换关键代码、进程间通信机制、文件系统管理等内容,掌握Linux操作系统中设备管理方法以及设备驱动程序结构,掌握在Linux中的设备驱动层次。

参考书:

  1. Understanding Linux Kernel(深入理解Linux内核)
  2. Linux内和源代码情景分析,上下册,毛德操、胡希明,浙江大学出版社
  3. Unix Internals: The New Frontiers, Uresh Vahalia(中文版:Unix高级教程系统技术内幕,清华大学出版社)
  4. 微型计算机技术及应用——从16位到32位,第二版,戴梅萼、史嘉权编著,清华大学出版社

Project:

Project 1:基于I386的Linux启动过程分析

  • 根据9.10日的上课内容和阅读作业,书写分析报告
  • 难度1:基于Linux2.4.18内核
  • 难度2:基于Linux2.6.11内核
  • 以上两个难度,二选一
  • 报告模板,由助教给出

Project 2:基于I386的Linux2.4.18的进程切换和调度分析

  • 根据9.24日的上课内容和阅读作业,书写分析报告
  • 难度1:基于Linux2.4.18内核
  • 难度2:基于Linux2.6.11内核
  • 以上两个难度,二选一
  • 报告模板,由助教给出

Project 3:基于I386的Linux2.4.18的进程创建的分析和实践

  • 根据9.29日的上课内容和阅读作业,书写分析报告
  • 难度1:基于Linux2.4.18内核
  • 难度2:基于Linux2.6.11内核
  • 以上两个难度,二选一
  • 报告模板,由助教给出

Project 4:基于I386的Linux2.4.18的中断、异常和系统调用的分析和实践

  • 根据10.8的上课内容和阅读作业,书写分析报告
  • 引入一个新的难度:基于最早的Linux内核,这个简单一点
  • 难度1:基于Linux2.4.18内核
  • 难度2:基于Linux2.6.11内核
  • 报告模板

Project 5:定时器

  • 参见10.12日的上课内容,书写分析报告,提交程序
  • 难度1:基于较早的Linux内核,分析时钟和定时器管理机制
  • 难度2:基于Linux2.4.18内核
  • 难度3:基于Linux2.6.11内核,难度较大,可能需要寻找相关的内容
  • 报告模板

Project 6:Linux中的VFS分析

  • 分析Linux的VFS相关的数据结构、文件系统的挂载操作,了解VFS中的各种操作(例如read)是如何与一个具体的文件系统相关的
  • 难度1:基于Linux2.4.18内核
  • 难度2:基于Linux2.6.11内核
  • 报告模板

Project 7:虚拟字符驱动

  • 参见10.20日的上课内容
  • 报告模板

课程内容:

ppt等 readings & homeworks & project
第十三讲 内容提要
  1. Linux中的进程间通信
第十二讲 内容提要
  1. Linux中的信号
第十一讲 内容提要
  1. 管理I/O设备1
第十讲 内容提要
  1. 文件系统
第九讲 内容提要
  1. 进程地址空间
  2. 程序的执行
  3. fs/exec.c
  4. arch/i386/kernel/process.c
  5. mm/mmap.c
  6. arch/i386/mm/fault.c
第八讲 内容提要
  1. 存储器管理
  2. arch/i386/mm/init.c
  3. init/main.c
  4. mm/bootmem.c
  5. mm/page_alloc.c
第七讲 内容提要
  1. 时钟和定时测量
  2. kernel/timer.c
  3. timex.h
  4. asm-i386/timex.h
  5. arch/i386/kernel/time.c
第六讲 内容提要
  1. 系统调用
第五讲 内容提要
  1. 中断和异常
  2. arch/i386/kernel/entry.S
  3. arch/i386/kernel/irq.c
  4. include/asm-i386/hw_irq.h
  5. arch/i386/kernel/traps.c
  6. arch/i386/kernel/i8259.c
第四讲 内容提要
  1. Linux的进程
  2. include/linux/sched.h
  3. kernel/sched.c
  4. kernel/fork.c
  5. kernel/timer.c
  6. include/asm-i386/processor.h
  7. include/asm-i386/current.h
  8. include/linux/wait.h
  9. include/asm-i386/system.h
  10. arch/i386/kernel/process.c
  11. arch/i386/kernel/entry.S
  12. arch/i386/kernel/init_task.c
  13. init/main.c
第三讲 内容提要
  1. 内存寻址1
  2. arch/i386/boot/setup.S
  3. arch/i386/boot/compressed/head.S
  4. arch/i386/kernel/head.S
  5. include/asm_i386/page.h
  6. include/asm_i386/pgtable.h
  7. include/asm_i386/pgtable_2level.h
  8. arch/i386/mm/init.c
第二讲 内容提要:
  1. 绪论(part2)
  2. 基于i386体系结构的Linux启动代码分析
  3. arch/i386/boot/bootsect.S
  4. arch/i386/boot/setup.S
  5. arch/i386/boot/compressed/head.S
  6. arch/i386/kernel/head.S
  7. arch/i386/vmlinux.lds
  8. documentation/i386/boot.txt
  9. Makefile
  10. arch/i386/Makefile
  11. arch/i386/boot/Makefile
  12. arch/i386/boot/compressed/Makefile
  13. asm/boot.h
  14. init/main.c
  • 阅读顶层目录下的readme
  • 阅读源代码中documentation/i386/boot.txt
  • 阅读顶层目录下的Makefile
  • 阅读i386的Makefile
  • 阅读i386/boot的Makefile
  • 阅读i386/boot/compressed的Makefile
  • 阅读i386的vmlinux.lds
  • 阅读Understanding the Linux Kernel(第二版)的附录1
  • 阅读i386/boot的bootsect.S
  • 阅读i386/boot的setup.S
  • 阅读i386/boot/compressed的head.S
  • 阅读i386/kernel的head.S
  • 找到init/main.c的start_kernel
  • 作业2
  • Project1
第一讲 内容提要:
  1. 课程介绍等
  2. 绪论(part1)
  3. 堆栈使用举例:test.c的源文件
  4. 堆栈使用举例:test的反汇编文件
  5. 观察pt_regs
  6. 观察do_IRQ
  7. 观察do_IRQ的调用方法

Edited by xlanchen@ustc.edu.cn
Understanding Linux Kernel, Autumn 2008
SuZhou, JiangSu, China