当前位置: 首页 > news >正文

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

概念

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

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

相关文章:

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

概念 任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。 其核心功能如图片所示,包括: 内核 (Kernel): 内核是操作系统的核心部分,被认为是狭义上的操作系统,直接与硬件打交道。负责进程管理、内…...

Java中对list数据进行手动分页(可直接复用版)

1.获取list列表数据 // 这边用的mybatisplus查询的sql。条件自己组装 List<实体类> result baseMapper.getPageData(lambdaQuery); 2.计算总记录数 // 计算总记录数 int totalRecords result.size(); 3.创建分页对象&#xff0c;并塞入结果值 // 创建分页对象 IPa…...

【HarmonyOS NEXT】鸿蒙跳转华为应用市场目标APP下载页

【HarmonyOS NEXT】鸿蒙跳转华为应用市场目标APP下载页 一、问题背景&#xff1a; 如今&#xff0c;大家都离不开各种手机应用。随着鸿蒙系统用户越来越多&#xff0c;大家都希望能在鸿蒙设备上快速找到想用的 APP。华为应用市场里有海量的 APP&#xff0c;但之前从鸿蒙设备进…...

《研发管理 APQP 软件系统》——汽车电子行业的应用收益分析

全星研发管理 APQP 软件系统在汽车电子行业的应用收益分析 在汽车电子行业&#xff0c;技术革新迅猛&#xff0c;市场竞争激烈。《全星研发管理 APQP 软件系统》的应用&#xff0c;为企业带来了革命性的变化&#xff0c;诸多收益使其成为行业发展的关键驱动力。 《全星研发管理…...

【IDEA 2024】学习笔记--文件选项卡

在我们项目的开发过程中&#xff0c;由于项目涉及的类过多&#xff0c;以至于我们会打开很多的窗口。使用IDEA默认的配置&#xff0c;个人觉得十分不便。 目录 一、设置多个文件选项卡按照文件字母顺序排列 二、设置多个文件选项卡分行显示 一、设置多个文件选项卡按照文件字…...

Android SystemUI——服务启动流程(二)

在 Andorid 系统源码中,package/apps下放的是系统内置的一些 APP,例如 Settings、Camera、Phone、Message 等等。而在 framework/base/package 下,它们也是系统的 APP,SystemUI 就在此目录下。它控制着整个 Android 系统的界面,但其实他也是一个 APP,不同于一般的 APP,它…...

iOS - 内存对齐

1. 基本的内存对齐 // 对象内存对齐 struct objc_object {// isa 指针 8 字节对齐isa_t isa __attribute__((aligned(8))); };// 定义对齐常量 #define WORD_MASK 7UL // 字对齐掩码 #define WORD_SHIFT 3UL // 字对齐位移 #define WORD_SIZE 8 …...

小游戏前端地区获取

目前前端获取除了太平洋&#xff0c;没有其它的了。 //在JS中都是使用的UTF-8&#xff0c;然而requst请求后显示GBK却是乱码&#xff0c;对传入的GBK字符串&#xff0c;要用数据流接收&#xff0c;responseType: "arraybuffer" tt.request({url: "https://whoi…...

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

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

MDX语言的多线程编程

MDX语言的多线程编程 引言 多线程编程是一种重要的编程技术&#xff0c;广泛用于提高程序的运行效率和响应速度。随着计算机硬件的发展&#xff0c;多核处理器的普及&#xff0c;多线程编程显得尤为重要。MDX&#xff08;Multi-dimensional Expressions&#xff09;语言作为一…...

Vue.js组件开发-实现输入框与筛选逻辑

在Vue.js组件开发中&#xff0c;实现输入框与筛选逻辑通常涉及创建一个输入框组件&#xff0c;让用户能够输入搜索关键字&#xff0c;并根据这些关键字过滤一个数据列表。 步骤 ‌准备数据‌&#xff1a; 在Vue组件中&#xff0c;准备一个数据列表&#xff08;通常是一个数组…...

配置Allure环境变量【macOS版】

1. 进入github官网&#xff0c;搜索allure 点击进入&#xff0c;下滑找到Download栏目&#xff0c;点击release 2. 下载安装包并解压 我下载的是zip&#xff0c;解压至存放目录&#xff0c;复制该目录。&#xff08;一会配置环境变量用&#xff09; 3. 编辑.zsrch文件&…...

AndroidStudio升级到2024.2.2项目AGP升级8.8.0版本记录

背景 升级as&#xff0c;一般会把agp一起升级。我的原来版本是8.7.2 plugins {id com.android.application version 8.7.2 apply falseid com.android.library version 8.7.2 apply falseid org.jetbrains.kotlin.android version 1.8.10 apply false }升级后版本&#xff1a…...

Require:利用MySQL binlog实现闪回操作

1&#xff0c;闪回原理 【binlog】MySQL binlog以event的形式&#xff0c;记录了MySQL server从启用binlog以来所有的变更信息&#xff0c;能够帮助重现这之间的所有变化。MySQL引入binlog主要有两个目的&#xff1a;一是为了主从复制&#xff1b;二是某些备份还原操作后需要重…...

计算机网络 (40)域名系统DNS

前言 计算机网络域名系统DNS&#xff08;Domain Name System&#xff09;是互联网的基础技术之一&#xff0c;它负责将人类可读的域名转换为计算机用来通信的数字IP地址。 一、基本概念 DNS的主要目的是将域名解析或翻译为IP地址&#xff0c;使得用户可以通过简单易记的域名来访…...

UE5游戏性能优化指南

UE游戏性能和场景优化思路&#xff1a; 1. 可以把可延展性调低&#xff0c;帧率会大幅提高&#xff0c;但画质会大幅降低 2.调整固定灯光&#xff0c;静态光源&#xff0c;烘焙构建光照&#xff0c;灯光重叠距离&#xff0c;关闭阴影 3.设置模型和地形LOD 4.开启Nanite&…...

Gitlab Runner安装与配置

由于格式和图片解析问题&#xff0c;为了更好阅读体验可前往 阅读原文 本篇使用Docker安装Gitlab runner进行runner的安装和注册&#xff0c;其他方式请参考官方文档非Docker安装Gitlab runner 请确保runner版本和gitlab版本兼容以及docker相关版本兼容问题 下载镜像 docker p…...

如何有效防止和解决IP劫持问题

一、什么是IP劫持&#xff1f; IP劫持是一种攻击方式&#xff0c;攻击者通过伪装成合法的IP地址欺骗网络系统&#xff0c;从而非法获取数据或中断服务。这种攻击可以导致数据泄露、服务不可用等多种严重后果。 二、防范措施 启用SSL/TLS加密 SSL/TLS协议可以在客户端和服务器…...

2006-2020年各省人均水资源量数据

2006-2020年各省人均水资源量数据 1、时间&#xff1a;2006-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、人均水资源量 4、范围&#xff1a;31省 5、指标解释&#xff1a;人均水资源量是指一个国家或地区在一定时期…...

C++基础入门(二)

目录 前言 一、重载 1.函数重载 2.运算符重载 二、构造函数 1.什么是构造函数 2.带参数的构造函数 3.使用初始化列表 4.this关键字 5.new关键字 三、析构函数 1.什么是析构函数 四、静态成员变量 1.静态成员的定义 2.静态成员变量的作用 五、继承 1.继承基本概…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...