学习路线-后端-操作系统-操作系统是如何工作的?

操作系统的定义

操作系统是一个一直运行的在计算机中的程序,他管理着计算机的硬件和软件资源,提供以下服务给计算机的程序。

操作系统的功能

  • 用户接口。如图形界面、终端等
  • 程序的执行
  • I/O操作
  • 文件系统操作
  • 沟通
  • 错误侦探
  • 资源分配。如程序分配CPU、分配内存

操作系统的结构

  • 整体结构:结构比较简单,没有清晰的层次和模块划分。这种结构,初期看起来会比较简单。由于耦合度高,后期比较难以维护,容易出现安全问题。
  • 分层结构:系统分为多个层,较低的层提供一系列方法给提供给高层调用。这是一种松耦合的结构,系统中某一个部分改变对其他部分没有很大的影响,易于进行系统测试
  • 微核心结构:把所有不必要的组件从内核移除,作为用户层的软件去实现,把内核最小化。这样的结构易于系统扩展,添加新的系统服务不需要修改内核
  • 组件化结构:内核包含一些核心的组件,其他系统服务模块可以通过动态加载来实现

现在操作系统一般采用上面的某种结构。但有的操作系统会采用混合多种不同的结构。大部分现在操作系统都采用一种组件化结构为Loadable Kernel Moudules(LKMs)。

虽然每个系统的结构各不相同,但他提供的功能大致是相同的。如进程管理、文件管理、设备管理等功能是必要的。每个系统为了实现他要提供的功能,采用一个合适的结构就好。最重要的就是把功能很好的实现,以及方便操作系统能够持续的维护和优化。

现代linux系统内核结构采用组件化结构,如图:

学习路线-后端-操作系统-操作系统是如何工作的?

为什么需要操作系统

操作系统是连接硬件和用户软件的媒介。他对硬件资源进行管理,提供一个让用户软件可以运行的环境,以及给用户提供一个图形接口(GUI)让用户可以方便使用硬件资源。没有操作系统提供的环境,我们就无法先收各种各样的应用软件带来的便利。

操作系统是如何工作的

操作系统启动过程

当电脑按下开机电源键时,位于主板上的固件ROM中的启动程序(Boot Loader)会开始运行,常见的启动程序会有BIOS和UEFI。启动程序回加载操作系统的启动程序,进而把整个操作系统加载到内存中并开始执行操作系统。然后安装加载驱动程序,创建初始化系统进程,启动必要的服务(如Web服务器、数据库等),最终出现系统登陆的页面。

操作系统时如何为用户程序服务的

操作系统完成启动后,就可以登陆系统。用户可以根据自己的需求运行相应的程序,如浏览器、文本编辑器等。

一个程序的运行,需要把可执行文件加载到内存中,需要使用CPU去执行。然而,硬件资源(CPU、内存、硬盘等)是被操作系统所管理的,为了提高安全和高效,用户程序不能直接使用硬件资源,硬件资源由操作系统统一管理和分配。

操作系统为用户程序提供了一系列的接口,通过调用对应的接口获取相应的服务和资源。这一系列接口称为系统调用(System Call)接口。

常见的系统调用接口

  • 进程控制:创建子进程,获取进程属性,分配额外内存空间等等。
  • 文件管理:创建和删除文件,打开和关闭文件,读写文件等等。
  • 设备管理:请i去连接设备,关闭设备,读写设备等等。

操作系统是如何管理硬件和软件资源的

为了更高效的使用硬件资源,需要合理的管理和分配资源。操作系统负责给进程分配资源。关于CPU的分配,一般使用轮询调度算法(Round-Robin Scheduing)),即每个进程一次被CPU执行一个小的时间片段。关于内存的分配,一般采用的是虚拟内存,它可以使用进程的逻辑内存空间远大于实际的物理内存空间,从而运行更多的程序,更大程度的使用计算机硬件资源。