深入理解操作系统Operator System(2)

目录

操作系统对上的管理

系统调用接口

用户操作接口(库函数)

系统调用和库函数的概念

结构层次示意图

总结

为什么要有操作系统❓


上次主要介绍了操作系统的"管理"和操作系统对下的管理。本篇主要是对上的管理。

操作系统对上的管理

  • 用户可以直接访问硬件吗?

当然不能!!任何对硬件的操作都必须经过操作系统。像scanf/printf需要使用硬件,它们底层都必须使用操作系统


  • 操作系统内包含软硬件的属性数据,用户可以直接访问操作系统吗?

非常不合理!!让用户直接去操作系统内部访问软硬件资源属性数据不可能的。那我们怎样去访问操作系统呢?

就像银行不能让存钱的客户自己去银行的保险柜里放钱,然后把自己去银行的电脑上加上存钱的数额。这是非常危险和不切实际的。银行既要保证安全,又要让客户访问银行存钱。

  • 所以银行就会开设一个一个窗口。只要根据窗口就可以访问银行存钱了。
  • 同理可得,操作系统也开设一层软件层,也就是面向访问操作系统的窗口,称"系统调用接口"

可是有些爷爷奶奶年纪很大,不会自己去区号排序办手续存钱,这是银行就会提供"客户经理"和"前台"等服务去帮助它们。同样用户/程序员,觉得访问系统调用接口太过复杂。

  • 编译器就把系统调用接口封装称"库/shell外壳/指令"等用户操作接口以便用户使用。

系统调用接口

  • 系统调用是操作系统提供的函数
  • 系统调用是一层软件层
  • 操作系统不一样,提供的系统调用接口不一样

  • 用户输入参数到系统调用接口,接口传给操作系统,操作系统返回参数给接口传给用户
  • 系统调用使整个操作系统处于一种安全/稳定的状态
  • 使用户,安全稳定的获取到系统内的软硬件资源属性的数据
  • 我们学习对"软件"的管理,对进程/线程/文件/信号的管理都是对系统调用接口的学习
  • printf/scanf本质是调用系统调用对应的接口,由操作系统控制,通过驱动层写入硬件(显示器)

  • 综上所述:用户访问操作系统直接/间接都使用了系统调用接口

那怎样间接访问系统调用接口呢?

用户操作接口(库函数)

  • 间接访问系统调用接口:就是把系统调用接口封装成库直接提供给用户使用。
  • 我们已经使用过的:C/C++标准库
  • 我们下在VS2022的时候,下载时不仅仅安装了编译器,还安装对应的"库"

关于直接/间接使用系统调用函数直接关系到这段代码是否具有跨平台性。

  • 不具有跨平台性:直接使用系统调用接口
  • 具有跨平台性:使用用户操作系用的(库等)
  • 因为系统调用接口时和操作系统配套的。操作系统是Linux,那么系统调用接口也是Linux。同理,操作系统是windows,那么系统调用接口也是windows。二者的系统调用不能跨平台使用。
  • 例如:我们的printf在Linux或windows底下都可以使用,是因为虽然系统调用底层实现不一样,但是对上C/C++标准库(封装成库)是一样都可以使用,具有跨平台性。

系统调用和库函数的概念

  • 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
  • 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

结构层次示意图

总结

  • 获取数据。
  • 先描述,再组织。 
  • 对硬件的管理:操作系统是硬件的"管理者" ,所以用户访问硬件必须通过操作系统。
  • 计算机管理硬件
  1. 描述起来,用struct结构体
  2. 组织起来,用链表或其他高效的数据结构
  • 对软件的管理:进程/线程/文件/型号的系统调用接口。
  • 驱动层。
  • 系统调用层/用户调用接口。

为什么要有操作系统❓

  • 以人为本
  • 操作系统对下层进行软硬件管理工作。(手段)
  • 操作系统对上层提供良好的(高效,稳定,安全)运行环境。(目的)
  • 操作系统就是一个工具。

🙂感谢大家的阅读,若有错误和不足,欢迎指正。下篇进入【进程】的概念了。在学习进程之前,就问大家,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把
进程组织起来!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux智能网关结合Node-RED实现实时工业数据采集

工业4.0的发展,物联网技术在制造业中的应用越来越广泛。其中,基于Linux系统的工业物联网智能网关因其开放性、稳定性和安全性而备受青睐。这类智能网关创新性地集成了开源工具Node-RED,为从各种工业设备(如PLC)中高效收…

安装torch以及版本对应问题

首先查看cuda版本:winR 输入:nvidia -smi 我的cuda版本12.2,安装的torch版本要小于12.2 我的pip/conda源都改成清华源了,torch2.0以上的版本截止到2024年3月10日也没有。 pytorch官网:https://pytorch.org/ 寻找匹配…

关于比特币的AI对话

【ChatGPT】 比特币源码开源吗? 是的,比特币的源码是开源的。比特币项目是在MIT许可证下发布的,这意味着任何人都可以查看、修改、贡献和分发代码。比特币的源码托管在GitHub上,可以通过下面的链接进行访问: https://g…

注意!!墙裂推荐几个好用的实用小工具!一定会用到的!

