日期:2025/04/02 13:17来源:未知 人气:53
本文作者:程序员鱼皮
免费编程学习 - 编程导航网:https://www.code-nav.cn
操作系统是管理计算机硬件与软件资源的计算机程序,是计算机系统中 最基本 的系统软件。
学习操作系统,一方面能帮助我们了解程序执行的原理、熟悉更多计算机的概念(比如内存、CPU、文件系统、磁盘);另一方面,操作系统中的结构设计、算法设计、解决问题的思路和方案都非常优秀,可以帮助我们开拓思路,从而在自己编写程序、设计算法时有了更多的选择和考量(比如死锁问题的处理)。
此外,操作系统也是 考研和面试的重点 ,如果是大学期间的小伙伴,在课堂上就要认真学习。
至少学过一门编程语言(否则学操作系统时一些代码演示可能看不懂)
急着找工作的同学可以先不学,等面试前直接看一些题目即可
基本概念
用户态
核心态
内核概念
操作系统的作用
操作系统的体系结构
处理器状态
系统调用
中断和异常
进程管理
死锁产生的条件
死锁预防与避免
死锁检测与恢复
信号量机制
生产者 - 消费者模型
读者 - 写者问题
哲学家进餐问题
先来先服务(FCFS)
短作业优先(SJF)
最短剩余时间优先(SRTN)
高响应比优先(HRRN)
时间片轮转
优先级调度
多级反馈队列
基本概念
进程 / 线程状态及转换
进程与线程
CPU 进程调度算法
进程同步与互斥
进程通讯机制
死锁
内存管理
连续内存分配
非连续内存分配
虚拟内存(非连续内存分配)
固定分区分配
动态分区分配
单一连续分配
内存碎片
分区
基本
基于快表
分段存储管理
分页存储管理
页表
二级页表
多级页表
反向页表
地址变换机构
段页式存储管理
最佳置换算法(OPT,理想置换算法)
先进先出置换算法(FIFO)
最近最久未使用置换算法(LRU)
时钟置换算法(CLOCK)
第二次机会算法
请求分段存储管理
请求分页存储管理
请求段页式存储管理
基本概念
局部性原理
实现
页面置换算法
页面分配策略
内存
内存管理
地址空间
基本概念
覆盖与交换
内存分配与回收
文件管理
文件系统
文件
目录
文件描述符
逻辑结构
物理结构
基本概念
文件操作
磁盘管理
先来先服务(FCFS)
最短寻找时间优先算法(SSTF)
扫描算法(SCAN,经典电梯调度算法)
循环扫描算法(CSCAN)
磁盘结构
磁盘调度算法
设备管理
I / O 设备
I / O 设备分类
基本概念
I / O 控制
缓冲区管理
操作系统具有极强的理论性,学习过程中难免会感觉枯燥,因此在初学时不建议强行去背诵一些知识,跟着视频过一遍、能够描述出操作系统大概涉及哪些知识点就好(结合思维导图去学习)。在面试 / 考研前再根据自己的时间去记忆题目就好。
在学习操作系统内的算法(比如 CPU 进程调度、内存页面置换、磁盘调度)时,要理解每个算法的概念、特点、优势与劣势、应用场景,因为我们在程序设计时极有可能应用这些算法来解决问题,比如 LRU 算法。
在学习过程中,可能会接触到部分算法和源码(比如生产者 - 消费者问题),时间允许的话可以试着自己实现一遍,加深理解。
本学习路线适用于所有从 0 开始学操作系统、了解操作系统核心概念、希望快速提升基础能力的同学。但如果要从事操作系统底层开发的话,这份路线还不够,需要深入理解 Linux 等操作系统的设计,并进行大量的编码练习。
该阶段可跳过,或者与之后的阶段同时进行
在任何时候,都可以在课外时间利用一些轻松精简的视频或书籍来帮助我们简单了解计算机、操作系统相关的概念。
推荐《计算机科学速成课》视频:https://www.bilibili.com/video/BV1EW411u7th,仅观看 P 1 - 10、P 18 - 20 即可。
这个阶段重在了解操作系统的基本概念,对其体系结构有个全面的认识,不必纠结于源码。
当然,能力很强的同学也可以跳过本阶段,直接去看下个阶段的视频教程。
操作系统的学习侧重于理论,主要分为六大部分:基本概念、进程管理、内存管理、文件管理、磁盘管理、设备管理。其中,最重要 的是进程管理和内存管理。这两部分和我们编写程序相关(比如并发编程、死锁、内存分配),因此也是面试时的高频考点。
建议跟着完整的视频教程学习,最好不要一开始就看复杂的书籍(比如《现代操作系统》、《深入理解计算机系统》等)。
对于操作系统这种经典理论,不建议看培训机构的课程(也基本没有),还是大学教授讲的课更专业严谨一些。
推荐《王道计算机考研 - 操作系统》视频课:https://www.bilibili.com/video/BV1YE411D7nH 。毕竟是考研课,这门课讲的非常清晰、受众广泛,哪怕不是计算机专业的同学(跨考)也能看懂。视频中老师整理了大量的思维导图,也能培养大家的体系化思维。
在学习某个知识点遇到问题时可以翻阅以下资料
《认识操作系统》操作系统知识点梳理 PDF:https://www.aliyundrive.com/s/C4MdAdKqtwK 提取码: 92ow
《图解系统》PDF:https://www.aliyundrive.com/s/uNiqrTvCdGG 提取码: 92ow
浙江大学课程攻略共享计划【操作系统】资料:https://github.com/QSCTech/zju-icicles/tree/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F(包含 PPT 课件、教材、习题解答、课程实验、自测题目、历年考卷等,对应视频在 B 站有,但是清晰度极低,不推荐)
这个阶段会结合源码来讲解分析操作系统的实现,并且通过一些实验加强了解。
对于时间紧、只是想找工作的同学,本阶段可直接跳过。
上个阶段推荐的课程侧重于基本概念(理论知识),不涉及源码。而这个阶段推荐的课程资源更细节、同时包含了一些实验帮助大家更好地深入理解操作系统。
比如以下几所名校的课程,选一门看即可(首推清华大学):
清华大学计算机操作系统原理:https://www.bilibili.com/video/BV1wq4y1M7qf(实验环境及源码:https://github.com/yusong-shen/mooc_os_lab)
2020 南京大学 “操作系统:设计与实现” (蒋炎岩):https://www.bilibili.com/video/BV1N741177F5(相关资料见该视频评论区)
操作系统(哈工大李治军老师)32讲(全)超清:https://www.bilibili.com/video/BV1d4411v7u7(实验:https://www.shiyanlou.com/courses/115)
如果想进一步巩固知识,可以在看视频的同时去阅读一些计算机经典书籍,比如:
《现代操作系统》:https://www.aliyundrive.com/s/5ogrRjoAtgA 提取码: 92ow
《深入理解计算机系统》:https://www.aliyundrive.com/s/FgwsaXj8unE 提取码: 92ow。对应课程视频:https://www.bilibili.com/video/av31289365
《操作系统:精髓与设计原理》:https://www.aliyundrive.com/s/3oX8Ws2TfBb 提取码: 92ow
看了上述的视频教程后,如果还想进一步学习,可以跟着教程来尝试自己动手制作一个简易的操作系统(MiniOS),帮助你真正理解操作系统的设计与实现。
国外教程推荐 MIT 6.828 和难度相对低一些的 MIT 6.S081,这是两门经典的实验课:
MIT 6.828:https://pdos.csail.mit.edu/6.828/2018/schedule.html
MIT 6.S081:https://pdos.csail.mit.edu/6.S081/2020/schedule.html,中文翻译版:https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/,B 站视频中英文字幕版:https://www.bilibili.com/video/BV19k4y1C7kA
当然也可以看一些书籍,比如:
这一章没什么好说的,找工作前强烈建议背诵一些面试题。当然,如果你能结合自己编程的实际经验去记忆和回答就更好了。
操作系统面试的重点主要是进程管理 + 内存管理,进程管理又是重点中的重点,以下经典面试题一定要搞懂(可以从下面的资源部分找到答案):
进程和线程的区别?
进程调度算法有哪些?
常见的进程通信方式?
有哪些进程同步的方法?
什么是死锁,什么情况下会出现死锁(必要条件)?怎么预防和处理?
介绍常见的内存页面置换算法
什么是中断?
什么是系统调用?
操作系统如何进行内存管理?
什么是虚拟内存?
什么是局部性原理?
什么是缓冲区溢出?
还有很多和 Linux 操作系统相关的题目,此处暂不列举。
操作系统相关面试题 60+:https://interviewguide.cn/#/Doc/Knowledge/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F
操作系统相关面试题 20+:https://snailclimb.gitee.io/javaguide/#/docs/cs-basics/operating-system/operating-system-basic-questions-01
操作系统相关面试题 20+:https://github.com/wolverinn/Waking-Up/blob/master/Operating%20Systems.md
加油小伙伴们!
Java前端程序员必做项目实战教程+毕设网站:https://www.code-nav.cn/course
程序员免费编程学习交流社区(自学必备):https://www.code-nav.cn/
程序员保姆级求职写简历指南(找工作必备):https://www.code-nav.cn/course/cv
程序员免费面试刷题网站工具(找工作必备):https://www.mianshiya.com/
最新Java零基础入门学习路线 + Java教程:https://www.code-nav.cn/post/1640584449888772098
最新Python零基础入门学习路线 + Python教程:https://www.code-nav.cn/post/1640586673306091521
最新前端零基础入门学习路线 + 前端教程:https://www.code-nav.cn/post/1640586014108303362
最新数据结构和算法零基础入门学习路线 + 算法教程:https://www.code-nav.cn/post/1640586867363954689
最新C++零基础入门学习路线、C++教程:https://www.code-nav.cn/post/1644279832026075138
最新数据库零基础入门学习路线 + 数据库教程:https://www.code-nav.cn/post/1641797333479903234)
最新Redis零基础入门学习路线 + Redis教程:https://www.code-nav.cn/post/1640589994284695553
最新计算机基础入门学习路线 + 计算机基础教程:https://www.code-nav.cn/post/1641035880439271426
最新小程序入门学习路线 + 小程序开发教程:https://www.code-nav.cn/post/1641366118197153793
最新SQL零基础入门学习路线 + SQL教程:http://sqlmother.yupi.icu
最新Linux零基础入门学习路线 + Linux教程:https://www.code-nav.cn/post/1640586295529324545
最新Git/GitHub零基础入门学习路线 + Git教程:https://www.code-nav.cn/post/1640588753362108417
最新操作系统零基础入门学习路线 + 操作系统教程:https://www.code-nav.cn/post/1640587909942099969
最新计算机网络零基础入门学习路线 + 计算机网络教程:https://www.code-nav.cn/post/1640588119619551233
最新设计模式零基础入门学习路线 + 设计模式教程:https://www.code-nav.cn/post/1640588392073150465
最新软件工程零基础入门学习路线 + 软件工程教:https://www.code-nav.cn/post/1640648711119892481