自学编程方法论:怎么学操作系统

简介:

原创声明

本文首发于微信公众号【程序员黄小斜】

本文作者:黄小斜

转载请务必在文章开头注明出处和作者。

本文思维导图

image

简介

学习编程,操作系统是你必须要掌握的基础知识,那么操作系统到底是什么呢?

这还用说么,操作系统不就是Windows、Linux、Mac、IOS、Android、IOS这类我们天天都在用的东西么?

此话不假,但是操作系统作为计算机科学里的一门基础学科,肯定不能这么接地气对不对,总的来点高大上的概念,震慑一下你们吧。

根据百度百科的介绍,操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

这个介绍足够高大上了吧,那么到底啥是操作系统呢,简单来说,操作系统就是管理计算机硬件和软件资源的一种软件,计算机里的硬盘、鼠标键盘、显示器等设备,都要由它来管理,你打开游戏、打开浏览器或者是看电影,也都要通过操作系统来执行。

没有了操作系统,电脑就失去了灵魂,只是一堆硬件而已。

为什么要学操作系统

了解了操作系统的基本概念之后,接下来我们再来看看,为什么我们要学习操作系统呢?

首先,当然是因为面试要考啦。

其次,无论你学习什么编程语言,和都避免不了和操作系统打交道,比如你学习Java,用到多线程技术,实际上操作系统才是负责管理进程和线程的,所以Java里的线程常常要和操作系统的线程或者进程一一对应。

此外,你会学习到内存分配的知识,比如c++里可以直接分配一段内存,此时实际上是调用操作系统提供的API进行内存分配。

操作系统不仅负责管理进程和线程的调度、内存的分配和管理,以及设备和IO的处理,还要负责管理文件系统和网络。

最重要的是,操作系统要负责把代码从硬盘加载到内存,再告诉cpu去读取内存代码,这是一切计算机运行的基础。

如果不懂操作系统,你在未来学习编程语言的高级特效,涉及到线程进程调度,内存分配,或者是学习Linux相关的知识时,都会一头雾水,所以,只有学会了操作系统,我么才能够更好地学习其他语言和技术。

如何学习操作系统

第一次接触

第一次接触操作系统同样是在我研究生的时候,当时自学计算机网络已经受到了惊吓(被大部头教科书劝退),于是学习操作系统时也更加的小心翼翼,当时我找了一本体量稍微小一点的《操作系统》教科书来学习。

用了大概一周左右的时间,我把这本书翻了一遍,隐隐约约还记得一些概念,进程和线程,进程调度算法、内存管理的分页和分段,页面置换算法,但其实当时压根没有理解这些东西,再过了一周之后也就忘得差不多了。

由于我当时找的多是Java方面的实习,很多公司对于操作系统的考察并不多,偶尔就问问线程和进程的区别,

于是对于操作系统的学习我当时并没有多大的重视,毕竟还有一堆Java的书要啃呢,先都啃到位再说。

入门学习阶段

就这样,我一直保留着只看过一本教科书的操作系统水平,全情投入到复习Java的伟业中了,然而当我学到Java并发编程和JVM的时候,总感觉有哪里不对劲:Java中的线程和操作系统的线程是什么关系,JVM的内存管理和操作系统的内存管理又是什么关系。

我抱着这个疑问学完了Java并发原理和JVM,当然也是一知半解的那种。事后证明,在没有操作系统基础的情况下,越往上层学,摔得越惨,勿用浮沙筑高台,说的便是这个道理,底子打好了,才能往上爬,否则都是浮云。

我在百度实习的那段时间里,再次意识到了操作系统这门课程的重要性,于是我找来了某乎强烈推荐的《深入理解计算机系统》这本史诗级大部头,这本书其实并不是一本纯粹的操作系统书籍,而是结合了计算机组成原理和操作系统两方面的内容,基本上把计算机内部工作的那些原理都给讲清楚了。

