浅谈如何学习操作系统[@初学者]

导语

操作系统是计算机类专业的必修专业基础课程,也是后续深入理解计算机系统的重要内容,是一定要认真去学习的。但想来可能有新人会觉得迷茫,这里依自己之愚见,浅谈初学者如何学习操作系统。

放心,我不会讲“What is Operating System”这种低端问题的,如果你感兴趣,可以看下去,有意见我们可以探讨;不感兴趣,请自行离开,不要无脑喷,麻烦尊重别人的劳动成果,谢谢。

认识与心态

从操作系统的实用性上讲,学过嵌入式那些的人会知道裸机什么的上面开发是很困难的,但操作系统改变了这一切。我们用的Windows啊,MacOS啊,iOS啊,Android啊,都算操作系统吧,其实我们很难离开操作系统。

另外,特别是对于刚接触计算机专业时间不久的本科生来说,学习操作系统对深入理解计算机系统是很重要的。众所周知的是现在呢,很多人一提程序设计就是什么Java啊,Python啊,仿佛程序设计本身就离不开语言本身;一提操作系统就是Linux,仿佛会用Linux敲命令行就是什么很了不起的程序员……其实熟练地切换成“码农”身份,完成需求实现的开发工作是必须具备的,但对底层原理的深入理解和深厚的计算机专业基础也是很重要的,也是很多大厂校招看中的。

对于“半路出家”,没有深厚基础的程序员来说,我认为也需要理解操作系统的概念和算法。
敲敲Linux命令行,读读Linux内核源码这种也是蛮不错的嘛,欣赏!

如果说你刚接触,我觉得不要害怕,特别是你学过什么数字逻辑设计啊计算机组成原理啊,只要你软件方面基础比较好,硬件哪怕只是凑合,那二者之间的操作系统离你是不远的,是可以接收的,不要害怕。

但是,学习不是一件轻松愉悦的事,可能会有一些困难,努力去克服它,认真的去理解,相信你一定能学好的。一定要具备一种积极向上、求知若渴的态度。

教材建议

  • 《深入理解计算机系统》
    在这里插入图片描述
  • 《操作系统概念》
    在这里插入图片描述 在这里插入图片描述
  • 《现代操作系统》
  • 《操作系统——内核与设计原理》
  • 《计算机操作系统》
    在这里插入图片描述

上面的教材,我看过前三本。
第一本的《深入理解计算机系统》,体系结构、组成原理、操作系统什么的都有,真的很好。
第二本的《操作系统概念》,我很喜欢,也是我之前主要看的,这书很Nice!
第三本的《现代操作系统》,看的也不仔细,书肯定是很好的。

如果你只是本科生,还想做题的话,照着什么“考研模式”,那就看看王道考研的吧:
在这里插入图片描述

还有这书也行:
在这里插入图片描述

不是推销,但王道考研的书还有天勤的计算机考研书还是很Nice的,不论是知识总结还是习题方面。

操作系统主要要学什么

其实操作系统这门课吧,你要是刚学,我也不想说什么“What is Operating System”,我真懒得写博客去重复一些最基本的东西,自己学就可以轻松理解,何必别人说呢?

操作系统的主角是“进程”,毕竟是“运行着的程序”嘛,本来就是跑程序的,自然是极重要的啦。
我们可以将操作系统的学习划分为四部分的内容:

  • 进程与CPU
  • 进程与进程
  • 进程与内存
  • 进程与文件

进程与CPU讲解进程调度啊,看CPU与进程是什么关系……
进程与进程讲解进程之间的关系,也有一些线程的知识,更是有重要的内容——进程同步、死锁……
进程与内存讲解内存分配和管理的策略,虚拟内存……
进程与文件讲解文件系统、磁盘管理、设备管理、网络通信……(一切皆文件)

进程与进程相对来说是最难的,真的挺难学……

信息安全方向的孩纸学习OS的时候可能会着重涉及OS的安全管理,这些内容一般的计算机专业涉及不深,感兴趣的自行了解……

这时我就想说,《Operating System Concepts》这书真的很适合学习OS,因为深入理解这些概念,才能更有助于我们打好坚实的基础。

需要什么基础吗

由于看过《Operating System Concepts》,所以个人建议是提前了解以下内容:

  • C/C++/Java……反正至少有一门编程语言要比较熟练。C/C++毕竟是能写OS的语言,会的话是很好的,指针是肯定要理解的。Java由于JVM的特殊性,其线程感觉起来,在JVM这个虚拟机上,就像是进程一样。Java封装了很多底层实现细节,但也提供了丰富的类库,有精力也可以同时理解《Java并发编程的艺术》、《Java多线程编程》这样多线程、并发编程的书。
  • Linu操作系统。Linux不是说会敲命令就行的,要注意一些细节,在学习的过程中能不断去借助Linux实践,真是极好的。这个不会也行,反正早晚要会的,不管你做什么。
  • 基础的数据结构与算法 → Here 。这是我总结的一些数据结构与算法的内容,这是要会的。OS大量运用诸如链表、循环队列、栈、哈希表、树等数据结构,理解了数据结构才能入木三分地理解某些OS的问题。数据结构真的简单,基础的数据结构很快就能掌握,就算你不会,稍加努力就可以掌握,一定要学学。
  • ……

学习可能遇到的困难

有一些算法不是那么容易理解,比如看着如同玄学的教材,银行家算法啊,各种的CPU调度算法啊,各种虚拟内存置换算法啊……也许会有些困扰初学者,但不要怂,肝就完事!!
在学算法的时候,要认真耐心的推演每一步流程,找一些合适的例题认真推演验证,其实真的很简单啦~~

再就是有遇到难以理解的知识也可以多去了解一些内容,这也正好是一个机会呢。实在不理解也可以暂时放下,相信慢慢就会理解,但不要畏难就好。

如何理解的更加深入&学的更好

我倒还真有点建议。

我觉得学习OS的话,很多的概念,难免有不理解的。如果是在学校学习就要多多请教,有些同学的看法和网上的博文你不能尽信啊,问真正明白的老师还是极好的。

同样是因为学习概念复杂繁多,我们可以多多涉猎。比如对原子性操作理解不深,可以看看SQL的事务那个ACID是吧;比如对TLB理解不深,可以看看Cache、Redis是吧……
很多东西你觉得没有联系是因为你没有领会那种思想,领会了以后就会慢慢触类旁通啦,一切都会变好的。

再就是高效的努力学习,我学OS的时候也没有花费多大的精力,但能保持高效的努力和高涨的热情,就把枯燥的内容利用课堂时间轻松掌握了,并取得了很好的成绩。

提供一些操作系统练习题

提供一些操作系统实验题

操作系统知识的一些探讨

一起加油吧!!!

不要畏惧,勇往直前,你一定可以学得很好哒~~

如果有帮助,不妨……点个赞或者点个关注再溜?
在这里插入图片描述在这里插入图片描述在这里插入图片描述

好啦好啦,溜啦!!!
在这里插入图片描述

发布了380 篇原创文章 · 获赞 639 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104088050