学习完操作系统后感

学习完操作系统后感

作为一名不懂基础,直接游荡在编程行业多年的老菜鸡,也深知基础不牢地动山摇的道理,可能再回过头反哺基础会有一些不一样的感觉吧
所以前段时间花了大约2周的时间,恶补了一下操作系统相关的知识

进程、线程

首先是对于 进程,线程的理解,再看完操作系统后,总算是明白了 用户态和内核态到底是个什么东东,也明白了大量的线程切换为什么会慢,也算是理解了,面试时那些回答死套路的答案为什么这么讲

同时在也理解了线程之间共享数据的底层实现方案

在进程方面,进程之间的数据同步包括什么缓冲、管道什么的,一眼就很熟悉-这不就是各种中间件Kafka mq 的老祖宗嘛,刚开始接触kafka 时,感觉哇中间件异步这玩意是谁研究的捏,其实这玩意在几十年前就有了原型

再到信号量、管程,曾经看过一个大佬优化过的美团leaf 源码,用的就是信号量代替的定时线程池,这个看起来很亲切

内存管理

后面内存、外存、交换区、高速缓存、寄存器等,也是深度理解了使用原理,如果不懂的可以带入redis 和 本地cache 做对比,一步比一步快,一步比一步成本高,还比较好理解

在内存寻址上 也对于位运算有了深刻理解,也见识到了运用场景,比如 p = a >> 12; w = a & (4096 - 1)等,
同时也理解了当时见过的一段时间轮算法中的源码

int count = 0, base = 2 << 5;
for(;;){
   int index = count++ & base - 1;
}

在内存结构上什么 页表、段表、段页表的设计也很哇塞,后续没准就能运用到实际开发中数据结构的设计上

在学到内存的页表对应物理内存页4k是,忽然联想到mysql 的b+tree, 虽然有些牵强,但也感觉看到了mysql 的影子,甚至一度怀疑这玩意也是mysql 索引存储结构的老祖宗

文件系统

至于文件系统,感触颇深的则是它对于文件管理存储的树形结构和属性表概念

IO管理

IO设备的话,终于理解了为什么在java 也好 mysql 也罢,io的开销为啥子慎之又慎,各种 通道表 设备控制表 设备表等等 都在去抢状态,虽然引入了缓冲池等技术优并行一些操作,但设备终究还是那几个抢不到的还就得等着
同时在io 缓存这一块,看似和Mq一样,其实使用的是它异步可并行的概念,同样保护的不是io 设备,而是解决cpu和io设备执行力不对等的问题,也算是使用异步向上保护

结语

总之,学完操作系统的收益是非常巨大的,现在技术迭代再快,也万变不离其宗。操作系统、组成原理、网络原理、数据结构和算法是永远的神,加油吧

本文由 在码圈 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!
原文链接:https://www.bedebug.com/archives/learn-os-review
最后更新于:2022-09-15 12:40:45

请博主喝咖啡 ☕.