第一次看这本书的时候,我坚持了不到三天就放弃了,于是第二次看这本书,我在公司花了快一个月的时间才总算看得差不多。

在以前,我连什么是x64什么x86都搞不清楚,看完这本书之后,我好歹对CPU、内存、硬盘的工作方式,以及处理器的工作方式等内容有了一些理解,不得不说,这个时候我才算是对操作系统入了门。

强化学习阶段

光看书还不足以应对大厂的面试,大公司对操作系统的考察是很严格的,比如百度、腾讯和头条,对于操作系统的要求还是比较高的。

除了进程和线程区别这种最简单的面试题之外,还会有一些比较复杂的问题,比如”进程调度算法有哪些,讲一下FIFO和LRU算法“、”内存中的分页和分段有什么区别,分页里的页面置换算法有哪些,LRU是怎么实现的“、”产生死锁的必要条件,解决死锁的办法“、”线程间通信和进程间通信的方法都有哪些,具体怎么使用“

此类问题,也算是比较常见的操作系统面试题,但是要回答清楚的话还是需要一定功力的。

当时我应对这类问题,基本上就是通过刷面经和背答案,对于很多原理性的东西理解得并不深刻,但是也没有找到什么解决办法。

冲刺阶段

既然自己学了半天效果都不佳,那不如直接向大佬学习吧,于是我辗转各大博客,技术社区,技术公众号,看了很多关于操作系统的文章,发现确实有很多讲的不错的内容,看起来比自己死记硬背要靠谱的多了。

最早看的优质内容是《码农翻身》作者刘欣老师的文章,真的是相见恨晚,他有十几篇文章是专门讲解操作系统的,从CPU开始,讲到内存、硬盘、线程、进程,每篇文章都是用故事化的文字介绍这些计算机里最硬核的观念,可以说是四两拨千斤了。

看完这个系列的操作系统文章之后,我对于操作系统中的一些疑惑基本上也都消除了,再回去看一看那些面试题,觉得也没那么复杂了。

当然了,对于面试题我们还是要认真准备的,该翻的面经要翻,该搞懂的面试题一个也不能放过,有了之前的基础之后,再去搞懂这些面试题就简单很多了,至此,我对于操作系统的学习也算是告一段落。

推荐资源

书籍

《深入理解计算机系统》
《操作系统导论》

总结

关于操作系统的学习,我们就讲到这里了,如果还有什么疑问也可以到我公众号里找我探讨。

对了,你想问我文章里提到的书籍和视频去哪找?我已经给你准备好了

以上资源都可以免费领取,在我的公众号【程序员黄小斜】回复“操作系统”即可领取对应的资源。

image

