[操作系统] 深入理解操作系统的概念及定位

概念

任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。

其核心功能如图片所示,包括:

  • 内核 (Kernel):
    内核是操作系统的核心部分,被认为是狭义上的操作系统,直接与硬件打交道。负责进程管理、内存管理、文件管理和设备管理。
    在图片中,内核被描述为包含关键功能,例如:
    • 进程管理:如何调度任务、切换任务、分配 CPU 时间片。
    • 内存管理:分配和释放内存、提供虚拟内存功能。
    • 文件管理:存储和访问磁盘上的文件。
    • 驱动管理:硬件与系统的接口。
  • 其他程序:
    除了内核外,操作系统还包括辅助用户交互和程序开发的组件,例如函数库、Shell 程序等。

操作系统的设计目的

对下管理硬件资源(不是目的,是手段)

如图所示,操作系统与硬件直接交互,管理所有软硬件资源。它可以屏蔽底层硬件的复杂性,为应用程序提供统一的接口。例如:

  • CPU 时间的分配;
  • 内存的分配与回收;
  • 文件的读取与写入。

对上为用户和应用程序提供环境(目的,服务用户)

操作系统为用户程序提供执行环境,包括:

  • 抽象硬件: 屏蔽底层复杂的硬件接口;
  • 系统调用: 提供基础功能调用接口,例如文件操作、内存分配等。

图片中通过银行窗口的比喻形象地说明了这一点:

  • 用户(用户程序)与银行柜员(操作系统)交互,柜员接收用户指令,完成后台操作;
  • 银行后台资源(硬件)被柜员高效管理,用户无需直接接触。

操作系统如何通过分层结构和接口设计实现资源管理和安全性?

软件硬件系统结构层状结构

理解:

  • 软件和硬件系统是层次化的,系统的不同层次之间通过接口进行交互。
  • 硬件位于底层,它是最基础的物理资源,直接负责执行指令和存储数据。
  • 操作系统位于硬件之上,充当中间层,负责管理硬件资源并为上层应用程序提供接口。
  • 应用程序在最上层运行,用户通过应用程序与硬件进行间接交互。

例子:

  • 用户通过一个文本编辑器(应用程序)保存文件,实际调用了操作系统的文件系统接口,最终将数据写入硬件(磁盘)。
  • 这种分层结构让硬件的复杂性被操作系统屏蔽,开发者只需关注高层的接口,而不需要了解硬件的底层操作。

访问操作系统,必须使用系统调用

理解:

  • 系统调用是应用程序与操作系统交互的桥梁。通过系统调用,应用程序可以访问操作系统管理的资源(如文件、网络、内存等)。
  • 系统调用本质上就是操作系统提供的一组函数,通过这些函数,应用程序可以向操作系统发出请求,完成特定的任务。

例子:

  • 程序需要读取文件时,会通过调用系统调用 read() 请求操作系统打开文件、读取内容。
  • 这些调用本质上是程序员使用的函数,但这些函数是操作系统实现的,而不是直接操作硬件。

关键点:

  • 系统调用是操作系统对外暴露的功能接口,它们是固定的,程序必须通过这些接口访问硬件资源。

访问硬件时,必须穿越整个软件硬件体系结构

理解:

  • 如果程序需要访问硬件(如读取硬盘、打印文件等),操作必须逐层向下传递:
    1. 程序向操作系统发出系统调用请求。
    2. 操作系统内部将请求映射到具体的硬件驱动程序。
    3. 硬件驱动直接控制硬件完成任务。
  • 这种机制确保了硬件操作的安全性和一致性,因为操作系统充当了硬件和程序之间的"守门人"。

例子:

  • 一个浏览器需要加载网页,最终会访问网络适配器(硬件)发送请求。这个过程包括:
    • 浏览器调用系统的网络 API;
    • 操作系统将请求传递给网络驱动程序;
    • 驱动程序控制网络硬件发送数据包。

关键点:

  • 程序无法直接访问硬件,必须经过操作系统。操作系统确保硬件资源的安全和公平使用。

库函数可能底层封装了系统调用

理解:

  • 库函数是对系统调用的进一步封装,提供了更高级、更易用的功能。底层的系统调用是基础功能,而库函数对其进行了扩展和优化。
  • 通过调用库函数,开发者无需直接与复杂的系统调用打交道,而是通过更简单的接口完成同样的任务。

例子:

  • C 语言的 printf() 函数用于输出内容到终端,它底层调用了操作系统的 write() 系统调用来完成实际的输出。
  • 类似地,标准库函数 fopen() 封装了文件操作的系统调用,使开发者可以更简单地处理文件。

关键点:

  • 库函数是对系统调用的进一步抽象,提供了更方便的功能,同时隐藏了底层实现细节。

小结

这四个要点说明了操作系统作为用户程序与硬件之间的桥梁,如何通过分层结构和接口设计实现资源管理和安全性:

  1. 软件硬件的层状结构让复杂的硬件操作被逐层抽象。
  2. 系统调用是访问操作系统的唯一合法方式,程序必须通过它请求资源。
  3. 程序访问硬件时,必须经过操作系统的管理,确保硬件安全和公平。
  4. 库函数对系统调用进行了封装,使开发更加方便。

