Chrunge / Learning-Operating-Systems

UCB《Operating Systems and Systems Programming》课程:https://cs162.eecs.berkeley.edu

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Operating Systems and Systems Programming

这个课程目的就是讲授操作系统的核心概念和设计,以及如何将它应用到其他高级系统中。其中涉及的主题包括操作系统的概念,系统编程,网络,分布式系统,存储系统,多进程(进程、进程间通信和同步),内存分配(分段、分页),资源分配和调度,文件系统,基本网络编程(sockets,分层,API,可靠性),事务,安全和隐私。

我们将会使用Pintos来讲授操作系统的三个项目。

作业(个人任务)和项目(分组任务)将会提交到GitHub中。

#课程列表 具体的课程安排可以从这里查看,这里整理好所有的资料(讲义、扩展阅读、作业等)

  1. Intro to CS162 [ppt]
  2. Introduction to the Process [ppt]
  3. Processes, Fork, I/O, Files[ppt]
  4. I/O Continued, Sockets, Networking[ppt]
  5. Concurrency: Processes and Threads[ppt]
  6. Cooperating threads, Synchronization[ppt]
  7. Mutual Exclusion, Lock Implementation[ppt]
  8. Semaphores, Condition Variables, Readers/Writers[ppt]
  9. Synchronization (Finish), Scheduling[ppt]
  10. Advanced Scheduling, Deadlock[ppt]
  11. Deadlock, Address Translation, Virtual Memory[ppt]
  12. Address Translation, Caching[ppt]
  13. Address Translation, Caching(Continue) [ppt]
  14. Caching (finished), Demand Paging[ppt]
  15. Input/Output, I/O Layers, Storage DevicesI/O Performance and Low-level Optimization[ppt]
  16. Input/Output (con't)[ppt]
  17. Performance, Storage Devices, Queueing theory[ppt]
  18. File SystemsDesign: Concept to FAT, Advanced File Systems: FFS, NTFS, COW[ppt]
  19. FileSystems (finished), MMAP[ppt]
  20. Reliability, Transactions, Distributed systems[ppt]
  21. Distributed Systems (Con't), Distributed Decision Making, Layering[ppt]
  22. Distributed Systems (Con't): TCP/IP, Distributed Decision Making, NFS, AFS file systems[ppt]
  23. Distributed Storage, NFS, AFS, VFS, Key Value Stores, Consistency[ppt]
  24. Security, Cloud Services & Cloud Infrastructure[ppt]

####视频链接:UC Berkeley Computer Science 162 Fall 2015

#学习笔记

  1. 什么是操作系统?
  2. 进程简介
  3. 进程,Fork,I/O,文件
  4. 高级I/O,Sockets,Networking

#基本工具 ###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版本控制与工作流

#项目

About

UCB《Operating Systems and Systems Programming》课程:https://cs162.eecs.berkeley.edu

License:MIT License