一文揭开操作系统的神秘面纱

简介: 一文揭开操作系统的神秘面纱

640.png


1 操作系统简介



在如今的世界里,绝大多数人都会对WindowsLinuxMacOS等操作系统有一定的使用经验,但是很多时候对操作系统本身并没有太多感知。毕竟与用户直接打交道的大多数是各种炫酷的客户端软件,包含精美的字体、图标和图片等。


640.png


虽然一般来说这样漂亮的用户界面通常不属于操作系统,但可看作它是操作系统的一部分,通过操作系统来完成其底层复杂的与硬件层面的交互工作。


现今的计算机是一个极其复杂的系统,一般由一个或多个处理器,以及一些主内存、磁盘、网络接口、各种外设以及各种其他输入/输出设备组成。如果每个程序员都必须详细了解所有这些硬件层面的原理和机制,然后才能编写相应的代码,那么可想而知这样的效率会有多低。

640.png



此外,管理所有这些组件并优化使用它们是一件非常困难的工作。因此,计算机配备了一层称为操作系统的软件,其作用是为用户程序提供简洁方便的计算机模型,并统一管理所需要的资源。


640.png



在这里,我们看到计算机最底部是各种硬件,包括芯片,主板,磁盘,键盘,显示器等。在硬件之上则是软件。大多数计算机都有两种操作模式:内核模式和用户模式。

内核模式Kernel Mode


在内核模式下,程序具有硬件的所有控制权限,可以执行所有CPU指令,可以访问任意地址的内存。在内核模式下的任何异常都是灾难性的,将会导致整台机器停机。

用户模式User Mode


在用户模式下,程序没有对硬件的直接控制权限,也不能直接访问地址的内存。程序是通过调用系统接口API来访问硬件和内存。在这种保护模式下,即使程序发送崩溃也是可以恢复的。


操作系统可以看作是最基本的软件,它运行在内核模式(也称为管理程序模式)下。在这种模式下,它可以完全访问所有硬件,并且可以执行机器可以执行的任何指令。

而在用户模式下运行的一般都为直接面向用户的应用软件,在该模式下只能使用一部分机器指令。特别是,那些影响机器控制或「I/O输入输出」的指令在用户模式程序中是禁止的。


2 操作系统作用



看起来操作系统好像就是横跨在用户应用软件和底层硬件之间的桥梁,通过运行在内核模式进行硬件的控制和调度。事实上,操作系统的作用可大致分为两大方面。


作为计算机硬件的抽象层


大多数计算机在机器语言级别上的体系结构是极其原始的,主要说的是指令集,内存组织,I/O处理和总线结构。在这样的结构下是没办法进行自定义编程的,特别是对于I/O操作而言。因而,没有理智的程序员愿意在硬件级别处理磁盘和内存。

为了解决这样尴尬的局面,从而产生了一个称为磁盘驱动程序的软件。它用来处理硬件并提供一个接口来读取和写入磁盘块,而使得我们无需关注其细节。这本身就是操作系统最初具有的功能之一,包含许多用于控制I/O设备的驱动程序。


640.jpg

但是对于大多数应用程序来说,光有驱动程序是不够的。因此,所有操作系统都为使用磁盘提供了另一层抽象而又便于理解的概念:文件。程序可以创建,写入和读取文件,而不需要处理硬件层面中复杂的工作原理和实现细节。


这种所谓对硬件层面的抽象是管理所有这些复杂底层硬件的关键。一个好的抽象系统将几乎不可能完成的任务变成可以进行管理的任务。所以事实上操作系统所干的事,首先是定义和实现抽象。然而是使用这些抽象来解决上层用户的问题。


640.jpg



「文件」是几乎每个计算机用户都可以理解的一种抽象。一个文本,一个照片,一封保存的电子邮件,一首周杰伦的歌或一个网页,这些都可看作是抽象出来的文件。正是通过操作系统的抽象作用,使得我们可以在处理文本、照片、邮件的时候只需要点击几下,而不需要去考虑在SATA磁盘中数据的存放格式发生了如何变化。


640.png




显而易见的是,操作系统的主要任务之一是隐藏硬件,并以简单且好看的抽象形式呈现程序,以方便用户的使用。这也是Windows系统持续几十年的市场占额的原因所在,相较于其它的系统,Windows以更接近用户体验的抽象方式从而赢得了市场。


作为计算机的资源管理器


上面的作用简单来说就是操作系统为用户层面的应用程序提供了一种硬件的抽象,是自顶向下的作用。除此之外,操作系统还可以作为自底向上的中间人对应用程序所需要的资源进行管理和分发。在自下而上的流程中,操作系统的工作是在需要处理器、内存和I/O设备的各种程序之间提供有序且受控的分配。


640.png



打个比方,我们知道操作系统允许多个程序同时运行并占用内存。想象一下,如果在一台计算机上运行的三个程序都试图在同一台打印机上同时打印输出,将会发生什么。三个程序调用打印机打印可看作是对资源对请求,如果没有操作系统对资源请求的管理和分配,那么整个计算机的输出结果将会是完全混乱的。

640.png


打印机这个例子还只是最简单直接的资源请求和分配问题,而其它比如网络资源、内存资源的请求冲突问题的影响就更大了。如果处理不好资源请求之间的问题,不同应用程序之间则会发生严重的串扰,以致出现各种无法调试的错误。


操作系统主要是以时间和空间这两种方式进行复用或共享资源。对资源进行时分复用时,不同的程序或用户轮流使用它。他们中的第一个开始使用资源,然后再使用另一个,依此类推。


640.png



这实际上就是所谓时间片的概念,在时间的纬度上为每个程序分配一段资源占用的机会。还是共享打印机的例子,当有多个程序都想用打印机的时候,就按照时间发送的顺序在打印机上线性排序,一个一个来。


另一种是空间多路复用。最主要的区别在于不是每个程序轮流使用,而是每个程序都获得了一部分资源。


640.png



例如,通常将主存储器划分为几个可同时使用的区域,每个程序可以同时占用。假设有足够的内存来容纳多个程序,那么相较于所有内存分配个一个程序而言,一次将多个子内存分配给多个程序就更有效。


当然,这会引起公平性以及安全性等问题,这也是操作系统需要解决的问题之一。进行空间多路复用的另一个资源是磁盘。


在绝大数系统中,单个磁盘可以同时容纳来自多个程序或用户的文件。而操作系统在这其中的作用就是根据用户或程序来确定其对应的一块磁盘区域,从而保证程序正常的运行。


总结



操作系统复杂性绝不是几篇文章可以介绍的完的,但是这些理论上的思想正是操作系统架构形成的基础。了解操作系统能够让我们真正走进程序代码执行的内部,从高级语言出发进而理解硬件层面的执行,从而能够真正从平台及系统层面优化我们代码的性能。

相关文章
|
16天前
|
人工智能 监控 Linux
操作系统的演变之旅
本文将通过一次虚拟的时光旅行,探索操作系统从其最初始形态到现代复杂结构的演化过程。我们将见证早期批处理系统如何让位于交互式分时系统,以及图形用户界面(GUI)的诞生对个人计算带来的革命性影响。文章还将探讨移动操作系统和嵌入式系统的兴起,以及未来可能引领我们进入的新纪元。
23 0
|
3月前
|
算法 搜索推荐 开发工具
探索代码的奥秘:技术感悟与实践探索操作系统的心脏:内核
【5月更文挑战第31天】在数字世界的编织中,每一行代码都承载着创造者的智慧和汗水。本文将带你深入编程的核心,揭示那些隐藏在日常开发实践中的技术真谛。从算法的精妙到系统的架构,我们将一同探讨如何通过技术提升效率,解决问题,并在这个过程中获得个人成长。 【5月更文挑战第31天】本文深入剖析了操作系统的核心组件——内核,探讨了其设计哲学、功能职责以及在现代计算环境中的重要性。通过分析内核的工作原理和它如何与硬件、软件交互,我们将揭示这个隐藏在用户界面背后的力量之源。
|
5天前
|
中间件 Android开发 开发者
移动应用开发之旅:探索操作系统的奥秘
在数字时代的浪潮中,移动应用已成为我们日常生活的一部分。本文将带领读者踏上一场移动应用开发的奇幻之旅,从基础概念到实际开发,再到深入探索移动操作系统的核心机制。我们将一探究竟,了解这些迷人的小程序是如何构建、运行并影响我们生活的。无论你是技术新手还是资深开发者,这篇文章都将为你提供新的视角和深刻的见解。
13 2
|
18天前
|
存储 Linux C语言
深入浅出操作系统:从原理到实践
【8月更文挑战第2天】本文旨在通过浅显易懂的语言和丰富的代码示例,带领读者深入理解操作系统的基本原理和实践应用。我们将从操作系统的定义、功能、分类等基础概念入手,逐步深入到进程管理、内存管理、文件系统等核心模块,并通过代码示例展示这些原理在实际操作系统中的应用。无论你是计算机专业的学生,还是对操作系统感兴趣的开发者,这篇文章都将为你提供有价值的参考和启示。
13 2
|
26天前
|
算法 安全 Linux
深入理解操作系统:从基础概念到现代发展
【7月更文挑战第25天】在数字时代的心脏,操作系统(OS)扮演着至关重要的角色。本文将深入探讨操作系统的核心功能、设计哲学以及它们如何适应不断变化的技术需求。我们将从早期的批处理系统和多道程序设计开始,逐步走向现代的多任务、多用户操作系统,并探索它们是如何管理资源、提供安全性和促进用户交互的。文章还将触及开源与专有操作系统之间的辩论,并预测未来可能的发展方向。
|
2月前
|
安全 算法 Linux
探秘操作系统:从内核到用户界面的奥秘
【6月更文挑战第10天】本文将带领读者深入探索操作系统的多维世界,从其最基础的内核设计到丰富多彩的用户界面,我们将一窥这些软件巨匠如何支撑起现代计算的基石。不同于常规的技术解读,我们将通过故事化的叙述,揭示操作系统如何响应硬件、管理资源以及提供用户体验,展现它们不仅仅是代码和算法的集合,更是人类智慧与创造力的结晶。
|
3月前
|
存储 算法 安全
【软件设计师】深入探究操作系统
【软件设计师】深入探究操作系统
【软件设计师】深入探究操作系统
|
3月前
|
消息中间件 调度 C++
C/C++工程师面试题(操作系统篇)
C/C++工程师面试题(操作系统篇)
52 0
|
3月前
|
算法 程序员
涵盖了所有计算机底层知识总结与操作系统的实战教程,建议收藏
第一本是程序员必知的硬核基础知识,这是一本非常入门的经典 PDF,看完能让你对计算机有一个基础的了解和入门,是培养你 内核 的基础,我们看下目录大纲
|
存储
操作系统第五章_03 假脱机技术 (SPOOLing技术)
操作系统第五章_03 假脱机技术 (SPOOLing技术)
598 0
操作系统第五章_03 假脱机技术 (SPOOLing技术)