最近在看linux内核,觉得还是写点blog比较好,就当锻炼一下自己的思维,也是算是总结。废话少说,言归正传,来点干货!
os的理解:
1、从计算机的角度或是说从系统角度,或是说从电脑主板的角度来讲,os就是一个管家,来管理主板上的硬件设备以及软件资源。所谓的硬件资源主要是指cpu、内存、硬盘这些因建筑资源,这些硬件资源都是实实在在的可见设备,而软件资源主要是指不同的应用程序之间如何分配和共享这些硬件资源。每个应用程序都需要使用cpu和内存这些硬件资源,但是同一时刻仅仅有一个能够执行,os需要负责公平分配不同应用程序不同的时间片,以防止应用程序对于硬件资源的独占,以达到对于每个应用程序都是公平的原则。
2、从用户的角度。os提供一种系统硬件资源调用的接口。这个观点对于程序开发人员来说比较好理解。比如现在想在屏幕上输出hello world,那么在linux里面仅仅需要调用printf,就可以万事大吉了,太easy了。但是对于os来说,他需要做的事情太多了。首先需要创建申请调用显示器设备,同时需要创建一个terminal的终端窗口,并正确把字符输出到正确的位置,至于显示器是如何工作的暂且不管,程序的调度和资源分配也暂且不管。这么多的工作都交给用户来做简直就是作死了,没人会去写代码。
os的基本架构:主要分为用户空间和内核空间。下面盗图一张,来自linux kernel development第二版中。
由上图可知,用户空间主要是通过系统调用和负责应用程序与os之间的交互,而内核空间空间则更多的是负责与硬件资源打交道。其中设备驱动就是直接进行硬件设备控制的,比如iic设备,有严格时序控制,若时序不对则从设备中读出或写入的数据将会发生错误,这一部分对于内核设备和硬件都需要有深刻的了解。
以上的仅仅作为对os的惊鸿一瞥,很多东西还需读者自己在学习中去深入的理解。