相关文章
|
2月前
|
IDE 开发工具 Android开发
探索移动应用开发之旅:理解移动操作系统与编程实践
【9月更文挑战第36天】在数字化时代的浪潮中,移动应用成为连接用户与数字世界的桥梁。本文将深入探讨移动应用开发的精髓,从移动操作系统的工作原理到实际编程实践,旨在为读者提供一条清晰的道路,以理解和掌握移动应用的开发过程。我们将通过具体示例,揭示如何在不断变化的技术环境中保持应用的性能、安全性和用户体验。无论你是初学者还是有经验的开发者,本文都将为你打开一扇窗,让你一窥移动应用开发的精彩世界。
|
2月前
|
安全 测试技术 数据库
Python编程--sys模块及OS模块简单用例
Python编程--sys模块及OS模块简单用例
36 1
|
2月前
|
算法 调度 UED
探索操作系统中的多线程编程
【8月更文挑战第78天】在数字世界的复杂迷宫中,操作系统扮演着至关重要的角色。本文旨在揭开操作系统中多线程编程的神秘面纱,引导读者理解其概念、实现及应用。通过深入浅出的方式,我们将探讨如何在程序设计中运用多线程,以及这一技术如何优化软件性能和提升用户体验。文章将结合具体代码示例,展示多线程在实际应用中的魔力。无论你是编程新手还是资深开发者,这篇文章都将为你提供新的视角和思考路径。
|
4月前
|
安全 Linux 开发工具
探索Linux操作系统:从命令行到脚本编程
【8月更文挑战第31天】在这篇文章中,我们将一起潜入Linux操作系统的海洋,从最基础的命令行操作开始,逐步深入到编写实用的脚本。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和实用技能。我们将通过实际代码示例,展示如何在日常工作中利用Linux的强大功能来简化任务和提高效率。准备好了吗?让我们一起开启这段旅程,探索Linux的奥秘吧!
|
3月前
|
人工智能 物联网 5G
未来编程之钥:移动应用开发与操作系统的融合趋势
本文将探索移动应用开发和移动操作系统之间的紧密联系,并分析它们如何共同塑造了我们的数字生活。我们将从移动应用的开发环境谈起,探讨不同操作系统对开发者的影响,以及这些系统是如何促进创新和提升用户体验的。文章还将展望移动技术的未来,包括人工智能、物联网和5G网络如何进一步整合进移动应用生态中。
|
4月前
|
监控 Shell Linux
探索Linux操作系统下的Shell编程之魅力
【8月更文挑战第4天】本文旨在通过一系列精心设计的示例和分析,揭示在Linux环境下进行Shell编程的独特之处及其强大功能。我们将从基础语法入手,逐步深入到脚本的编写与执行,最终通过实际代码案例展现Shell编程在日常系统管理和自动化任务中的应用价值。文章不仅适合初学者构建扎实的基础,同时也为有一定经验的开发者提供进阶技巧。
53 11
|
4月前
|
存储 自然语言处理 搜索推荐
【颠覆你的数字生活!】探索OS Copilot——那款让你瞬间变身超级用户、编程如呼吸般自然、文件管理如同魔法般的神奇操作系统辅助神器!
【8月更文挑战第8天】OS Copilot是一款新兴的操作系统辅助软件,通过智能化手段简化电脑使用,从办公到开发全面赋能。安装简易,启动即有引导教程。其智能命令建议功能,可在命令行输入时提供后续选项及其说明,特别适合Linux用户。内置代码片段生成器,根据需求或代码框架自动生成代码,大幅提升开发效率。文件管理助手支持批量操作且可预览结果,降低误操作风险。任务自动化功能便于设置重复性工作流程,如定时备份。搜索功能强大,支持自然语言查询。尽管尚有改进空间,OS Copilot已是提升生产力的得力助手。
114 5
|
3月前
|
存储 自然语言处理 搜索推荐
探索OS Copilot——那款让你瞬间变身超级用户、编程如呼吸般自然、文件管理如同魔法般的神奇操作系统辅助神器!
【9月更文挑战第4天】“OS Copilot”是一款高效的操作系统辅助软件,通过智能化手段简化电脑使用,涵盖智能命令建议、代码片段生成、文件管理及任务自动化等强大功能。其简洁的界面与友好的用户体验使其成为提升生产力的理想选择,无论是专业人士还是普通用户都能从中受益。从安装到实际应用都非常流畅,能显著提升工作效率,是优化数字生活的得力助手。
47 0
|
4月前
|
网络协议 Linux Shell
探索Linux操作系统:从基础到高级编程
【8月更文挑战第31天】本文旨在为读者提供一条清晰的路径,从Linux操作系统的基础知识出发,逐步深入到高级编程技巧。我们将一起揭开Linux神秘的面纱,了解其内部工作原理,并通过实际代码示例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你带来新的视角和技能提升。
|
4月前
|
Linux
探索Linux操作系统:命令行与脚本编程基础
【8月更文挑战第31天】在这篇文章中,我们将一起踏上一段旅程,深入探索Linux操作系统的奥秘。通过学习命令行的使用和编写简单的脚本,你将能够更高效地与你的计算机进行交流。无论你是新手还是有经验的用户,本文都将为你打开一扇通往Linux世界的大门。准备好了吗?让我们开始吧!