-
Notifications
You must be signed in to change notification settings - Fork 350
OS2013
mengning edited this page Aug 27, 2013
·
51 revisions
什么是操作系统?计算机是如何工作的?操作系统又是如何在计算机上运行的?从这些基本的问题出发,我们一起探索操作系统的奥秘,并动手编写一个自己的操作系统内核,在这个过程中我们需要学习使用C语言、简单的汇编和嵌入式汇编、Linux操作系统的基本接口等。当然还要庖丁解牛式地一一考察学习进程、进程调度、内存管理、文件系统、I/O设备等操作系统的主要构成和相关理论。
- 记忆和理解操作系统的一些基本概念和术语,能使用操作系统提供的接口编写简单的程序;
- 比如:函数调用堆栈、中断、进程与线程、竞争条件、临界区、变量锁、信号量、互斥锁、多队列动态优先级调度、可抢占/不可抢占、地址空间、线性地址、虚拟内存、交换、分页、分段、TLB及缓存技术、相对路径、File System Layout
- 基本的X86汇编指令、Linux操作系统接口fork\exec,sigaction,semget\semctl\semop,pthread,File Operations
- 能准确理解操作系统工作的核心机制,能编写或读懂一个简化的操作系统内核;
- 中断信号发生后在堆栈上产生的效果、进程切换的方法、时间片轮转RR调度算法
- 在软件系统设计中常用的一些基本算法能够透彻理解并能比较其优劣和用途;
- 比如:忙等待互斥的几种算法、生产者消费者问题的几种算法、空间(内存和磁盘)管理(索引方法、空间使用效率、查询速度、空闲块管理等)
Chapter 1 Introduction
- What Is An Operating System
- The history of Operating System
- Computer Hardware Review
- How the Computer Works -1 存储程序计算机和X86汇编
- How the Computer Works -2 函数调用框架、嵌入式汇编和中断机制
- Important concepts of Operating System
Chapter 2 Processes and Threads
- Process
- Threads
- Race condition/synchronization
- Mutual exclusion,Critical region
- Mutual Exclusion with busy waiting
- Semaphores & Mutexes
- Classic IPC Problems
- Process scheduling
- Preemptive/Nonpreemptive
- Scheduling Algorithm Goals
- Round-Robin Scheduling
- Multiple Queues and Dynamic Priority scheduling
Chapter 3 Memory Management
- memory hierarchy,memory abstraction,address space
- swapping,virtual memory
- paging, page tables, page replacement algorithm
- TLB,multilevel page tables,inverted page tables
- segmentation,linear address,segmentation with paging
Chapter 4 File Systems
- File,File attributes,File Operations
- Directory,Hierarchical Directory Systems,Relative path
- File System Layout,Contiguous Allocation,Linked List Allocation Using a Table in Memory
- i-nodes,Implementing Directories,The UNIX V7 File System
Chapter 5 Input/Output
- Memory-mapped I/O & I/O Ports space
- Direct Memory Access (DMA) & Interrupts
- Programmed I/O & Interrupt-Driven I/O & I/O Using DMA
- I/O Software Layers
- 实验一:Linux操作系统的安装和使用
- Vim进阶简明手册 , 视频: Vim高手是如何炼成的!!!
- 现场检查方法:比如在当前目录下查找以a开头的所有文件,用tar将某个目录打包解包、从某几个文件中查找指定字符串。
- 实验二:理解函数调用堆栈完成一个简单的嵌入式汇编程序实现函数调用和返回
- 完成顺序执行的嵌入式汇编代码实现函数调用堆栈变化,范例代码example_c.c example_asm.c
- 现场检查方法:指定某行汇编代码给出当前堆栈内容;正常函数调用中的call和ret的功能在我们的汇编代码中是怎么实现?
- 实验三:编程实现一个简单的Shell程序
- 理解进程创建、程序加载过程、进程间通信等相关原理,实验三参考资料
- 现场检查方法:运行程序,查看效果;子进程与父进程为什么在if else语句下能同时执行,执行顺序是否一定,与什么有关?解释管道工作流程。
- 实验四:编写my_realloc函数模拟realloc
- 理解动态内存分配背后相关操作系统原理。
- 注意: my_realloc函数的参数可能与realloc不同,请根据需要自己设计my_realloc的参数
- 现场检查:demo,提问my_realloc函数与系统realloc函数的背后工作机制的相关问题
- 实验五:模拟cp命令的功能实现mycp程序
- 将一个文件复制到目标文件(或目录)中,命令格式:mycp 源文件名 目标文件名(或目录)
- 将一个目录下的所有文件复制到目标目录中,命令格式:mycp 源目录 目标目录
- 线程检查方法:Demo & 代码分析
- 实验六:哲学家就餐问题引起的死锁及多线程同步方法解决哲学家就餐问题
- 实验资料
- 现场检查:1. 运行示例程序,仿真出死锁现象。2. 运行演示解决死锁的算法,并解释相关代码。
- 实验七:I/O设备驱动
- 实验资料
- 读懂源程序,了解驱动程序编写的框架
- 学会加载和卸载驱动
- 编写用户态测试程序,调用用户态下的open、close、read、write、ioctl函数,验证自己对程序的理解是否正确
- 现场检查:加载驱动,运行用户态测试程序,解释运行结果与驱动源代码之间的关系
- 课程项目:mykernel release 1 release 2
- 透彻理解release 1 & 2的进程切换方法、进程调度时机、中断处理程序的函数调用堆栈等
- 现场检查:运行演示Demo + Q&A
- 额外加分:为mykernel提供新功能(操作系统原理任一知识点)并通过github提交给我代码