前言 在开发的世界里,面对各种挑战和问题时,拥有一套合适的工具箱至关重要。这不仅能提升我们的工作效率,还能让复杂的任务变得简单,甚至在解决棘手问题的同时,还能让我们的心情略微舒畅。众所周知,有用的…

【EtherCAT实践篇】九、EtherCAT增加变量示例:增加浮点数输入变量

目的:在EtherCAT开发板上IO程序基础上进行修改,将原来的16位整数型数据Analog input改为32位浮点数,基于STM32F405底板。 1、XML配置修改 1.1 更改数据类型 ETG1020基础数据中包括浮点数 REAL,可以直接使用浮点数。 这里在xml…

MySQL索引+常见问题详解

网络上的讲述MySQL索引的文章太多了,我打算换个角度来说。我们尝试着从设计者的角度思考,索引为什么这么设计。 假如你是索引的设计者,你会如何设计索引。我们不妨以新华字典为例。如果我们要查询汉字爱是什么意思,我们有如下操作…

【读书笔记】针对ICS的ATTCK矩阵详解(一)

Techniques - ICS | MITRE ATT&CKhttps://attack.mitre.org/techniques/ics/ 一、初始访问(Initial Access) 该阶段:攻击者正在尝试进入ICS环境。 初始访问包括攻击者可能用作入口向量,从而可以在 ICS 环境中获得初始立足点的…

怎么在学习强国网上发布文章,学习强国投稿发稿方法途径,附学习强国多少钱价格明细表

学习强国是一款受用户欢迎的学习软件,许多人希望在其平台上发布自己的文章,以分享和传播自己的学习成果和心得体会。那么,怎么在学习强国网上发布文章呢?接下来,我们将介绍一些投稿发稿的方法和途径。 首先&#xff0c…

PLC的FC与FB模块程序的功能解析

前文讲了在西门子系列的PLC中四个程序模块的描述,从S7-1200PLC开始就有FC和FB程序块了,但在使用的时候,一些使用者还是不好理解,以至于不知道该如何选择。今天,我们就用大白话的方式给大家讲解FC与FB的功能。 1、FC与…

Python打印Linux系统中最常用的linux命令之示例

一、Linux中的~/.bash_history文件说明: 该文件保存了linux系统中运行过的命令的历史。使用该文件来获取命令的列表,并统计命令的执行次数。统计时,只统计命令的名称,以不同参数调用相同的命令也视为同一命令。 二、示例代码&am…

数据结构二叉树续

在前边我们讲完了二叉树的一些代码结构 现在呢我们需要进一步去细化 我们传参数组后,让数组里面的数据进行调整 如何调整成堆呢? 建堆 所以我们分装一个成堆的函数 还是先去断言 然后创建空间 这里我们需要用到一个memcpy函数 memcpy函数是用来…

RabbitMQ - 07 - 通过注解创建队列和交换机

之前消息模型的实现,都是通过rabbitMQ Management 控制台来手动创建 queue 和 exchange 的 在项目开发中有两种方式通过代码声明 创建 一种是通过 Bean 方式,这种代码量较大 稍繁琐 一种是通过注解的方式声明 先编写消费者代码 通过注解绑定了 消息队列,交换机,还有 routin…

预约自习室

预约自习室 1、技术介绍 自习室预约系统的后端开发语言采用Node,后端开发框架采用Express,数据库采用的Node的最佳搭档MySQL。采用Vue作为前端开发框架,Element-UI作为开发的组件库,微信小程序。期间采用axios实现网页数据获取&a…

Linux 进程程序替换

💓博主CSDN主页:麻辣韭菜-CSDN博客💓   ⏩专栏分类:http://t.csdnimg.cn/G90eI⏪   🚚代码仓库:Linux: Linux日常代码练习🚚   🌹关注我🫵带你学习更多Linux知识   🔝&#x1f5…

springboot257基于SpringBoot的中山社区医疗综合服务平台

中山社区医疗综合服务平台的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,居民信息因为其管理内容繁杂,管…

车载诊断协议DoIP系列 —— 传输层控制协议(TCP)用户数据报协议(UDP)

车载诊断协议DoIP系列 —— 传输层控制协议(TCP)&用户数据报协议(UDP) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎…

【notepad++工具使用之】批量加逗号

背景 在使用sql语句in关键字查询时,我们需要把数据用逗号进行隔开,在数据量非常少的时候(十几二十个这样),可以手动的去加逗号分隔符; 但是遇到1000个怎么弄呢? 强大的Notepad 批量处理数据时…

macOS14.4安装FFmpeg及编译FFmpeg源码

下载二进制及源码包 二进制 使用brew安装ffmpeg : brew install ffmpeg 成功更新到ffmpeg6.1 下载FFmpeg源码

CSS拖曳盒子案例

让我为大家带来一个小案例吧&#xff01; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}.box1 {width: 100px;height: 100px;background-color: black;margin-bot…

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型 Shepard模型(简称SP模型)就是一种直观的、可操作的相似预测法&#xff0c;常用于插值。相似预测法基本原理按照相似原因产生相似结果的原则&#xff0c;从历史样本中集中找出与现在的最相似的一…