diff --git a/docs/CS学习规划.md b/docs/CS学习规划.md index 3f4c1712..c6db8894 100644 --- a/docs/CS学习规划.md +++ b/docs/CS学习规划.md @@ -28,7 +28,7 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是 [CMake](必学工具/CMake.md):一款功能比 GNU Make 更为强大的构建工具,建议掌握 GNU Make 之后再加以学习。 -[LaTex](必学工具/LaTeX.md):~~逼格提升~~ 论文排版工具。 +[LaTex](必学工具/LaTeX.md):逼格提升 论文排版工具。 [Docker](必学工具/Docker.md):一款相较于虚拟机更轻量级的软件打包与环境部署工具。 @@ -212,15 +212,17 @@ More contents under construction. ### 操作系统 -操作系统作为所有应用软件和底层硬件交互的掌舵者,了解它的内部原理和设计原则对于一个不满足于调包侠的程序员来说是很有帮助的。同时,国外操统课程的质量也是让上了多年网课的我也感到瞠目结舌。 +操作系统作为各类纷繁复杂的底层硬件虚拟化出一套规范优雅的抽象,给所有应用软件提供丰富的功能支持。了解操作系统的设计原则和内部原理对于一个不满足于当调包侠的程序员来说是大有裨益的。出于对操作系统的热爱,我上过国内外很多操作系统课程,它们各有侧重和优劣,大家可以根据兴趣各取所需。 -[MIT 6.S081: Operating System Engineering](操作系统/MIT6.S081.md),MIT 著名 PDOS 实验室出品,11 个 Project 会让你在一个 2 万多行的教学用迷你操作系统上增加各类功能模块。这门课也让我深刻认识到,做系统不是靠 PPT 念出来的,是得几万行代码一点点累起来的。 +[MIT 6.S081: Operating System Engineering](操作系统/MIT6.S081.md),MIT 著名 PDOS 实验室出品,11 个 Project 让你在一个实现非常优雅的类Unix操作系统xv6上增加各类功能模块。这门课也让我深刻认识到,做系统不是靠 PPT 念出来的,是得几万行代码一点点累起来的。 -[UCB CS162: Operating System](操作系统/CS162.md),伯克利的操作系统课,采用和 Stanford 同样的 Project —— 一个教学用操作系统 Pintos。我作为下学期北京大学操作系统实验班的助教,会尝试引入这个 Project,欢迎大家选课尝试,同时课程资源也会全部开源,目前[课程网站](https://pkuos.systems)正在建设当中。 +[UCB CS162: Operating System](操作系统/CS162.md),伯克利的操作系统课,采用和 Stanford 同样的 Project —— 一个教学用操作系统 Pintos。我作为北京大学2022年春季学期操作系统实验班的助教,引入并改善了这个 Project,课程资源也会全部开源,具体参见[课程网站](https://pkuos.systems)。 + +[NJU: Operating System Design and Implementation](操作系统/NJUOS.md),南京大学的蒋炎岩老师开设的操作系统课程。蒋老师以其独到的视角 ### 并行与分布式系统 -想必这两年各类 CS 讲座里最常听到的话就是“摩尔定律正在走向终结”,此话不假。同时如今深度学习的兴起导致对计算机算力与存储的要求都达到了前所未有的高度,因此并行和分布式系统已成为一项热门技术话题。 +想必这两年各类 CS 讲座里最常听到的话就是“摩尔定律正在走向终结”,此话不假,当单核能力达到上限时,多核乃至众核架构如日中天。硬件的变化带来的是上层编程逻辑的适应与改变,要想充分利用硬件性能,编写并行程序几乎成了程序员的必备技能。与此同时,深度学习的兴起对计算机算力与存储的要求都达到了前所未有的高度,大规模集群的部署和优化也成为热门技术话题。 #### 并行计算 @@ -240,7 +242,7 @@ More contents under construction. #### 实践 -掌握这些理论知识之后,还需要在实践中培养和锻炼这些“安全素养”。[CTF 夺旗赛](https://ctf-wiki.org/)是一项比较热门的系统安全比赛,赛题中会融会贯通地考察你对计算机各个领域知识的理解和运用。北大今年也成功举办了[第 0 届和第 1 届](https://geekgame.pku.edu.cn/),也鼓励大家后期踊跃参与,在实践中提高自己。下面列举一些我平时学习(摸鱼)用到的资源: +掌握这些理论知识之后,还需要在实践中培养和锻炼这些“黑客素养”。[CTF 夺旗赛](https://ctf-wiki.org/)是一项比较热门的系统安全比赛,赛题中会融会贯通地考察你对计算机各个领域知识的理解和运用。北大今年也成功举办了[第 0 届和第 1 届](https://geekgame.pku.edu.cn/),鼓励大家后期踊跃参与,在实践中提高自己。下面列举一些我平时学习(摸鱼)用到的资源: - [CTF-wiki](https://ctf-wiki.org/) - [CTF-101](https://ctf101.org/) @@ -250,15 +252,15 @@ More contents under construction. 计网著名教材《自顶向下方法》的配套学习资源 [Computer Networking: A Top-Down Approach](计算机网络/topdown.md)。 -没有什么能比自己写个 TCP/IP 协议栈更能加深自己对计算机网络的理解了,所以不妨试试 [Stanford CS144: Computer Network](计算机网络/CS144.md),8 个 Project 带你实现整个协议栈。 +没有什么能比自己写个 TCP/IP 协议栈更能加深对计算机网络的理解了,所以不妨试试 [Stanford CS144: Computer Network](计算机网络/CS144.md),8 个 Project 带你实现整个协议栈。 ### 数据库系统 -没有什么能比自己写个关系型数据库更能加深自己对数据库系统的理解了。 +没有什么能比自己写个关系型数据库更能加深对数据库系统的理解了。 #### C++版 -[CMU 15-445: Introduction to Database System](https://15445.courses.cs.cmu.edu/fall2020/) +[CMU 15-445: Introduction to Database System](数据库系统/15445.md) #### Java版 @@ -266,13 +268,16 @@ More contents under construction. ### 编译原理 -没有什么能比自己写个编译器更能加深自己对编译器的理解了。 +没有什么能比自己写个编译器更能加深对编译器的理解了。 [Stanford CS143: Compilers](编译原理/CS143.md) ### 计算机图形学 +[Stanford CS148](计算机图形学/CS148.md) [Games101](计算机图形学/GAMES101.md) +[Games103](计算机图形学/GAMES103.md) +[Games202](计算机图形学/GAMES202.md) ### Web开发 diff --git a/docs/操作系统/CS140e.md b/docs/操作系统/CS140e.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/操作系统/NJUOS.md b/docs/操作系统/NJUOS.md new file mode 100644 index 00000000..5c5dc57f --- /dev/null +++ b/docs/操作系统/NJUOS.md @@ -0,0 +1,30 @@ +# NJU OS: Operating System Design and Implementation + +## 课程简介 + +- 所属大学:南京大学 +- 先修要求:体系结构 + 扎实的 C 语言功底 +- 编程语言:C 语言 +- 课程难度:🌟🌟🌟🌟 +- 预计学时:150 小时 + +之前一直听说南大的蒋炎岩老师开设的操作系统课程讲得很好,旧闻不如一见,这学期有幸在 B 站观看了蒋老师的课程视频,确实收获良多。蒋老师作为非常年轻的老师,有着丰富的一线代码的经验,因此课程讲授有着满满的 Hacker 风格,课上经常“一言不合”就在命令行里开始写代码,很多重要知识点也都配有生动直白的代码示例。让我印象最为深刻的就是老师为了让学生更好地理解动态链接库的设计思想,甚至专门实现了一个迷你的可执行文件与一系列的二进制工具,让很多困扰我多年的问题都得到了解答。 + +这门课的讲授思路也非常有趣,蒋老师先从“程序就是状态机”这一视角入手,为“万恶之源”并发程序建立了状态机的转化模型,并在此基础上讲授了并发控制的常见手段以及并发bug的应对方法。接着蒋老师将操作系统看作一系列对象(进程/线程、地址空间、文件、设备等等)以及操作它们的 API (系统调用)并结合丰富的实际例子介绍了操作系统是如何利用这系列对象虚拟化硬件资源并给应用软件提供各类服务的。最后的可持久化部分,蒋老师从 1-bit 的存储介质讲起,一步步构建起各类存储设备,并通过设备驱动抽象出一组接口来方便地设计与实现文件系统。我之前虽然上过许多门操作系统的课程,但这种讲法确实独此一家,让我收获了很多独到的视角来看待系统软件。 + +这门课除了在理论知识的讲授部分很有新意外,注重实践也是蒋老师的一大特点。在课堂和编程作业里,蒋老师会有意无意地培养大家阅读源码、查阅手册的能力,这也是计算机从业者必备的技能。在完成第五个 MiniLab 期间,我第一次仔仔细细阅读了微软的 FAT 文件系统手册,收获了一次非常有价值的经历。 + +编程作业共由 5个 MiniLab 和 4个 OSLab 组成。美中不足的是作业的评测机是不对校外开放的,不过在邮件“骚扰”后蒋老师还是非常慷慨地让我成功蹭课。由于课余时间有限我只完成了 5个 MiniLab,总体体验非常棒。尤其是第二个协程实验让我印象最为深刻,在不到百行的小实验里深刻体验了上下文切换的美妙与“可怕”。另外其实几个 MiniLab 都能非常方便地进行本地测试,就算没有评测机也不影响自学,因此希望大家不要聚众“骚扰”老师以图蹭课。 + +最后再次感谢蒋老师设计并开放了这样一门非常棒的操作系统课程,这也是本书收录的第一门国内高校自主开设的计算机课程。正是有蒋老师这些年轻的新生代教师在繁重的 Tenure 考核之余的用爱发电,才让无数学子收获了难忘的本科生涯。也期待国内能有更多这样的良心好课,我也会第一时间收录进本书中让更多人受益。 + +## 课程资源 + +- 课程网站: +- 课程视频: +- 课程教材: +- 课程作业: + +## 资源汇总 + +按蒋老师的要求,我的作业实现没有开源。 diff --git a/docs/计算机图形学/CS148.md b/docs/计算机图形学/CS148.md index 2be01d66..3227b45e 100644 --- a/docs/计算机图形学/CS148.md +++ b/docs/计算机图形学/CS148.md @@ -21,4 +21,4 @@ - 课程网站:[CS148](https://web.stanford.edu/class/cs148/index.html) - 课程视频:无,直接看[lecture](https://web.stanford.edu/class/cs148/lectures.html)就可以了,也可以参考 GAMES101 视频 - 课程教材:Fundamentals of Computer Graphics -- 课程作业:[8 个 hw, 1 个 final project](https://web.stanford.edu/class/cs148/assignments.html) \ No newline at end of file +- 课程作业:[8 个 hw, 1 个 final project](https://web.stanford.edu/class/cs148/assignments.html) diff --git a/mkdocs.yml b/mkdocs.yml index 85aeacfc..e4f08c9c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -123,6 +123,7 @@ nav: - 操作系统: - "MIT 6.S081: Operating System Engineering": "操作系统/MIT6.S081.md" - "UCB CS162: Operating System": "操作系统/CS162.md" + - "NJU OS: Operating System Design and Implementation": "操作系统/NJUOS.md" - 并行与分布式系统: - "CMU 15-418/Stanford CS149: Parallel Computing": "并行与分布式系统/CS149.md" - "MIT 6.824: Distributed System": "并行与分布式系统/MIT6.824.md"