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

目录

操作系统对上的管理

系统调用接口

用户操作接口(库函数)

系统调用和库函数的概念

结构层次示意图

总结

为什么要有操作系统❓


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

操作系统对上的管理

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

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


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

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

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

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

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

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

系统调用接口

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

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

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

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

用户操作接口(库函数)

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

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

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

系统调用和库函数的概念

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

结构层次示意图

总结

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

为什么要有操作系统❓

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

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

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

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

相关文章

【最新版】ChatGPT/GPT4科研应用与AI绘图论文写作(最新增加Claude3、Gemini、Sora、GPTs技术及AI领域中的集中大模型的最新技术)

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

9. 内核、文件系统加载工具

内核、文件系统加载工具 内核、文件系统加载工具是嵌入式开发必备的工具 1. 烧写BootLoader 1.1 通过超级终端方式 烧写 Bootloader 可以使用超级终端的“传送” |“发送文件”命令进入发送文件对话框,使用 Xmodem 协议和 Kermit 协议发送 Bootloader 的各个文件…

谨慎购买:腾讯云轻量应用服务器限制“月流量”!

腾讯云轻量应用服务器限制月流量,买前必须知道的限制月流量说明,腾讯云百科txybk.com以2核4G5M轻量应用服务器为例,在腾讯云优惠活动 https://curl.qcloud.com/oRMoSucP 这台轻量服务器仅售165元,活动打开如下图: 轻量…

深入理解JavaScript内存泄漏:原因与解决方法

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Leetcode 59.螺旋矩阵Ⅱ

1.题目 2.思路 (借用代码随想录的图) 1.我们将转一圈看作一个循环(1->2->3->4->5->6->7->8 这是一个循环) 2.在这个循环里,我们要画四条边(上右下左) 填充上行从左到右 填…

隐私与创新的交汇点:Partisia Blockchain 重绘技术蓝图

正当我们在这个信息泛滥的时代寻找稳固的信任锚点时,区块链技术应运而生,然而,正如任何科技革命都会遇到的挑战,一个重要的问题摆在了我们面前:如何在不牺牲个人隐私的前提下,享受区块链技术带来的好处&…

【每日一题】2834. 找出美丽数组的最小和-2024.3.8

题目: 2834. 找出美丽数组的最小和 给你两个正整数:n 和 target 。 如果数组 nums 满足下述条件,则称其为 美丽数组 。 nums.length n.nums 由两两互不相同的正整数组成。在范围 [0, n-1] 内,不存在 两个 不同 下标 i 和 j &…

从零学习Linux操作系统 第三十五部分 Ansible中的角色

一、理解roles在企业中的定位及写法 #ansible 角色简介# Ansible roles 是为了层次化,结构化的组织Playbookroles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们roles一般用于基于主机构建服务的场景中&…

链表的基础

目录 顺序表 链表 需要注意的 链表的优势 单链表的实现 1.单链表的准备 2.单链表的结构体的创建 3.单链表的准备 4.前插 5.后插 6.后删 7.前删 8.任意位置前插 9.任意位置后插 10.删除 11.修改 12.打印 13.释放链表 总说链表难,但我感觉只要认真听讲…

⭐每天一道leetcode:83.删除排序链表中的重复元素(简单;链表遍历、删除经典题目)

⭐今日份题目 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例1 输入:head [1,1,2] 输出:[1,2] 示例2 输入:head [1,1,2,3,3] 输出:[1,2,3] …

【Lazy ORM】 小工具 acw 本地客户端 你负责点击页面,他负责输出代码

介绍 wu-smart-acw-client 简称acw-client&#xff0c;是一个基于Lazy ORM定制的客户端代码生成小工具 Lazy ORM 小工具 acw 本地客户端 你负责点击页面&#xff0c;他负责输出代码安装 <dependency><groupId>top.wu2020</groupId><artifactId>wu-sma…

C语言自定义类型——结构体(struct)

【本节内容】 1. 结构体类型的声明 2. 结构体变量的创建和初始化 3. 结构体内存对齐 4. 结构体传参 5. 结构体实现位段 1. 结构体类型的声明 struct tag {member-list; }variable-list; 例如描述一个学生&#xff1a; struct Stu {char name[20];//名字int age;//年…