1操作系统简介感悟太多。毕竟直接和用户打交道的客户端大多是各种酷炫的客户端软件,包括精美的字体、图标和图片等。图1虽然Windows10这么漂亮的用户界面一般不属于操作系统,它可以看作是操作系统的一部分,底层与硬件层面的复杂交互是通过操作系统来完成的。今天的计算机是极其复杂的系统,通常由一个或多个处理器以及一些主存储器、磁盘、网络接口、各种外围设备和各种其他输入/输出设备组成。如果每个程序员都必须在编写相应代码之前详细了解所有这些硬件级别的原理和机制,可想而知这将是多么低效。图2操作系统层次结构此外,管理所有这些组件并优化使用它们是一项非常困难的工作。因此,计算机配备了一层称为操作系统的软件,其作用是为用户程序提供简单方便的计算机模型,并对所需资源进行统一管理。图3计算机的基本硬件组成在这里,我们看到了计算机底部的各种硬件,包括芯片、主板、磁盘、键盘、显示器等。硬件之上是软件。大多数计算机有两种运行模式:内核模式和用户模式。内核模式:在内核模式下,程序拥有硬件的所有控制权,可以执行CPU的所有指令,可以访问任意地址的内存。内核模式中的任何异常都是灾难性的,并且会导致整个机器崩溃。UserMode用户态:在用户态下,程序对硬件没有直接的控制权,也不能直接访问该地址的内存。程序通过调用系统接口API来访问硬件和内存。在这种保护模式下,即使程序崩溃了,也可以恢复。操作系统可以看作是在内核模式(也称为管理程序模式)下运行的最基本的软件。在这种模式下,它可以完全访问所有硬件,并且可以执行机器可以执行的任何指令。但是运行在用户模式下的一般都是面向用户的应用软件,在这种模式下只能使用一部分机器指令。特别是影响机器控制或“I/O输入输出”的指令在用户态程序中是被禁止的。2操作系统的作用操作系统似乎是连接用户应用软件和底层硬件的桥梁,通过运行在内核态来控制和调度硬件。其实操作系统的作用大致可以分为两个方面。作为计算机硬件的抽象层,大多数计算机在机器语言层面的体系结构极其原始,主要指指令集、内存组织、I/O处理和总线结构。没有办法在这样的结构下进行自定义编程,尤其是I/O操作。因此,任何理智的程序员都不想在硬件级别处理磁盘和内存。为了解决这样的尴尬局面,就产生了一个叫做磁盘驱动器的软件。它处理硬件并提供一个接口来读写磁盘块,而我们不必担心细节。这本身就是操作系统的原始功能之一,包括许多用于控制I/O设备的驱动程序。图4.令人头疼的设备驱动程序但对于大多数应用程序而言,仅有驱动程序是不够的。因此,所有操作系统都为处理磁盘提供了另一层抽象和易于理解的概念:文件。程序可以创建、写入和读取文件,而无需在硬件级别处理复杂的工作原理和实现细节。这种所谓的硬件级别抽象是管理所有这些复杂的底层硬件的关键。一个好的抽象系统可以将几乎不可能完成的任务变成可管理的任务。所以实际上,操作系统所做的就是先定义并实现抽象。但是,用这些抽象来解决上层用户的问题。图5“文件”是操作系统最重要的抽象“文件”是几乎每个计算机用户都能理解的抽象。一段文字、一张照片、一封保存的电子邮件、一首周杰伦的歌曲或一个网页,这些都可以看作是抽象的文件。正是通过操作系统的抽象,我们在处理文字、照片、邮件时只需点击几下,而不用考虑SATA磁盘中的数据存储格式发生了怎样的变化。图4操作系统对硬件层的抽象很明显,操作系统的主要任务之一就是隐藏硬件,以一种简单而吸引人的抽象形式呈现程序,以方便用户使用。这也是为什么Windows系统的市场份额能够持续数十年的原因。与其他系统相比,Windows以更贴近用户体验的抽象方式赢得了市场。作为计算机资源管理器,上面的功能简单来说就是操作系统为用户级应用程序提供硬件抽象,是自上而下的功能。此外,操作系统还可以充当自下而上的中间人,管理和分配应用程序所需的资源。在自下而上的过程中,操作系统的工作是在需要处理器、内存和I/O设备的各种程序之间提供有序和受控的分配。图4操作系统对底层资源的管理打个比方,我们知道操作系统允许多个程序同时运行并占用内存。想象一下,如果在一台计算机上运行的三个程序都试图同时将输出打印到同一台打印机,会发生什么情况。调用打印机打印的三个程序可以看成是对资源的请求。如果没有操作系统对资源请求的管理和分配,整个计算机的输出将完全混乱。图5多个程序同时调用打印机,输出错误的打印机这个例子只是最简单直接的资源请求和分配问题,其他如网络资源和内存资源冲突等问题影响较大。如果资源请求之间的问题处理不当,不同的应用程序之间会发生严重的串扰,导致各种无法调试的错误。操作系统主要通过两种方式来复用或共享资源:时间和空间。当一种资源被时分复用时,不同的程序或用户轮流使用它。他们中的第一个开始使用该资源,然后是另一个,依此类推。图6操作系统在时间维度上分配资源这其实就是所谓时间片的概念,在时间维度上为每个程序分配一个资源占用机会。依旧是共享打印机的例子。当多个程序要使用打印机时,会在打印机上按发送时间顺序线性排序,一个接一个。另一种是空间复用。主要区别在于,不是每个程序轮流使用,而是每个程序获得一部分资源。图7.操作系统在空间维度上分配资源。例如,主存通常被分成几个可以同时使用的区域,每个程序可以同时占用它。假设有足够的内存容纳多个程序,一次将多个子内存分配给多个程序比将所有内存分配给一个程序效率更高。当然,这会造成公平性和安全性问题,这也是操作系统需要解决的问题之一。空间多路复用的另一种资源是磁盘。在大多数系统上,单个磁盘可以同时保存来自多个程序或用户的文件。操作系统的作用是根据用户或程序确定相应的磁盘区域,以保证程序的正常运行。总结操作系统的复杂性绝不是几篇文章就可以完成的,但是这些理论思想是操作系统体系结构形成的基础。了解操作系统可以让我们真正走进程序代码执行的内部,从高级语言入手,进而了解硬件层面的执行,这样才能真正从平台和平台上优化我们代码的性能。系统级。作者简介:我是暗江,一个迷迷糊糊钻进大厂的业余码农。分享全栈技术,目标架构师。关注我,一起走向科技的巅峰!本文转载自微信公众号“业余码农”,可通过以下二维码关注。转载本文请联系业余码农公众号。
