Skip to content

Commit

Permalink
[COURSE] Add HIT OS Course (#461)
Browse files Browse the repository at this point in the history
* [COURSE] Add HIT OS

* minor and update translation
  • Loading branch information
TonyWriting authored May 30, 2023
1 parent bb0dae6 commit 039a0f9
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 1 deletion.
2 changes: 2 additions & 0 deletions docs/CS学习规划.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,8 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是

[NJU: Operating System Design and Implementation](操作系统/NJUOS.md),南京大学的蒋炎岩老师开设的操作系统课程。蒋老师以其独到的系统视角结合丰富的代码示例将众多操作系统的概念讲得深入浅出,此外这门课的全部课程内容都是中文的,非常方便大家学习。

[HIT OS: Operating System](操作系统/HITOS.md),哈尔滨工业大学的李治军老师开设的中文操作系统课程。李老师的课程基于 Linux 0.11 源码,十分注重代码实践,并站在学生视角将操作系统的来龙去脉娓娓道来。

### 并行与分布式系统

想必这两年各类 CS 讲座里最常听到的话就是“摩尔定律正在走向终结”,此话不假,当单核能力达到上限时,多核乃至众核架构如日中天。硬件的变化带来的是上层编程逻辑的适应与改变,要想充分利用硬件性能,编写并行程序几乎成了程序员的必备技能。与此同时,深度学习的兴起对计算机算力与存储的要求都达到了前所未有的高度,大规模集群的部署和优化也成为热门技术话题。
Expand Down
29 changes: 29 additions & 0 deletions docs/操作系统/HITOS.en.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# HIT OS: Operating System

## Course Introduction

- University: Harbin Institute of Technology
- Prerequisites: C Language
- Programming Languages: C Language, Assembly
- Course Difficulty: 🌟🌟🌟🌟
- Estimated Study Hours: 100 hours+

If you search on Zhihu for questions like "how to self-study operating systems", "recommended open courses for operating systems", "computer courses you wish you had discovered earlier", etc., the operating systems course by Professor Li Zhijun of Harbin Institute of Technology (HIT) is likely to appear in the high-rated answers. It's a relatively well-known and popular Chinese computer course.

This course excels at gently guiding students from their perspective. For instance, it starts from "humbly asking, what is an operating system" to "lifting the lid of the operating system piano", deriving the concept of processes from intuitive CPU management, and introducing memory management by initially "letting the program enter memory".

The course emphasizes the combination of theory and practice. Operating systems are tangible, and Professor Li repeatedly stresses the importance of doing experiments. You won't fully grasp operating systems if you just watch videos and theorize. The course explains and conducts experiments based on actual Linux 0.11 source code (around 20,000 lines in total), with eight small labs and four projects.

Of course, this course also has minor imperfections. For example, Linux 0.11 is very early industrial code and not designed for teaching. Thus, there are some unavoidable obscure and difficult parts of the codebase in the projects, but they don't contribute much to the understanding of operating systems.

## Course Resources

- Course Website: <https://www.icourse163.org/course/HIT-1002531008>
- Course Videos: <https://www.bilibili.com/video/BV19r4y1b7Aw/?p=1>
- Course Textbook 1: [Complete Annotation of Linux Kernel](https://book.douban.com/subject/1231236//)
- Course Textbook 2: [Operating System Principles, Implementation, and Practice](https://book.douban.com/subject/30391722/)
- Course Assignments: <https://www.lanqiao.cn/courses/115>

## Complementary Resources

@NaChen95 has compiled the principles and implementations of the eight experimental assignments in this course at [NaChen95 / Linux0.11](https://github.com/NaChen95/Linux0.11).
29 changes: 29 additions & 0 deletions docs/操作系统/HITOS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# HIT OS: Operating System

## 课程简介

- 所属大学:哈尔滨工业大学
- 先修要求:C 语言
- 编程语言:C 语言、汇编
- 课程难度:🌟🌟🌟🌟
- 预计学时:100 小时+

如果你在知乎上搜索“操作系统如何自学”、“操作系统的公开课推荐”、“有哪些让你相见恨晚的计算机课程”等问题,哈工大李治军老师的操作系统课程大概率都会在某条高赞回答的推荐里。这是一门知名度较高、颇受欢迎的中文计算机课程。

这门课善于站在学生角度循循善诱。例如,课程从“弱弱地问,什么是操作系统”来“揭开操作系统钢琴的盖子”,从 CPU 的直观管理引出进程概念,从“那就首先让程序进入内存”引出内存管理。

这门课注重理论和实践相结合。操作系统是看得见摸得着的东西,李老师反复强调一定要做实验,如果只看视频纸上谈兵,是学不好操作系统的。课程基于实际的 Linux 0.11 源码(总代码量约两万行)进行讲解和实验,共有八个小实验,四个大实验。

当然,这门课也有一些瑕不掩瑜的地方。例如,Linux 0.11 是很早期工业界的代码,不是为了教学而设计的。因此在实验过程中会有一些避不开的晦涩难懂的原生代码,但它们对理解操作系统其实并没有太大帮助。

## 课程资源

- 课程网站:<https://www.icourse163.org/course/HIT-1002531008>
- 课程视频:<https://www.bilibili.com/video/BV19r4y1b7Aw/?p=1>
- 课程教材一:[《Linux 内核完全注释》](https://book.douban.com/subject/1231236//)
- 课程教材二:[《操作系统原理、实现与实践》](https://book.douban.com/subject/30391722/)
- 课程作业:<https://www.lanqiao.cn/courses/115>

## 资源汇总

@NaChen95 在学习这门课中的八个实验作业的原理分析和实现都汇总在 [NaChen95 / Linux0.11](https://github.com/NaChen95/Linux0.11) 中。
2 changes: 1 addition & 1 deletion docs/操作系统/NJUOS.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

之前一直听说南大的蒋炎岩老师开设的操作系统课程讲得很好,久闻不如一见,这学期有幸在 B 站观看了蒋老师的课程视频,确实收获良多。蒋老师作为非常年轻的老师,有着丰富的一线代码的经验,因此课程讲授有着满满的 Hacker 风格,课上经常“一言不合”就在命令行里开始写代码,很多重要知识点也都配有生动直白的代码示例。让我印象最为深刻的就是老师为了让学生更好地理解动态链接库的设计思想,甚至专门实现了一个迷你的可执行文件与一系列的二进制工具,让很多困扰我多年的问题都得到了解答。

这门课的讲授思路也非常有趣,蒋老师先从“程序就是状态机”这一视角入手,为“万恶之源”并发程序建立了状态机的转化模型,并在此基础上讲授了并发控制的常见手段以及并发bug的应对方法。接着蒋老师将操作系统看作一系列对象(进程/线程、地址空间、文件、设备等等)以及操作它们的 API (系统调用)并结合丰富的实际例子介绍了操作系统是如何利用这系列对象虚拟化硬件资源并给应用软件提供各类服务的。最后的可持久化部分,蒋老师从 1-bit 的存储介质讲起,一步步构建起各类存储设备,并通过设备驱动抽象出一组接口来方便地设计与实现文件系统。我之前虽然上过许多门操作系统的课程,但这种讲法确实独此一家,让我收获了很多独到的视角来看待系统软件。
这门课的讲授思路也非常有趣,蒋老师先从“程序就是状态机”这一视角入手,为“万恶之源”并发程序建立了状态机的转化模型,并在此基础上讲授了并发控制的常见手段以及并发 bug 的应对方法。接着蒋老师将操作系统看作一系列对象(进程/线程、地址空间、文件、设备等等)以及操作它们的 API (系统调用)并结合丰富的实际例子介绍了操作系统是如何利用这系列对象虚拟化硬件资源并给应用软件提供各类服务的。最后的可持久化部分,蒋老师从 1-bit 的存储介质讲起,一步步构建起各类存储设备,并通过设备驱动抽象出一组接口来方便地设计与实现文件系统。我之前虽然上过许多门操作系统的课程,但这种讲法确实独此一家,让我收获了很多独到的视角来看待系统软件。

这门课除了在理论知识的讲授部分很有新意外,注重实践也是蒋老师的一大特点。在课堂和编程作业里,蒋老师会有意无意地培养大家阅读源码、查阅手册的能力,这也是计算机从业者必备的技能。在完成第五个 MiniLab 期间,我第一次仔仔细细阅读了微软的 FAT 文件系统手册,收获了一次非常有价值的经历。

Expand Down
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,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"
- "HIT OS: Operating System": "操作系统/HITOS.md"
- 并行与分布式系统:
- "CMU 15-418/Stanford CS149: Parallel Computing": "并行与分布式系统/CS149.md"
- "MIT 6.824: Distributed System": "并行与分布式系统/MIT6.824.md"
Expand Down

0 comments on commit 039a0f9

Please sign in to comment.