本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。
Linux内核里可以看到数据结构和算法的经典案例,并发情况下的保护这种复杂场景;实践中的问题也可以参考内核中的实现。
假设,我们现在就是做一家外包公司,目标是把这家公司做上市,操作系统就是外包公司的老板。公司的发展阶段分为这样的几个时期:
-
初创期:基于开放的营运环境(x86体系结构),创办一家外包公司(系统的启动),因为一开始没有其他员工,老板需要亲自接项目(实模式)。
-
发展期:公司慢慢做大,项目越接越多(保护模式,多进程),为了管理各个外包项目,建立了项目管理体系(进程管理)、会议室管理(内存管理)、文档资料管理系统(文件系统)、售前售后体系(输入输出设备管理)
-
壮大期:公司越来越牛,开始促进内部项目的合作(进程间通信)和外部公司合作(网络通信)
-
集团化:公司业务越来越多,会成立多家子公司(虚拟化),或者鼓励内部创业(容器化),这个时候公司就变成了集团(linux集群),从而上市成功(从单机操作系统到数据中心操作系统)
操作系统相当于一家外包公司,内核相当于是公司的老板。
后续的内容就是假设自己是老板,看操作系统如何协调资源,完成工作的。
鼠标和键盘是输入设备。
显示屏是输出设备。
输入设备驱动类似外包公司里的销售,售前等客户对接员。安装驱动相当于给你分配一个客户对接员。
客户告诉对接人员需求的时候,对于操作系统来说会发送一个中断。
因为客户肯定系统对接人员停下手里的事情,只服务他一个客户。
客户发送的需求就是 中断事件。
显卡驱动,操作系统中称为输出设备驱动,类似外包公司的交付人员。
例如点击运行QQ:对于公司来说这个是大单子,不是零碎的需求。需要有项目执行计划书(程序),每一步骤做什么之类的。
程序以二进制的格式存在硬盘上,硬盘是个物理设备,要按照规定格式化成为文件系统才能存放数据。
文件系统需要一个系统进行统一管理,称为文件管理子系统。
QQ的二进制文件是静态的,称为程序(program)
运行起来的QQ是不断进行的,称为进程(process)
一个项目需要运行:需要各种资源,如证明,会议室,打印材料等
一方面资源有限,不能滥用,有些还涉及机密
另一方面最多跑一次效率要高一些。
为了解决这些问题:一方面有些资源需要审批了才能用,严格把控,另一方面可以提供个办事大厅,方便操作。
例如打印的操作,如果进程自己随意操作,一张纸上的内容就会混乱。
所以打印的操作放在操作系统内核,进程不能随便乱操作,操作系统也提供了一个办事大厅,就是系统调用(system call)。
系统调用提供了哪些接口可以调用,类似办事大厅体提供了哪些服务。
任何一个程序想要运行起来,就需要调用系统调用,创建进程。
为了管理进程,需要一个进程管理子系统。如果运行的进程很多,一个CPU会并发运行多个进程,就需要CPU调度能力强一些了。
不同的进程需要有不同的内存空间,但是内存是有限的,需要统一的管理和分配,需要内存管理子系统(Memory Management Subsystem)
办事大厅里包括各种功能:(图感觉不合适,办事大厅和其他的不是平级的)
操作系统内核结构体系图: