1、操作系统简介
在如今的世界里,绝大多数人都会对Windows
、Linux
及MacOS
等操作系统有一定的使用经验,但是很多时候对操作系统本身并没有太多感知。毕竟与用户直接打交道的大多数是各种炫酷的客户端软件,包含精美的字体、图标和图片等。
虽然一般来说这样漂亮的用户界面通常不属于操作系统,但可将它看作是操作系统的一部分,通过操作系统来完成其底层复杂的与硬件层面的交互工作。
现今的计算机是一个极其复杂的系统,一般由一个或多个处理器,以及一些主内存、磁盘、网络接口、各种外设以及各种其他输入/输出设备组成。如果每个程序员都必须详细了解所有这些硬件层面的原理和机制,然后才能编写相应的代码,那么可想而知这样的效率会有多低。
此外,管理所有这些组件并优化使用它们是一件非常困难的工作。因此,计算机配备了一层称为操作系统的软件,其作用是为用户程序提供简洁方便的计算机模型,并统一管理所需要的资源。
在这里,我们看到计算机最底部是各种硬件,包括芯片、主板、磁盘、键盘、显示器等。在硬件之上则是软件。大多数计算机都有两种操作模式:内核模式和用户模式。
内核模式Kernel Mode
:
在内核模式下,程序具有硬件的所有控制权限,可以执行所有CPU指令,可以访问任意地址的内存。在内核模式下的任何异常都是灾难性的,将会导致整台机器停机。
用户模式User Mode
:
在用户模式下,程序没有对硬件的直接控制权限,也不能直接访问地址的内存。程序是通过调用系统接口API
来访问硬件和内存。在这种保护模式下,即使程序发送崩溃也是可以恢复的。
操作系统可以看作是最基本的软件,它运行在内核模式(也称为管理程序模式)下。在这种模式下,它可以完全访问所有硬件,并且可以执行机器可以执行的任何指令。
而在用户模式下运行的一般都为直接面向用户的应用软件,在该模式下只能使用一部分机器指令。特别是,那些影响机器控制或「I/O
输入输出」的指令在用户模式程序中是禁止的。
2. 操作系统作用
看起来操作系统好像就是横跨在用户应用软件和底层硬件之间的桥梁,通过运行在内核模式进行硬件的控制和调度。事实上,操作系统的作用可大致分为两大方面。
作为计算机硬件的抽象层
大多数计算机在机器语言级别上的体系结构是极其原始的,主要说的是指令集、内存组织、I/O
处理和总线结构。在这样的结构下是没办法进行自定义编程的,特别是对于I/O
操作而言。因而,没有理智的程序员愿意在硬件级别处理磁盘和内存。
为了解决这样尴尬的局面,从而产生了一个称为磁盘驱动程序的软件。它用来处理硬件并提供一个接口来读取和写入磁盘块,而使得我们无需关注其细节。这本身就是操作系统最初具有的功能之一,包含许多用于控制I/O
设备的驱动程序。
但是对于大多数应用程序来说,光有驱动程序是不够的。因此,所有操作系统都为使用磁盘提供了另一层抽象而又便于理解的概念:文件。程序可以创建,写入和读取文件,而不需要处理硬件层面中复杂的工作原理和实现细节。
这种所谓对硬件层面的抽象是管理所有这些复杂底层硬件的关键。一个好的抽象系统将几乎不可能完成的任务变成可以进行管理的任务。所以事实上操作系统所干的事,首先是定义和实现抽象,然后是使用这些抽象来解决上层用户的问题。
「文件」是几乎每个计算机用户都可以理解的一种抽象。一个文本,一个照片,一封保存的电子邮件,一首周杰伦的歌或一个网页,这些都可看作是抽象出来的文件。正是通过操作系统的抽象作用,使得我们可以在处理文本、照片、邮件的时候只需要点击几下,而不需要去考虑在SATA磁盘中数据的存放格式发生了如何变化。
显而易见的是,操作系统的主要任务之一是隐藏硬件,并以简单且好看的抽象形式呈现程序,以方便用户的使用。这也是Windows
系统持续几十年的市场占额的原因所在,相较于其它的系统,Windows
以更接近用户体验的抽象方式从而赢得了市场。
作为计算机的资源管理器
上面的作用简单来说就是操作系统为用户层面的应用程序提供了一种硬件的抽象,是自顶向下的作用。除此之外,操作系统还可以作为自底向上的中间人对应用程序所需要的资源进行管理和分发。在自下而上的流程中,操作系统的工作是在需要处理器、内存和I/O
设备的各种程序之间提供有序且受控的分配。
打个比方,我们知道操作系统允许多个程序同时运行并占用内存。想象一下,如果在一台计算机上运行的三个程序都试图在同一台打印机上同时打印输出,将会发生什么。三个程序调用打印机打印可看作是对资源的请求,如果没有操作系统对资源请求的管理和分配,那么整个计算机的输出结果将会是完全混乱的。
打印机这个例子还只是最简单直接的资源请求和分配问题,而其它比如网络资源、内存资源的请求冲突问题的影响就更大了。如果处理不好资源请求之间的问题,不同应用程序之间则会发生严重的串扰,以致出现各种无法调试的错误。
操作系统主要是以时间和空间这两种方式进行复用或共享资源。对资源进行时分复用时,不同的程序或用户轮流使用它。他们中的第一个开始使用资源,然后再使用另一个,依此类推。
这实际上就是所谓时间片的概念,在时间的纬度上为每个程序分配一段资源占用的机会。还是共享打印机的例子,当有多个程序都想用打印机的时候,就按照时间发送的顺序在打印机上线性排序,一个一个来。
另一种是空间多路复用。最主要的区别在于不是每个程序轮流使用,而是每个程序都获得了一部分资源。
例如,通常将主存储器划分为几个可同时使用的区域,每个程序可以同时占用。假设有足够的内存来容纳多个程序,那么相较于所有内存分配个一个程序而言,一次将多个子内存分配给多个程序就更有效。
当然,这会引起公平性以及安全性等问题,这也是操作系统需要解决的问题之一。进行空间多路复用的另一个资源是磁盘。
在绝大数系统中,单个磁盘可以同时容纳来自多个程序或用户的文件。而操作系统在这其中的作用就是根据用户或程序来确定其对应的一块磁盘区域,从而保证程序正常的运行。
总结
操作系统复杂性绝不是几篇文章可以介绍得完的,但是这些理论上的思想正是操作系统架构形成的基础。了解操作系统能够让我们真正走进程序代码执行的内部,从高级语言出发进而理解硬件层面的执行,从而能够真正从平台及系统层面优化我们代码的性能。
推荐一个公众号,保证干货!!!
这个公众号里有各种各样的破姐应用、效率神器、学习资料以及各种汉化游戏,让你完全不花一分钱就能体会到市面上各种SVIP的待遇,保证让你能有一番全新的黑科技体验,在他的公众号中,所有应用、游戏、各种资源全都可以直接免费下载,绝对没有任何套路!!!
公众号从一开始运营到现在,已经搜罗了全网超过1000款软件了,都非常实用!下面是之前上传在网盘的部分软件,大家如果有需要的话,直接关注公众号:爱搜软件件 。然后发送"目录",即可全部无套路领取!
以上截图只是网盘的冰山一角,还有很多!因为我是把网盘的链接直接分享出来的,新上传的软件也会实时更新,所以大家只要把链接保存好,就可以第一时间获取最新的软件!
长按下方二维码
在公众号 爱搜软件:回复【目录】获取