CS140: Operating Systems and Systems Programming
Description
- 操作系统: 死锁的条件与算法,进程的状态,进程和线程的区别,内存换页算法,同步与互斥等,参考书籍:现代操作系统
Prerequisite
- Principles of Computer Systems
Readings
- https://web.stanford.edu/~ouster/cgi-bin/cs140-spring20/lectures.php
- Operating Systems: Principles and Practice (2nd Edition), by Thomas Anderson and Michael Dahlin.
Knowledge points
- OS 四大模块的理论知识: 进程与线程管理、内存管理、IO与文件系统、设备管理
- 了解 Linux 内核部分实现原理,如内存管理、进程管理、虚拟文件系统等
- 操作系统由哪些构成
- 进程的状态、切换、调度
- 进程间通信方式(共享内存、管道、消息)
- 进程和线程的区别
- 线程的实现方式(一对一、多对一等)
- 互斥与同步(信号量、管程、锁)
- 死锁检测与避免
- 并发经典的问题:读者写者、哲学家就餐问题
- 为什么需要虚拟内存,MMU 具体如何做地址转换的
- 内存为什么分段、分页
- 页面置换算法
- 文件系统是如何组织的
- 虚拟文件系统(VFS)是如何抽象的
- 对于进程、线程这块你还可以把 fork、vfork、clone 、pthread_create 这些模块关系彻底搞清楚
Systems Programming
-
进程间通信方式:信号量、管道、共享内存、socket 等
-
多线程编程:互斥锁、条件变量、读写锁、线程池等
-
五大 IO 模型:同步、异步、阻塞、非阻塞、信号驱动
-
高性能 IO 两种模式:Reactor 和 Proactor( 但是 Linux 下由于缺少异步 IO 支持,基本没有 Proactor
-
IO 复用机制:epoll、select、poll(破解 C10K 问题的利器)
-
《Unix网络编程》
-
《Unix环境高级编程》
-
《Linux高性能服务器编程》
-
《Linux多线程服务器端编程》
-
HTTP 服务器、网络库、RPC序列化、网络传输、服务发现、grpc、brpc
-
类似QQ的网络聊天室,简单版的就可以直接在局域网内实现群聊、单聊等。
-
如何不通过服务器中转消息实现 P2P 聊天,类似 QQ,这里会涉及到 UDP 打洞、NAT 转换等知识
-
比如 UNP 和 APUE 中 IO、文件、进程控制、信号、线程、线程控制、基本套接字编程 这些是比较重要的模块,其它边角知识,可以用到再去查。