操作系统是如何工作的?
为了探究操作系统的工作原理。我们先要知道它是什么,它的作用,以及它的组成结构。然后我们解释为什么需要操作系统。最后,我们开始探究操作系统的工作原理,它是如何实现这些功能的。
什么是操作系统
操作系统的定义
操作系统是一个一直运行在计算机中的程序。它管理着计算机的硬件和软件资源,提供一些服务给计算机的程序。为了更好的理解操作系统,我们可以把它对比一个政府组织,它作用的与政府组织相类似。一个政府组织,它不是为了自己而运作,而是为了给百姓提供服务。操作系统它提供了一个环境,让程序可以在操作系统中运行。
操作系统的功能
- 用户接口。如用户图形界面,终端等。
- 程序的执行。
- I/O 操作。
- 文件系统操作
- 通信。
- 错误侦探。
- 资源分配。如,为程序分配CPU、分配内存。
操作系统的结构
常见的操作系统结构如下。
- 整体结构 (Monolithic Structure)。结构比较简单,没有清晰的层次和模块划分。这种结构,初期看起来会比较简单。由于耦合度较高,后期就比较难维护,以及容易出现安全问题。
- 分层结构 (Layered Approach)。系统分为多个层,较低的层的提供一系列方法给较高的层调用。这是一种松耦合的结构,系统中某一个部分改变对其它部分没有很大的影响。另外,这种结构比较易于系统调试。
- 微核心结构 (Microkernels)。把所有不必要的组件从内核中移除,作为用户层的软件去实现,把内核最小化。这样的结构易于系统扩展,添加新的系统服务不需要修改内核。
- 组件化结构 (Modules)。内核包含一些核心的组件,其它系统服务模块可以通过动态加载来实现。
现代操作系统一般采用上面的某一种结构。但有的操作系统会采用混合多种不同的结构。大部分现代操作系统都采用一种组件化结构称为 Loadable Kernel Modules (LKMs)。
虽然每个系统的结构各不相同,但它提供的功能大致是相同的。如进程管理,文件管理,设备管理等功能是必要的。每个系统为了实现它要提供的功能,采用一个合适的结构就好。最重要的是把功能很好的实现,以及方便操作系统能够持续的维护和优化。
现代 Linux 系统内核结构采用组件化结构,如图
为什么需要操作系统
操作系统是连接硬件和用户软件的媒介。它对硬件资源进行管理,提供一个让用户软件可以运行的环境,以及给用户提供了用户图形接口(GUI)让用户可以方便使用硬件资源。没有操作系统提供的环境,我们就无法享受各种各样的应用软件带来的便利。
操作系统是如何工作的
操作系统的启动过程
当笔记本电脑按下开机键后,位于电脑主板上的固件 ROM 中的启动程序(Boot Loader)会运行,常见的启动程序有 BIOS 和 UEFI。启动程序会加载操作系统的启动程序,进而把整个操作系统加载到内存中并开始执行操作系统。然后安装驱动程序,创建初始化系统进程,启动必要的服务(如Web服务器,数据库等),最终出现系统登录的页面。
操作系统是如何为用户程序服务的?
操作系统启动成功后,就可以登录系统。用户可以根据自己的需要运行相应的程序,如浏览器,文本编辑器等。
一个程序的运行,需要把可执行文件加载到内存中,需要使用 CPU 去执行。然而,硬件资源(CPU,内存等)是被操作系统所管理的,为了安全和高效,用户程序不能直接使用硬件资源。
操作系统为用户程序提供了一系列的接口,通过调用对应的接口获取相应的服务和资源。这一系列接口称为系统调用 (System Call)接口。
常见的系统调用接口
- 进程控制。创建子进程,获取进程属性,分配额外内存空间等等。
- 文件管理。创建和删除文件,打开和关闭文件,读写文件等等。
- 设备管理。请求连接设备,关闭设备,读写设备等等。
操作系统是如何管理硬件和软件资源的?
为了更高效的使用硬件资源,需要合理的管理和分配资源。操作系统负责给进程分配资源。关于 CPU 的分配,一般采用轮询调度算法(Round-Robin Scheduling),即每个进程依次被 CPU 执行一个小的时间片段。关于内存的分配,一般采用的是虚拟内存,它可以使进程的逻辑内存空间远大于实际的物理内存空间,从而能运行更多的程序,更大程度的使用计算机硬件资源。
除了管理硬件资源,操作系统还要管理软件资源。如何让进程同步,如何解决进程死锁,如何实现文件I/O 等等。由于篇幅原因,这里就不具体展开。以后会单独作为一篇文章去写。
结语
通过了解操作系统是什么,为什么需要操作系统,以及操作系统的工作原理。我们大致了解操作系统的内部结构和实现机制。想要了解更多操作系统相关内容,可以阅读我的参考内容。
References
[1] Silberschatz, A. Operating system concepts 10th [M]. 2018.