如今连Linux都搞不懂,当初我要是这么学习操做系统就行了!

原创声明

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

本文做者:黄小斜程序员

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

本文思惟导图

在这里插入图片描述

简介

学习编程,操做系统是你必需要掌握的基础知识,那么操做系统究竟是什么呢?算法

这还用说么,操做系统不就是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

相关文章
相关标签/搜索