这种机制体现了操作系统设计的核心思想------通过抽象和封装,隐藏复杂性,提供易用性,同时确保安全性和稳定性。

操作系统的核心功能

管理。

在整个计算机软硬件架构中,操作系统的定位是:一款纯正的"搞管理"的软件。 (决策,执行)

管理时,管理与被管理者可以不需要见面:

一个学校的校长(管理者)不需要直接与每个学生(被管理者)接触,就可以管理整个学校。这是因为校长可以通过辅导员或者班主任提供的学生数据(如成绩、出勤率等)来完成管理。

管理者 (如操作系统)和被管理者 (如进程、内存、文件等)之间的交互并不需要直接接触。它们通过数据(描述信息)来完成管理,而不是通过面对面或者直接交互。换句话说,操作系统不需要直接干预具体的硬件或程序,只需要维护这些被管理对象的状态和描述信息,然后根据需要进行操作。

管理者和被管理者,根据"数据"进行管理:

数据是管理的核心。操作系统不直接操作资源本身,而是通过对资源数据的读取和操作来实现管理。

管理的核心是数据,管理者通过记录和操作被管理者的相关数据实现对其的控制。在操作系统中,这些数据通常存储在内核中,描述了被管理资源的状态和属性。

不需要见面,由中间层获取得到数据:

在学校中,校长通过辅导员获取学生的信息,而不需要直接接触每个学生。辅导员就像操作系统中的"中间层",负责收集数据并提供给校长。

操作系统作为"中间层"负责采集和维护资源数据,通过这些数据为用户程序提供服务。被管理者(如硬件设备、程序)本身并不会直接暴露其内部信息,而是通过操作系统的中间层将这些数据呈现给管理者。


将上文所述例子进行延伸,如果学生的数量过多则会造成管理的不便,所以就会使用数据结构将学生的信息进行存储,用结构体将一个学生的信息进行存储,然后将所有结构体进行联系。

同样,操作系统对管理的进程、内存、文件等就可以将他们的状态和描述信息进行存储在结构体中,然后使用合适的数据结构进行管理,进行增删查改。


系统调用与库函数

系统调用

操作系统要向上提供服务

但是操作系统不信任任何用户,所以会有系统调用的概念。

操作系统对外暴露的接口称为系统调用,是用户程序与操作系统交互的桥梁。

通过接口可以降低操作系统和用户之间的耦合度,不同的服务对应不同的接口,提高安全性。

例如:

  • 文件操作:创建、删除、读写文件;
  • 进程操作:创建进程、终止进程;
  • 内存操作:分配和释放内存。

库函数

只要库函数最终使用了硬件,则该库函数一定使用了系统调用。

系统调用直接提供基础功能,但对于用户来说,使用这些功能可能过于复杂。因此,开发者会基于系统调用开发封装好的库函数

比如软件的使用中我们只需要点击对应的按键,即可执行程序员已经封装好的系统调用。程序员用已经把系统调用封装好的库函数再次进行封装成接口,提供给用户使用,这就是对上进行服务。

例如:

  • printf() 是基于 I/O 系统调用封装的函数;
  • 标准 C 库(如 libc)对操作系统的功能进行了更高层次的抽象。

管理的本质

描述和组织。

比如,大部分高级语言都可以面向对象编程,以及有类似于STL库的使用。面向对象,将事物用结构体进行封装的过程实际上就是描述 ,用STL库使用数据结构将结构体进行管理就是将描述后的内容进行组织

  • 描述被管理对象:
    使用数据结构(如结构体)对资源进行描述。例如:
    • 文件描述符;
    • 进程控制块(PCB)。
  • 组织被管理对象:
    使用数据结构(如链表、队列)将资源高效组织起来。例如:
    • 进程调度使用的就绪队列;
    • 内存管理中的空闲链表。

这种管理方式贯穿于操作系统的各个模块,是操作系统高效运行的核心思想。


承上启下:操作系统的核心价值

操作系统的核心价值体现在:

  • 对资源的统一管理和抽象: 提供统一的接口,屏蔽硬件复杂性;
  • 保障用户程序的安全与高效: 防止资源冲突,提高系统性能。

操作系统的管理方法(描述 + 组织)也贯穿其设计理念:

  1. 描述资源(结构体);
  2. 组织资源(链表等高效数据结构)。

通过以上详细的讲解,我们可以更好地理解操作系统在计算机系统中的定位:它既是硬件资源的管理者,又是用户与硬件交互的桥梁。无论是进程管理、内存管理还是文件管理,操作系统的设计哲学始终围绕"管理"展开。

相关推荐
七夜zippoe3 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥3 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
Fcy6484 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满4 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠4 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
主机哥哥5 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey9035 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技6 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀6 小时前
Linux环境变量
linux·运维·服务器
zzzsde6 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器