重学操作系统(十)
前言
之前看了很多Linux相关的内容,最后有分析日志和自动化运维的一些知识,有些太深入了,所以只是看了下,跟着做了下练习,没有写成文章。
今天继续,来说一下Windows和Linux的区别。
Windows,Linux,MacOS应该是现今世界上最受欢迎的三大操作系统了。今天不谈MacOS,单说Windows和Linux。
Windows,商业系统,微软家的,大量优秀的开发者加入微软,进行Windows系统相关的开发。
Linux,开源系统,因此通过开源社区,吸引大量顶级开发者贡献源码。
两个操作系统,其实在我看来各有各的市场,存在竞争,但是很多方面却是互补的。
从消费者的角度来说,如果是业内人士,Windows,Linux(包括MacOS)肯定大都接触过,就开发而言,除非做微软家的开发,否则用Linux(包括MacOS)做开发,无论是安装一些软件包,命令行,编辑器的运行流畅度等,Linux肯定是秒杀Windows。但是对于普通用户,就一句话来形容:什么是Linux?
对于我个人,简单一句,Windows玩儿游戏,MacOS开发(我开发不用Linux)。
贯穿全文的一道题:Linux 内核和 Windows 内核有什么区别?
什么是内核
内核是操作系统中应用连接硬件设备的桥梁。
内核一般具有下列基本功能:
- 管理进程、线程(决定哪个进程、线程使用CPU)
- 管理内存(决定内存用来做什么)
- 连接硬件设备(为进程、和设备间提供通信能力)
- 提供系统调用(接收进程发送来的系统调用)
通常操作系统可以分成三层,最底层是硬件设备的抽象(CPU,IO设备,存储设备等),中间是内核(Kernel),最上层是应用层(Application)
图片来源于: @Quora
操作系统分层
内核的工作原理
内核的权限非常高,它可以管理进程,直接访问所有内存,因此内核和进程之间需要有一定的隔离。这个隔离是类似服务端和客户端请求响应的模型。但不同的是,服务端和客户端一般在不同机器运行,因此不需要共享资源。但是进程调用内核期间,存在资源共享。
多数操作系统遵循的设计原则是:进程向内核发起一个请求,然后将CPU执行权限让出给内核。内核接手CPU执行权限,然后完成请求,再把CPU执行权限给进程。
Linux的设计
Multitsdk and SMP (Symmetric multiprocessing)
Multitask 顾名思义,就是Linux是一个多任务的操作系统。多任务指多个任务能同时执行。Linux支持并发执行。
SMP指的是对称多处理,就是Linux每个处理器地位相同,内存对多个处理器来说是共享的。每个处理器能访问完整的内存和硬件资源。因为这个特性,用户程序或者内核程序执行时,会可能被分配到任何处理器上执行。
ELF(Executable and Linkable Format)
这个词的意思就是可执行文件链接格式。是从Unix继承而来的可执行文件存储格式。ELF中,文件被分成一个个段(Segment),每个段都有自己的作用。
图片来源于: https://linuxhint.com/understanding_elf_file_format/
文件的结构
Monolithic Kernel
这个名词的意思是宏内核,与其相反的,还有一个Microkernel,就是微内核。宏内核,预示着,Linux内核是一个完整的可执行程序,且内核用最高权限来运行。宏内核的特点是很多程序会打包在内核中,如文件系统,驱动,内存管理等。Linux支持动态加载内核模块,这样每次安装驱动,不需要再重新编译内核了。
微内核与宏内核对应,微内核只保存了基本能力,比如进程调度,虚拟内存,中断。大部分应用,包括文件系统,驱动程序,内存管理,是在用户空间管理的。
图片来源于: @拉钩教育
不同类型的内核的结构
宏内核的好处是:
需要频繁调用底层操作的应用,比如驱动程序,使用宏内核结构性能更好。
微内核的好处是:
内核体积小,可移植性强。
还有就是混合类型内核,其架构像微内核,内核中会有一个最小版本内核,其它功能会在这个能力上搭建。但是混合类型内核,内核也是一个完整的程序,大部分功能包含在内核中。
Windows设计
Windows有两个版本的内核,一个叫Windows 9x,应用在Win95, Win98系统中。另一个是Windows NT,应用在现在的Win7和Win10。NT指的是New Technology。
图片来源于: @Quora
Windows内核的结构
Windows 支持Mutitask和SMP(对称多处理)。Windows内核属于混合内核。其内核中有一个Microkernel,但是整个内核又类似宏内核,包含完整功能。
Windows也有自己的可执行文件格式,叫作Portable Executable(PE),也就是可移植的执行文件,扩展名一般是.exe,.dll,.sys等。
PE和ELF结构有很多类似的地方。大致如下:
图片来源于: @ResearchGate
PE的结构
Windows有很多独特的功能,比如Hyper-V虚拟化技术。
总结
其实在看这一章节之前,对操作系统的内核并没这么了解。也许也是平时工作用不到,所以也不是很重视这个方面。看了这一章节之后,不但相关只是点获得补充,也发现,其实对于变成语言来说,它们可能不同。但是其实,它们又相同。在操作系统,数据结构,底层原理,编译原理等方面,它们都大相径庭,因此学好操作系统,深入学习是有必要的。
Q: Unix 和 Mac OS 内核属于哪种类型?
A: Unix 和 Linux 非常类似,也是宏内核。Mac OS 用的是 XNU 内核, XNU 是一种混合型内核。XNU 是 X is not Unix 的意思, 是一个受 Unix 影响很大的内核。
参考
[1] https://kaiwu.lagou.com/course/courseInfo.htm?courseId=478#/detail/pc?id=4620
[2] https://linuxhint.com/understanding_elf_file_format/
[4] https://www.researchgate.net/figure/Portable-executable-file-format_fig6_338355873