Learning-Operating-Systems
Learning-Operating-Systems copied to clipboard
UCB《Operating Systems and Systems Programming》课程:https://cs162.eecs.berkeley.edu
Operating Systems and Systems Programming
这个课程目的就是讲授操作系统的核心概念和设计,以及如何将它应用到其他高级系统中。其中涉及的主题包括操作系统的概念,系统编程,网络,分布式系统,存储系统,多进程(进程、进程间通信和同步),内存分配(分段、分页),资源分配和调度,文件系统,基本网络编程(sockets,分层,API,可靠性),事务,安全和隐私。
我们将会使用Pintos来讲授操作系统的三个项目。
作业(个人任务)和项目(分组任务)将会提交到GitHub中。
#课程列表 具体的课程安排可以从这里查看,这里整理好所有的资料(讲义、扩展阅读、作业等)
- Intro to CS162 [ppt]
- Introduction to the Process [ppt]
- Processes, Fork, I/O, Files[ppt]
- I/O Continued, Sockets, Networking[ppt]
- Concurrency: Processes and Threads[ppt]
- Cooperating threads, Synchronization[ppt]
- Mutual Exclusion, Lock Implementation[ppt]
- Semaphores, Condition Variables, Readers/Writers[ppt]
- Synchronization (Finish), Scheduling[ppt]
- Advanced Scheduling, Deadlock[ppt]
- Deadlock, Address Translation, Virtual Memory[ppt]
- Address Translation, Caching[ppt]
- Address Translation, Caching(Continue) [ppt]
- Caching (finished), Demand Paging[ppt]
- Input/Output, I/O Layers, Storage DevicesI/O Performance and Low-level Optimization[ppt]
- Input/Output (con't)[ppt]
- Performance, Storage Devices, Queueing theory[ppt]
- File SystemsDesign: Concept to FAT, Advanced File Systems: FFS, NTFS, COW[ppt]
- FileSystems (finished), MMAP[ppt]
- Reliability, Transactions, Distributed systems[ppt]
- Distributed Systems (Con't), Distributed Decision Making, Layering[ppt]
- Distributed Systems (Con't): TCP/IP, Distributed Decision Making, NFS, AFS file systems[ppt]
- Distributed Storage, NFS, AFS, VFS, Key Value Stores, Consistency[ppt]
- Security, Cloud Services & Cloud Infrastructure[ppt]
####视频链接:UC Berkeley Computer Science 162 Fall 2015
#学习笔记
#基本工具 ###vagrant & virtual box ###vim 作为一个程序员,一个常用的工具就是编辑器,我选择一个能极大提高自己开发效率的编辑器vim。这里有一系列的视频教程,也可以参考我的Vim配置、插件和使用技巧这篇文章。
###make
编写完程序之后,下一步就是编译程序。一般来说,如果程序规模不大的话,在终端中使用简单命令行编译即可。但随着程序规模越来越大,就需要自动化编译和构建工具make,make通过读取Makefile
的编译规则来编译程序和函数库。具体用法可以参考这篇文章A tutorial by example。更深入的用法可以参考GNU make
###gdb 当你运行程序后,发现与自己预想的结果不对,这时你需要调试工具gdb。gdb是GNU Project开发的调试器,它能够在程序中设置断点,启动程序后运行到断点之后停止运行,然后查看各个变量的值。要想学习如何使用,可以参考陈皓的用GDB调试程序系列文章,想深入学习的话,可以查阅官方的Debugging with gdb
###valgrind valgrind是一个用于内存调试、内存泄露检查以及性能分析工具。它的子工具Memcheck能够检查到以下内存问题:
- 使用未初始化的内存
- 使用已经释放了的内存
- 使用超过malloc分配的内存空间
- 对堆栈的非法访问
- 申请的空间是否有释放
- 不匹配使用malloc/free/new/delete等方法来申请和释放内存
- 重复free
官方提供一个入门教程The Valgrind Quick Start Guide和深入学习的Valgrind User Manual参考手册。
###git git是一个开源分布式版本控制工具,它能够跟踪所有提交数据的历史记录,方便你回溯到任何历史版本来查看和修改。不仅如此,它还能够让不同的团队成员协同完成一项任务。关于如何使用git官方已经有详细讲解,如果想了解git的工作流以及多个人如何协作,可以参考Git版本控制与工作流
#项目