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

概念

任何计算机系统都包含⼀个基本的程序集合,称为操作系统(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. 组织资源(链表等高效数据结构)。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2878.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter 简单使用、生成测试报告(一)

一、下载Jmter 去官网下载,我下载的是apache-jmeter-5.6.3.zip,解压后就能用。 二、安装java环境 JMeter是基于Java开发的,运行JMeter需要Java环境。 1.下载JDK、安装Jdk 2.配置java环境变量 3.验证安装是否成功(java -versio…

postgresql分区表相关问题处理

1.使用pg_cron按日创建分区表,会出现所在数据库对应用户权限不足的问题。 原因是pg_cron运行在postgres数据库中,是用superuser进行执行的,对应的分区表的owner为postgres,所以需要单独授权对表的所有操作权限。不知道直接改变ow…

Agent一键安装,快速上手Zabbix监控!

目录 一、Linux操作系统部署Agent环境配置1、防火墙配置2、永久关闭selinux yum方式安装1、配置zabbix仓库2、安装agent3、配置 Zabbix-Agent 指向 Zabbix-Server4、启动agent服务 二进制包安装1、下载二进制包2、创建用户和目录及更改属主(组)3、解压二…

内存与缓存:保姆级图文详解

文章目录 前言1、计算机存储设备1.1、硬盘、内存、缓存1.2、金字塔结构1.3、数据流通过程 2、数据结构内存效率3、数据结构缓存效率 前言 亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的…

【大数据】机器学习-----模型的评估方法

一、评估方法 留出法(Holdout Method): 将数据集划分为训练集和测试集两部分,通常按照一定比例(如 70% 训练集,30% 测试集)。训练集用于训练模型,测试集用于评估模型性能。优点&…

人工智能-机器学习之多分类分析(项目实战二-鸢尾花的多分类分析)

Softmax回归听名字,依然好像是做回归任务的算法,但其实它是去做多分类任务的算法。 篮球比赛胜负是二分类,足球比赛胜平负就是多分类 识别手写数字0和1是二分类,识别手写数字0-9就是多分类 Softmax回归算法是一种用于多分类问题…

[系统安全] 六十一.恶意软件分析 (12)LLM赋能Lark工具提取XLM代码的抽象语法树(初探)

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系…

一文掌握Docker

目录 1.快速入门 1.1.部署MySQL 1.2.命令解读 2.Docker基础 2.1.常见命令 2.1.1.命令介绍 2.1.2.演示 2.1.3.命令别名 2.2.数据卷 2.2.1.什么是数据卷 2.2.2.数据卷命令 2.2.3.挂载本地目录或文件 2.3.镜像 2.3.1.镜像结构 2.3.2.Dockerfile构建镜像 2.3.3.构建…

【网络编程】基础知识

目录 网络发展史 局域网和广域网 局域网(LAN) 广域网(Wan) 光猫 路由器 网线 设备通信的要素 IP地址 基本概念 地址划分 特殊地址(后续编程使用) IP地址转换 字节序 网络模型 网络的体系结…

细说STM32F407单片机窗口看门狗WWDG的原理及使用方法

目录 一、窗口看门狗的工作原理 1、递减计数器 2、窗口值和比较器 3、看门狗的启动 4、提前唤醒中断 二、窗口看门狗的HAL驱动程序 1、窗口看门狗初始化 2.窗口看门狗刷新 3.EWI中断及其处理 三、不开启EWI的WWDG示例 1、示例功能 2、项目设置 (1&…

Windows 蓝牙驱动开发-蓝牙设备栈

蓝牙设备栈 蓝牙驱动程序堆栈包含 Microsoft 为蓝牙协议提供支持的核心部分。 有了这个堆栈,已启用蓝牙的设备可以彼此定位并建立连接。 在此类连接中,设备可以通过各种应用程序交换数据并彼此交互。 下图显示了蓝牙驱动程序堆栈中的模块,以…

港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作。根据备忘录,双方将结合各自于科研领域的优势,携手推动医学健康领域的交流与合作。合作方向将涵盖人才培训、…

设计模式03:行为型设计模式之策略模式的使用情景及其基础Demo

1.策略模式 好处:动态切换算法或行为场景:实现同一功能用到不同的算法时和简单工厂对比:简单工厂是通过参数创建对象,调用同一个方法(实现细节不同);策略模式是上下文切换对象,调用…

Spring Boot 下的Swagger 3.0 与 Swagger 2.0 的详细对比

先说结论: Swgger 3.0 与Swagger 2.0 区别很大,Swagger3.0用了最新的注释实现更强大的功能,同时使得代码更优雅。 就个人而言,如果新项目推荐使用Swgger 3.0,对于工具而言新的一定比旧的好;对接于旧项目原…

3 前端(上): Web开发相关概念 、HTML语法、CSS语法

文章目录 前言:导学1 Web开发相关概念2 Web标准(网页标准)3 软件架构(CS/BS)(1)C/S: Client/Server 客户端 / 服务器端(2)B/S: Browser/Server 浏览器 / 服务器端VSCode配置前段开发环境一、HTML概念1 概念2 HTML快速入门(1)语法快速入门(2)VSCode一个 !(快捷键…

目标检测新视野 | YOLO、SSD与Faster R-CNN三大目标检测模型深度对比分析

目录 引言 YOLO系列 网络结构 多尺度检测 损失函数 关键特性 SSD 锚框设计 损失函数 关键特性 Faster R-CNN 区域建议网络(RPN) 两阶段检测器 损失函数 差异分析 共同特点 基于深度学习 目标框预测 损失函数优化 支持多类别检测 应…

go chan底层分析

go chan底层分析 底层源码hchanmakechan 方法 环形队列阻塞机制向管道写数据流程图源码 从管道读数据流程图源码 关闭通道 底层源码 hchan type hchan struct {qcount uint // 当前队列中剩余元素个数dataqsiz uint // 环形队列长度,即可以…

【Git版本控制器--1】Git的基本操作--本地仓库

目录 初识git 本地仓库 认识工作区、暂存区、版本库 add操作与commit操作 master文件与commit id 修改文件 版本回退 撤销修改 删除文件 初识git Git 是一个分布式版本控制系统,主要用于跟踪文件的更改,特别是在软件开发中。 为什么要版本…

【C语言】_字符串拷贝函数strcpy

目录 1. 函数声明及功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版:基本功能判空const修饰 4.2 第二版:优化对于\0的单独拷贝 4.3 第三版:仿strcpy的char*返回值 1. 函数声明及功能 char * strcpy ( char * destination, cons…

AIGC时代:如何快速搞定Spring Boot+Vue全栈开发

文章目录 一、Spring Boot基础二、Vue.js基础三、Spring Boot与Vue.js集成四、性能优化与最佳实践《快速搞定Spring BootVue全栈开发》 内容简介作者简介目录前言/序言本书内容本书特点读者对象 随着人工智能生成内容(AIGC)技术的迅速发展,…