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

概念

任何计算机系统都包含⼀个基本的程序集合,称为操作系统(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.mzph.cn/diannao/67289.shtml

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

相关文章

Java并发编程——线程池(基础,使用,拒绝策略,命名,提交方式,状态)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴&#xff0…

nginx 配置代理,根据 不同的请求头进行转发至不同的代理

解决场景:下载发票的版式文件,第三方返回的是url链接地址,但是服务是部署在内网环境,无法访问互联网进行下载。此时需要进行走反向代理出去,如果按照已有套路,就是根据不同的访问前缀,跳转不同的…

设计一个流程来生成测试模型安全性的问题以及验证模型是否安全

要使用 Ollama 运行 llama3.3:70b 模型,并设计一个流程来生成测试模型安全性的问题以及验证模型是否安全,可以按照以下步骤进行设计和实现。整个过程包括环境配置、设计安全测试提示词、执行测试以及分析结果。以下是详细的步骤和指导: 1. 环…

iOS - TLS(线程本地存储)

从源码中,详细总结 TLS (Thread Local Storage) 的实现: 1. TLS 基本结构 // TLS 的基本结构 struct tls_data {pthread_key_t key; // 线程本地存储的键void (*destructor)(void *); // 清理函数 };// 自动释放池的 TLS class Autorelease…

docker在不删除容器的情况下修改端口映射

注意:必须先停止docker服务!!!! 1) 停止容器 2) 停止docker服务(systemctl stop docker) 3) 修改这个容器的hostconfig.json和config.v2.json文件中的端口 先查看容器id docker inspect jenkins 进入该目录 hostcon…

【js进阶】设计模式之单例模式的几种声明方式

单例模式&#xff0c;简言之就是一个类无论实例化多少次&#xff0c;最终都是同一个对象 原生js的几个辅助方式的实现 手写forEch,map,filter Array.prototype.MyForEach function (callback) {for (let i 0; i < this.length; i) {callback(this[i], i, this);} };con…

专题 - STM32

基础 基础知识 STM所有产品线&#xff08;列举型号&#xff09;&#xff1a; STM产品的3内核架构&#xff08;列举ARM芯片架构&#xff09;&#xff1a; STM32的3开发方式&#xff1a; STM32的5开发工具和套件&#xff1a; 若要在电脑上直接硬件级调试STM32设备&#xff0c;则…

-bash: /java: cannot execute binary file

在linux安装jdk报错 -bash: /java: cannot execute binary file 原因是jdk安装包和linux的不一致 程序员的面试宝典&#xff0c;一个免费的刷题平台

【MySQL】使用C语言链接

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;MySQL 目录 一&#xff1a;&#x1f525; MySQL connect &#x1f98b; Connector / C 使用&#x1f98b; mysql 接口介绍&#x1f98b; 完整代码样例 二&#xff1a;&#x1f525; 共勉 一&#…

平滑算法 效果比较

目录 高斯平滑 效果对比 移动平均效果比较: 高斯平滑 效果对比 右边两个参数是1.5 2 代码: smooth_demo.py import numpy as np import cv2 from scipy.ndimage import gaussian_filter1ddef gaussian_smooth_array(arr, sigma):smoothed_arr = gaussian_filter1d(arr, s…

通过ssh连接debian

使用方法 ssh usernameipaddress [inputpasswd]root用户默认无法由ssh连接&#xff0c; 可以通过修改配置 sudo vim /etc/ssh/sshd_config去掉PermitRootLogin前的‘#’,并修改为 PermitRootLogin yes 重启sshd服务 sudo systemctl restart sshd参考 https://linuxconfig.or…

Outlook 无网络连接[2604] 错误解决办法

Outlook 是微软公司开发的一款广泛使用的电子邮件客户端&#xff0c;广泛应用于个人用户和企业办公环境中。然而&#xff0c;许多用户在使用 Outlook 时可能会遇到“无网络连接”或者“错误代码 [2604]”等问题。这个错误通常会导致 Outlook 无法正常连接到邮件服务器&#xff…

.NET 9.0 的 Blazor Web App 项目中 Hash 变换(MD5、Pbkdf2) 使用备忘

一、生成 string 对应的 MD5 码 /// <summary>/// 生成 string 对应的 MD5 码/// </summary>/// <param name"str">需要转换的字符串 string&#xff1a;用于登录认证时&#xff0c;str username 线下传递的key DateTime.Now.Ticks.ToString() …

“UniApp的音频播放——点击视频进入空白+解决视频播放器切换视频时一直加载的问题”——video.js、video-js.css

今天&#xff0c;又解决了一个单子“UniApp的音频播放——点击视频进入空白解决视频播放器切换视频时一直加载的问题” 一、问题描述 在开发一个基于 video.js 的视频播放器时&#xff0c;用户通过上下滑动切换视频时&#xff0c;视频一直处于加载状态&#xff0c;无法正常播放…

P3数据结构、数据类型、数字编码、字符编码:保姆级图文详解

文章目录 前言1、数据结构分类1.1、逻辑结构&#xff1a;线性与非线性1.2、物理结构&#xff1a;连续与分散1.3、数据结构的实现方式1.4、数据结构的选择依据 2、基本数据类型2.1、定义与分类2.2、存储形式 3、数字编码3.1、原码、反码与补码3.2、浮点数编码3.3、整数与浮点数区…

【JavaScript】基础内容,HTML如何引用JavaScript, JS 常用的数据类型

HTML 嵌入 Javascript 的方式 引入外部 js 文件 <head> <script Language "javaScript" src"index.js"/> </head>内部声明 <head> <script language"javascript">function hello(){alert("hello word&qu…

解密AIGC三大核心算法:GAN、Transformer、Diffusion Models原理与应用

在当今数字化时代&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术正以前所未有的速度改变着我们的生活和工作方式。从创意无限的文本生成&#xff0c;到栩栩如生的图像创作&#xff0c;再到动听的音乐旋律&#xff0c;AIGC的魔力无处不在。而这一切的背后&#…

Web前端------HTML表格

一.表格标签介绍 表格&#xff0c;类似操作的软件excel一样&#xff0c;通过规范的行列方式展示数据的一种视图&#xff01; 网页中&#xff08;初级开发&#xff09;&#xff0c;对于这种规范的数据&#xff0c;使用表格标签最方便的&#xff1b; 实际开发&#xff08;高级开…

关于AWS网络架构的思考

目录&#xff1a; AWS概述 EMR Serverless AWS VPC及其网络 关于AWS网络架构的思考 在AWS K8S中部署的业务&#xff0c;有不同的流量路径。 流量进入 客户端请求 普通的客户端流量流向从前到后是: 客户端公司网关(endpoint)业务的Endpoint ServiceLoad Balancers(监听80和…

玩转随机数:用 JavaScript 掌控不可预测的魔力!

玩转随机数&#xff1a;用 JavaScript 掌控不可预测的魔力&#xff01; 当计算机遇上“随机”&#xff0c;我们能做什么&#xff1f; 你曾想过在生活中拥有“超能力”吗&#xff1f;比如&#xff0c;可以预测下一个天气变化&#xff0c;或是猜中下一个彩票号码&#xff1f;虽…