欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 小白如何学习操作系统?附零基础入门学习路线 + 操作系统教程

小白如何学习操作系统?附零基础入门学习路线 + 操作系统教程

2024/10/24 21:28:29 来源:https://blog.csdn.net/weixin_41701290/article/details/140792163  浏览:    关键词:小白如何学习操作系统?附零基础入门学习路线 + 操作系统教程

本文作者:程序员鱼皮

免费编程学习 - 编程导航网:https://www.code-nav.cn

介绍

操作系统是管理计算机硬件与软件资源的计算机程序,是计算机系统中 最基本 的系统软件。

学习操作系统,一方面能帮助我们了解程序执行的原理、熟悉更多计算机的概念(比如内存、CPU、文件系统、磁盘);另一方面,操作系统中的结构设计、算法设计、解决问题的思路和方案都非常优秀,可以帮助我们开拓思路,从而在自己编写程序、设计算法时有了更多的选择和考量(比如死锁问题的处理)。

此外,操作系统也是 考研和面试的重点 ,如果是大学期间的小伙伴,在课堂上就要认真学习。

学习条件

  1. 至少学过一门编程语言(否则学操作系统时一些代码演示可能看不懂)
  2. 急着找工作的同学可以先不学,等面试前直接看一些题目即可

大纲

知识

  1. 基本概念

    • 操作系统的作用
    • 操作系统的体系结构
      • 内核概念
    • 处理器状态
      • 用户态
      • 核心态
    • 系统调用
    • 中断和异常
  2. 进程管理

    • 进程与线程

      • 基本概念
      • 进程 / 线程状态及转换
    • CPU 进程调度算法

      • 先来先服务(FCFS)
      • 短作业优先(SJF)
      • 最短剩余时间优先(SRTN)
      • 高响应比优先(HRRN)
      • 时间片轮转
      • 优先级调度
      • 多级反馈队列
    • 进程同步与互斥

      • 信号量机制

      • 生产者 - 消费者模型

      • 读者 - 写者问题

      • 哲学家进餐问题

    • 进程通讯机制

    • 死锁

      • 死锁产生的条件
      • 死锁预防与避免
      • 死锁检测与恢复
  3. 内存管理

    • 基本概念
      • 内存
      • 内存管理
      • 地址空间
    • 覆盖与交换
    • 内存分配与回收
      • 连续内存分配
        • 单一连续分配
        • 内存碎片
        • 分区
          • 固定分区分配
          • 动态分区分配
      • 非连续内存分配
        • 分段存储管理
        • 分页存储管理
        • 页表
        • 二级页表
        • 多级页表
        • 反向页表
        • 地址变换机构
          • 基本
          • 基于快表
        • 段页式存储管理
      • 虚拟内存(非连续内存分配)
        • 基本概念
        • 局部性原理
        • 实现
          • 请求分段存储管理
          • 请求分页存储管理
          • 请求段页式存储管理
        • 页面置换算法
          • 最佳置换算法(OPT,理想置换算法)
          • 先进先出置换算法(FIFO)
          • 最近最久未使用置换算法(LRU)
          • 时钟置换算法(CLOCK)
          • 第二次机会算法
        • 页面分配策略
  4. 文件管理

    • 基本概念
      • 文件系统
      • 文件
        • 逻辑结构
        • 物理结构
      • 目录
      • 文件描述符
    • 文件操作
  5. 磁盘管理

    • 磁盘结构
    • 磁盘调度算法
      • 先来先服务(FCFS)
      • 最短寻找时间优先算法(SSTF)
      • 扫描算法(SCAN,经典电梯调度算法)
      • 循环扫描算法(CSCAN)
  6. 设备管理

    • 基本概念
      • I / O 设备
      • I / O 设备分类
    • I / O 控制
    • 缓冲区管理

学习建议

  1. 操作系统具有极强的理论性,学习过程中难免会感觉枯燥,因此在初学时不建议强行去背诵一些知识,跟着视频过一遍、能够描述出操作系统大概涉及哪些知识点就好(结合思维导图去学习)。在面试 / 考研前再根据自己的时间去记忆题目就好。
  2. 在学习操作系统内的算法(比如 CPU 进程调度、内存页面置换、磁盘调度)时,要理解每个算法的概念、特点、优势与劣势、应用场景,因为我们在程序设计时极有可能应用这些算法来解决问题,比如 LRU 算法。
  3. 在学习过程中,可能会接触到部分算法和源码(比如生产者 - 消费者问题),时间允许的话可以试着自己实现一遍,加深理解。

学习路线

本学习路线适用于所有从 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

当然也可以看一些书籍,比如:

  • 《30天自制操作系统》:https://www.aliyundrive.com/s/TLxgHbEgtbR 提取码: 92ow,源码中文版:https://github.com/yourtion/30dayMakeOS

三、备战面试

这一章没什么好说的,找工作前强烈建议背诵一些面试题。当然,如果你能结合自己编程的实际经验去记忆和回答就更好了。

操作系统面试的重点主要是进程管理 + 内存管理,进程管理又是重点中的重点,以下经典面试题一定要搞懂(可以从下面的资源部分找到答案):

  1. 进程和线程的区别?
  2. 进程调度算法有哪些?
  3. 常见的进程通信方式?
  4. 有哪些进程同步的方法?
  5. 什么是死锁,什么情况下会出现死锁(必要条件)?怎么预防和处理?
  6. 介绍常见的内存页面置换算法
  7. 什么是中断?
  8. 什么是系统调用?
  9. 操作系统如何进行内存管理?
  10. 什么是虚拟内存?
  11. 什么是局部性原理?
  12. 什么是缓冲区溢出?

还有很多和 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
  • 操作系统知识总结:http://www.cyc2018.xyz/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%20-%20%E7%9B%AE%E5%BD%95.html
  • 89 个操作系统核心概念:https://mp.weixin.qq.com/s?__biz=MzkwMDE1MzkwNQ==&mid=2247495992&idx=1&sn=46d196debe727f1b43c08d692f11d08f&source=41#wechat_redirect

加油小伙伴们!

更多编程学习资源

  • Java前端程序员必做项目实战教程+毕设网站
  • 程序员免费编程学习交流社区(自学必备)
  • 程序员保姆级求职写简历指南(找工作必备)
  • 程序员免费面试刷题网站工具(找工作必备)
  • 最新Java零基础入门学习路线 + Java教程
  • 最新Python零基础入门学习路线 + Python教程
  • 最新前端零基础入门学习路线 + 前端教程
  • 最新数据结构和算法零基础入门学习路线 + 算法教程
  • 最新C++零基础入门学习路线、C++教程
  • 最新数据库零基础入门学习路线 + 数据库教程
  • 最新Redis零基础入门学习路线 + Redis教程
  • 最新计算机基础入门学习路线 + 计算机基础教程
  • 最新小程序入门学习路线 + 小程序开发教程
  • 最新SQL零基础入门学习路线 + SQL教程
  • 最新Linux零基础入门学习路线 + Linux教程
  • 最新Git/GitHub零基础入门学习路线 + Git教程
  • 最新操作系统零基础入门学习路线 + 操作系统教程
  • 最新计算机网络零基础入门学习路线 + 计算机网络教程
  • 最新设计模式零基础入门学习路线 + 设计模式教程
  • 最新软件工程零基础入门学习路线 + 软件工程教程

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com