[操作系统] 深入理解操作系统的概念及定位
概念
任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。
其核心功能如图片所示,包括:
- 内核 (Kernel):
内核是操作系统的核心部分,被认为是狭义上的操作系统,直接与硬件打交道。负责进程管理、内存管理、文件管理和设备管理。
在图片中,内核被描述为包含关键功能,例如:- 进程管理:如何调度任务、切换任务、分配 CPU 时间片。
- 内存管理:分配和释放内存、提供虚拟内存功能。
- 文件管理:存储和访问磁盘上的文件。
- 驱动管理:硬件与系统的接口。
- 其他程序:
除了内核外,操作系统还包括辅助用户交互和程序开发的组件,例如函数库、Shell 程序等。
操作系统的设计目的
对下管理硬件资源(不是目的,是手段)
如图所示,操作系统与硬件直接交互,管理所有软硬件资源。它可以屏蔽底层硬件的复杂性,为应用程序提供统一的接口。例如:
- CPU 时间的分配;
- 内存的分配与回收;
- 文件的读取与写入。
对上为用户和应用程序提供环境(目的,服务用户)
操作系统为用户程序提供执行环境,包括:
- 抽象硬件: 屏蔽底层复杂的硬件接口;
- 系统调用: 提供基础功能调用接口,例如文件操作、内存分配等。
图片中通过银行窗口的比喻形象地说明了这一点:
- 用户(用户程序)与银行柜员(操作系统)交互,柜员接收用户指令,完成后台操作;
- 银行后台资源(硬件)被柜员高效管理,用户无需直接接触。
操作系统如何通过分层结构和接口设计实现资源管理和安全性?
软件硬件系统结构层状结构
理解:
- 软件和硬件系统是层次化的,系统的不同层次之间通过接口进行交互。
- 硬件位于底层,它是最基础的物理资源,直接负责执行指令和存储数据。
- 操作系统位于硬件之上,充当中间层,负责管理硬件资源并为上层应用程序提供接口。
- 应用程序在最上层运行,用户通过应用程序与硬件进行间接交互。
例子:
- 用户通过一个文本编辑器(应用程序)保存文件,实际调用了操作系统的文件系统接口,最终将数据写入硬件(磁盘)。
- 这种分层结构让硬件的复杂性被操作系统屏蔽,开发者只需关注高层的接口,而不需要了解硬件的底层操作。
访问操作系统,必须使用系统调用
理解:
- 系统调用是应用程序与操作系统交互的桥梁。通过系统调用,应用程序可以访问操作系统管理的资源(如文件、网络、内存等)。
- 系统调用本质上就是操作系统提供的一组函数,通过这些函数,应用程序可以向操作系统发出请求,完成特定的任务。
例子:
- 程序需要读取文件时,会通过调用系统调用
read()
请求操作系统打开文件、读取内容。 - 这些调用本质上是程序员使用的函数,但这些函数是操作系统实现的,而不是直接操作硬件。
关键点:
- 系统调用是操作系统对外暴露的功能接口,它们是固定的,程序必须通过这些接口访问硬件资源。
访问硬件时,必须穿越整个软件硬件体系结构
理解:
- 如果程序需要访问硬件(如读取硬盘、打印文件等),操作必须逐层向下传递:
- 程序向操作系统发出系统调用请求。
- 操作系统内部将请求映射到具体的硬件驱动程序。
- 硬件驱动直接控制硬件完成任务。
- 这种机制确保了硬件操作的安全性和一致性,因为操作系统充当了硬件和程序之间的“守门人”。
例子:
- 一个浏览器需要加载网页,最终会访问网络适配器(硬件)发送请求。这个过程包括:
- 浏览器调用系统的网络 API;
- 操作系统将请求传递给网络驱动程序;
- 驱动程序控制网络硬件发送数据包。
关键点:
- 程序无法直接访问硬件,必须经过操作系统。操作系统确保硬件资源的安全和公平使用。
库函数可能底层封装了系统调用
理解:
- 库函数是对系统调用的进一步封装,提供了更高级、更易用的功能。底层的系统调用是基础功能,而库函数对其进行了扩展和优化。
- 通过调用库函数,开发者无需直接与复杂的系统调用打交道,而是通过更简单的接口完成同样的任务。
例子:
- C 语言的
printf()
函数用于输出内容到终端,它底层调用了操作系统的write()
系统调用来完成实际的输出。 - 类似地,标准库函数
fopen()
封装了文件操作的系统调用,使开发者可以更简单地处理文件。
关键点:
- 库函数是对系统调用的进一步抽象,提供了更方便的功能,同时隐藏了底层实现细节。
小结
这四个要点说明了操作系统作为用户程序与硬件之间的桥梁,如何通过分层结构和接口设计实现资源管理和安全性:
- 软件硬件的层状结构让复杂的硬件操作被逐层抽象。
- 系统调用是访问操作系统的唯一合法方式,程序必须通过它请求资源。
- 程序访问硬件时,必须经过操作系统的管理,确保硬件安全和公平。
- 库函数对系统调用进行了封装,使开发更加方便。
这种机制体现了操作系统设计的核心思想——通过抽象和封装,隐藏复杂性,提供易用性,同时确保安全性和稳定性。
操作系统的核心功能
管理。
在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件。 (决策,执行)
管理时,管理与被管理者可以不需要见面:
一个学校的校长(管理者)不需要直接与每个学生(被管理者)接触,就可以管理整个学校。这是因为校长可以通过辅导员或者班主任提供的学生数据(如成绩、出勤率等)来完成管理。
管理者(如操作系统)和被管理者(如进程、内存、文件等)之间的交互并不需要直接接触。它们通过数据(描述信息)来完成管理,而不是通过面对面或者直接交互。换句话说,操作系统不需要直接干预具体的硬件或程序,只需要维护这些被管理对象的状态和描述信息,然后根据需要进行操作。
管理者和被管理者,根据“数据”进行管理:
数据是管理的核心。操作系统不直接操作资源本身,而是通过对资源数据的读取和操作来实现管理。
管理的核心是数据,管理者通过记录和操作被管理者的相关数据实现对其的控制。在操作系统中,这些数据通常存储在内核中,描述了被管理资源的状态和属性。
不需要见面,由中间层获取得到数据:
在学校中,校长通过辅导员获取学生的信息,而不需要直接接触每个学生。辅导员就像操作系统中的“中间层”,负责收集数据并提供给校长。
操作系统作为“中间层”负责采集和维护资源数据,通过这些数据为用户程序提供服务。被管理者(如硬件设备、程序)本身并不会直接暴露其内部信息,而是通过操作系统的中间层将这些数据呈现给管理者。
将上文所述例子进行延伸,如果学生的数量过多则会造成管理的不便,所以就会使用数据结构将学生的信息进行存储,用结构体将一个学生的信息进行存储,然后将所有结构体进行联系。
同样,操作系统对管理的进程、内存、文件等就可以将他们的状态和描述信息进行存储在结构体中,然后使用合适的数据结构进行管理,进行增删查改。
系统调用与库函数
系统调用
操作系统要向上提供服务。
但是操作系统不信任任何用户,所以会有系统调用的概念。
操作系统对外暴露的接口称为系统调用,是用户程序与操作系统交互的桥梁。
通过接口可以降低操作系统和用户之间的耦合度,不同的服务对应不同的接口,提高安全性。
例如:
- 文件操作:创建、删除、读写文件;
- 进程操作:创建进程、终止进程;
- 内存操作:分配和释放内存。
库函数
只要库函数最终使用了硬件,则该库函数一定使用了系统调用。
系统调用直接提供基础功能,但对于用户来说,使用这些功能可能过于复杂。因此,开发者会基于系统调用开发封装好的库函数。
比如软件的使用中我们只需要点击对应的按键,即可执行程序员已经封装好的系统调用。程序员用已经把系统调用封装好的库函数再次进行封装成接口,提供给用户使用,这就是对上进行服务。
例如:
printf()
是基于 I/O 系统调用封装的函数;- 标准 C 库(如
libc
)对操作系统的功能进行了更高层次的抽象。
管理的本质
描述和组织。
比如,大部分高级语言都可以面向对象编程,以及有类似于STL库的使用。面向对象,将事物用结构体进行封装的过程实际上就是描述,用STL库使用数据结构将结构体进行管理就是将描述后的内容进行组织。
- 描述被管理对象:
使用数据结构(如结构体)对资源进行描述。例如:- 文件描述符;
- 进程控制块(PCB)。
- 组织被管理对象:
使用数据结构(如链表、队列)将资源高效组织起来。例如:- 进程调度使用的就绪队列;
- 内存管理中的空闲链表。
这种管理方式贯穿于操作系统的各个模块,是操作系统高效运行的核心思想。
承上启下:操作系统的核心价值
操作系统的核心价值体现在:
- 对资源的统一管理和抽象: 提供统一的接口,屏蔽硬件复杂性;
- 保障用户程序的安全与高效: 防止资源冲突,提高系统性能。
操作系统的管理方法(描述 + 组织)也贯穿其设计理念:
- 描述资源(结构体);
- 组织资源(链表等高效数据结构)。
通过以上详细的讲解,我们可以更好地理解操作系统在计算机系统中的定位:它既是硬件资源的管理者,又是用户与硬件交互的桥梁。无论是进程管理、内存管理还是文件管理,操作系统的设计哲学始终围绕“管理”展开。
相关文章:
[操作系统] 深入理解操作系统的概念及定位
概念 任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。 其核心功能如图片所示,包括: 内核 (Kernel): 内核是操作系统的核心部分,被认为是狭义上的操作系统,直接与硬件打交道。负责进程管理、内…...
Java中对list数据进行手动分页(可直接复用版)
1.获取list列表数据 // 这边用的mybatisplus查询的sql。条件自己组装 List<实体类> result baseMapper.getPageData(lambdaQuery); 2.计算总记录数 // 计算总记录数 int totalRecords result.size(); 3.创建分页对象,并塞入结果值 // 创建分页对象 IPa…...
【HarmonyOS NEXT】鸿蒙跳转华为应用市场目标APP下载页
【HarmonyOS NEXT】鸿蒙跳转华为应用市场目标APP下载页 一、问题背景: 如今,大家都离不开各种手机应用。随着鸿蒙系统用户越来越多,大家都希望能在鸿蒙设备上快速找到想用的 APP。华为应用市场里有海量的 APP,但之前从鸿蒙设备进…...
《研发管理 APQP 软件系统》——汽车电子行业的应用收益分析
全星研发管理 APQP 软件系统在汽车电子行业的应用收益分析 在汽车电子行业,技术革新迅猛,市场竞争激烈。《全星研发管理 APQP 软件系统》的应用,为企业带来了革命性的变化,诸多收益使其成为行业发展的关键驱动力。 《全星研发管理…...
【IDEA 2024】学习笔记--文件选项卡
在我们项目的开发过程中,由于项目涉及的类过多,以至于我们会打开很多的窗口。使用IDEA默认的配置,个人觉得十分不便。 目录 一、设置多个文件选项卡按照文件字母顺序排列 二、设置多个文件选项卡分行显示 一、设置多个文件选项卡按照文件字…...
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 …...
小游戏前端地区获取
目前前端获取除了太平洋,没有其它的了。 //在JS中都是使用的UTF-8,然而requst请求后显示GBK却是乱码,对传入的GBK字符串,要用数据流接收,responseType: "arraybuffer" tt.request({url: "https://whoi…...
AIGC时代:如何快速搞定Spring Boot+Vue全栈开发
文章目录 一、Spring Boot基础二、Vue.js基础三、Spring Boot与Vue.js集成四、性能优化与最佳实践《快速搞定Spring BootVue全栈开发》 内容简介作者简介目录前言/序言本书内容本书特点读者对象 随着人工智能生成内容(AIGC)技术的迅速发展,…...
MDX语言的多线程编程
MDX语言的多线程编程 引言 多线程编程是一种重要的编程技术,广泛用于提高程序的运行效率和响应速度。随着计算机硬件的发展,多核处理器的普及,多线程编程显得尤为重要。MDX(Multi-dimensional Expressions)语言作为一…...
Vue.js组件开发-实现输入框与筛选逻辑
在Vue.js组件开发中,实现输入框与筛选逻辑通常涉及创建一个输入框组件,让用户能够输入搜索关键字,并根据这些关键字过滤一个数据列表。 步骤 准备数据: 在Vue组件中,准备一个数据列表(通常是一个数组…...
配置Allure环境变量【macOS版】
1. 进入github官网,搜索allure 点击进入,下滑找到Download栏目,点击release 2. 下载安装包并解压 我下载的是zip,解压至存放目录,复制该目录。(一会配置环境变量用) 3. 编辑.zsrch文件&…...
AndroidStudio升级到2024.2.2项目AGP升级8.8.0版本记录
背景 升级as,一般会把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 }升级后版本:…...
Require:利用MySQL binlog实现闪回操作
1,闪回原理 【binlog】MySQL binlog以event的形式,记录了MySQL server从启用binlog以来所有的变更信息,能够帮助重现这之间的所有变化。MySQL引入binlog主要有两个目的:一是为了主从复制;二是某些备份还原操作后需要重…...
计算机网络 (40)域名系统DNS
前言 计算机网络域名系统DNS(Domain Name System)是互联网的基础技术之一,它负责将人类可读的域名转换为计算机用来通信的数字IP地址。 一、基本概念 DNS的主要目的是将域名解析或翻译为IP地址,使得用户可以通过简单易记的域名来访…...
UE5游戏性能优化指南
UE游戏性能和场景优化思路: 1. 可以把可延展性调低,帧率会大幅提高,但画质会大幅降低 2.调整固定灯光,静态光源,烘焙构建光照,灯光重叠距离,关闭阴影 3.设置模型和地形LOD 4.开启Nanite&…...
Gitlab Runner安装与配置
由于格式和图片解析问题,为了更好阅读体验可前往 阅读原文 本篇使用Docker安装Gitlab runner进行runner的安装和注册,其他方式请参考官方文档非Docker安装Gitlab runner 请确保runner版本和gitlab版本兼容以及docker相关版本兼容问题 下载镜像 docker p…...
如何有效防止和解决IP劫持问题
一、什么是IP劫持? IP劫持是一种攻击方式,攻击者通过伪装成合法的IP地址欺骗网络系统,从而非法获取数据或中断服务。这种攻击可以导致数据泄露、服务不可用等多种严重后果。 二、防范措施 启用SSL/TLS加密 SSL/TLS协议可以在客户端和服务器…...
2006-2020年各省人均水资源量数据
2006-2020年各省人均水资源量数据 1、时间:2006-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、人均水资源量 4、范围:31省 5、指标解释:人均水资源量是指一个国家或地区在一定时期…...
C++基础入门(二)
目录 前言 一、重载 1.函数重载 2.运算符重载 二、构造函数 1.什么是构造函数 2.带参数的构造函数 3.使用初始化列表 4.this关键字 5.new关键字 三、析构函数 1.什么是析构函数 四、静态成员变量 1.静态成员的定义 2.静态成员变量的作用 五、继承 1.继承基本概…...
互联网架构困境:网络与信息安全
当我们说 TCP/IP 没有内置安全属性时,这到底是什么意思?事实上仔细观察身边的世界,很少有内置安全属性的,这源自于石器时代的野人们没有粮仓需要保护。 “互联网前身 ARPAnet 最初来自于美国国防部对等通信需求”,即使…...
HIVE技术
本文章基于黑马免费资料编写。 hive介绍 简介 hive架构 hive需要启动的配置 执行元数据库初始化命令 使用hive必须启动的服务 ./schematool -initSchema -dbType mysql -verbos启动 Hive 创建一个 hive 的日志文件夹 mkdir /export/server/hive/logs启动元数据管理服务 n…...
RustDesk ID更新脚本
RustDesk ID更新脚本 此PowerShell脚本自动更新RustDesk ID和密码,并将信息安全地存储在Bitwarden中。 特点 使用以下选项更新RustDesk ID: 使用系统主机名生成一个随机的9位数输入自定义值 为RustDesk生成新的随机密码将RustDesk ID和密码安全地存储…...
卷积神经网络的底层是傅里叶变换
1 卷积神经网络与傅里叶变换、希尔伯特空间坐标变换的关系_卷积神经网络与傅里页变换之间的关系-CSDN博客 从卷积到图像卷积再到卷积神经网络,到底卷了什么? 一维信号卷积:当前时刻之前的每一个时刻是如何对当前时刻产生影响的 图像卷积&…...
Bootstrap 下拉菜单
Bootstrap 下拉菜单 Bootstrap 是一个流行的前端框架,它提供了许多预构建的组件,其中之一就是下拉菜单。下拉菜单是一个交互式元素,允许用户从一系列选项中选择一个。在本篇文章中,我们将详细介绍如何在 Bootstrap 中创建和使用下…...
计算机组成原理(计算机系统3)--实验一:WinMIPS64模拟器实验
一、实验目标: 了解WinMIPS64的基本功能和作用; 熟悉MIPS指令、初步建立指令流水执行的感性认识; 掌握该工具的基本命令和操作,为流水线实验做准备。 二、实验内容 按照下面的实验步骤及说明,完成相关操作记录实验…...
读书笔记~管理修炼-风险性决策:学会缩小风险阈值
假设你的团队为了提升业绩,提出了两个解决方案:A方案是通过营销提升老产品的利润;B方案是通过研发开拓新产品,你会怎么选? 我们先来分析下,其实无论是A方案还是B方案,都会遇到市场难题…...
VIVADO FIFO (同步和异步) IP 核详细使用配置步骤
VIVADO FIFO (同步和异步) IP 核详细使用配置步骤 目录 前言 一、同步FIFO的使用 1、配置 2、仿真 二、异步FIFO的使用 1、配置 2、仿真 前言 在系统设计中,利用FIFO(first in first out)进行数据处理是再普遍不过的应用了,…...
tcp粘包原理和解决
tcp粘包原理和解决 咱们先通过展示基于tcp 的cs端消息通信时的现象,带着问题再解释下面的tcp粘包问题。 一、原始代码 tcp 服务端代码 // socket_stick/server/main.gofunc process(conn net.Conn) {defer conn.Close()reader : bufio.NewReader(conn)var bu…...
C语言预处理艺术:编译前的魔法之旅
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、预处理的作用与流程…...
山东网站备案注销申请表/优化设计四年级上册语文答案
1、SDK:Software Development Kit,软件开发包 GUI:Graphical User Interface,图形用户接口 GDI:Graphical Derice Interface,图形设备接口 2、句柄用来标识各种资源和对象。 HANDLE:句柄 HWND&…...
高级网站开发工信部/dw软件怎么制作网页
简单的 jdbcTemplate案例 切面 环绕通知 案例简介 : 使用jdbcTemplate 对 emp表 进行CRUD(增删改查)并且记录每次方法的执行时间并保存 1、切面类 用于记录每次方法的执行时间并保存 public class MyAspect {EmpService empService new…...
影视 网站建设 新媒体/网站优化检测
索引的使用,Insert into select语句引发的生产事故 转载:https://juejin.im/post/6844904086173646862 转载理由:实操性极强...
2008 iis7添加网站/惠州seo排名
官方文档地址:https://github.com/axios/axios axios 是一个基于 Promise 的HTTP库,可以用在浏览器和 node.js 中 特性: • 从浏览器发起 XMLHttpRequests 请求 • 从 node.js 发起 http 请求 • 支持 Promise API • 拦截请求和响应 • 转换…...
天津网站建设学习/seo分析工具
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。 而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。 1.MySQL主要存储引擎的区别 …...
wordpress mobile 主题/广告平台推广渠道
最近对人脸识别感兴趣,于是入坑安装Face_recognition,花一天功夫没装下来,我的系统和Python版本是win64Anacond(python3.7.1)。 一天下来搞明白了想安装face_recongnition的必需配置好Dlib, 配置好dlib的必要条件是:自…...