Linux -- 操作系统(软件)

目录

什么是操作系统?

计算机的层状结构

为什么要有操作系统 

操作系统到底层硬件 

驱动程序

操作系统如何管理硬件?

操作系统到用户

系统调用接口

库函数

回到问题


什么是操作系统?

操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,它是用户与计算机硬件之间的接口。

操作系统的主要功能包括:

  1. 进程管理:操作系统负责创建和终止进程,同时管理进程之间的通信和同步。

  2. 内存管理:它分配内存给应用程序,并确保这些应用程序之间不会相互干扰,同时也回收不再使用的内存空间。

  3. 文件系统管理:提供文件创建、删除、读写等功能,以及组织和维护文件系统的结构。

  4. 设备管理:管理和控制各种外部设备,比如打印机、扫描仪等,使它们能够与计算机交互。

  5. 安全保护:确保系统的安全性和数据的完整性,防止未授权访问和恶意攻击。

  6. 用户界面:提供图形用户界面(GUI)或命令行界面(CLI),让用户可以方便地与计算机进行交互。

计算机的层状结构

为什么要有操作系统 

操作系统到底层硬件 

驱动程序

驱动程序(Driver)是一种特殊的计算机程序,它充当操作系统与硬件设备之间的桥梁,使得操作系统能够识别和控制各种硬件设备。每个硬件设备,无论是内置的(如硬盘、显卡)还是外接的(如打印机、鼠标),通常都需要相应的驱动程序才能正常工作。驱动程序提供访问硬件的接口,操作系统调用相关的接口来访问硬件。

操作系统如何管理硬件?

从生活中的例子来理解,以学校管理学生为例,每个学生都有自己的姓名、性别、学号、专业等,每个学生的姓名都是不一样的,但是每个学生都有姓名,姓名属于学生的一个属性,学校需要知道学生的相关信息,比如姓名、性别、学号、专业、绩点等,才可以决定哪些学生可以评奖学金、推优,哪些学生会被开除学籍。

在管理硬件上也是同理,操作系统需要知道硬件的设备名、状态(是开机还是关机)、优先级等,才能对硬件进行管理。

也就是说,我们需要知道硬件的相关属性,先描述这些属性,定义相关的变量来记录这些属性,才可以对硬件进行管理,即 先描述再组织

可以用 struct 将多个相关联的数据项组织在一个单元中,便于管理和操作。

定义出结构体之后,这个结构体就可以看作链表的一个结点。

  • 假设现在是开学季,需要对新生的数据进行管理,其实可以看作往链表中新增结点;
  • 如果需要开除学生,其实可以看作把该学生对应的结点从链表中删除;
  • 如果有学生转专业了,修改该学生的专业,也可以看作修改链表的结点中的变量;
  • 如果期末周结束了,辅导员需要查学生的绩点,可以看作查找该结点的内容。

从上面的例子可以看出,对学生的管理,变成了链表的增删查改!

操作系统对硬件的管理也是相同的道理,对硬件的管理,变成对链表的增删查改

操作系统除了管理硬件外,还需要管理驱动程序,而对驱动程序的管理和对硬件的管理是同理的,先描述再组织,定义出 struct 结构体后,变为对链表的增删查改

操作系统到用户

系统调用接口

以银行为例,用户去银行办理业务时,并不是自己进入到银行的后台系统,随意操作后台系统,随意篡改数据,随便修改银行卡的余额,而是通过前台窗口,与工作人员沟通,办理完业务的,银行不直接对外暴露内部的信息,而是提供窗口,相对安全地向外界提供服务。

计算机也是同理,用户并不是直接进入操作系统,去访问硬件的数据,而是通过系统调用接口,用户调用系统调用,来访问数据,以保证访问数据的过程是安全的,且数据不会被随意篡改

系统调用(System Call)是操作系统提供给应用程序的一组接口,用于请求操作系统内核执行特定的任务。通过系统调用,应用程序可以访问操作系统提供的底层资源和服务,如文件操作、网络通信、进程管理等。系统调用是用户态程序与内核态操作系统的桥梁,确保了应用程序能够安全、高效地使用系统资源

库函数

在上面银行的例子中,如果用户是一个什么都不懂的老年人,而且有听力障碍,这位老年人来办理业务时,一般的窗口没办法很好地为这种群体提供服务,那么银行就需要面向这种群体开辟新的窗口,提高银行的服务能力。

其实用户在某种程度上和老年人一样,并不认识系统调用接口,我们对系统调用接口一无所知,用起来就会比较难受,不方便,所以需要对系统调用进行封装,库级别的封装,方便用户使用,降低使用成本,所以用户就不用直接使用系统调用了,直接使用库函数提供的函数即可,因为库函数更容易使用。

库函数(Library Function)是一组预编写的代码模块,它们被组织成库,供开发者在编写应用程序时调用。库函数提供了各种常用功能,帮助开发者简化编程任务,提高开发效率

许多库函数是跨平台的,可以在不同的操作系统和硬件上运行,这为开发多平台应用提供了便利,使代码具有可移植性。 

世界上不止 Linux 操作系统,还有安卓、iOS等,这些操作系统提供的系统调用是不一样的,如果程序员要去记住每个操作系统的函数,是不太现实的,提供了库函数,就可以让同一份代码在不同的操作系统中运行起来。

比如我们要打印一个数据,在 Linux 和 Unix 类操作系统中,通常使用 write系统调用来向标准输出(通常是终端)写入数据,在 Windows 操作系统中,通常使用 WriteFileWriteConsole函数来完成类似的功能,虽然各个操作系统的底层系统调用接口有所区别,但是高级语言(如C语言)提供了一套标准化的库函数(如printf),这些库函数内部会根据所处的操作系统环境调用相应的底层系统调用来完成任务。这样做的好处是让程序员可以编写跨平台的应用程序,而不必关心底层实现的细节。

系统调用接口是由操作系统提供的,而库函数是由用户提供的,库函数封装了系统调用

回到问题

操作系统需要对下管理好软硬件资源,对上提供一个良好(稳定、安全、高效)的运行环境,用户不能绕过操作系统直接去访问硬件,不能越级访问,必须贯穿操作系统!!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

python爬虫之JS逆向入门,了解JS逆向的原理及用法(18)

文章目录 1. JS逆向是什么?2、如何分析加密参数并还原其加密方式?2.1 分析JS加密的网页2.2 编写python代码还原JS加密代码3、案例测试4、操作进阶(通过执行第三方js文件实现逆向)4.1 python第三方模块(execjs)4.2 调用第三方js文件完成逆向操作4.3 总结1. JS逆向是什么?…

Spring Boot2(Spring Boot 的Web开发 springMVC 请求处理 参数绑定 常用注解 数据传递 文件上传)

SpringBoot的web开发 静态资源映射规则 总结:只要静态资源放在类路径下: called /static (or /public or /resources or //METAINF/resources 一启动服务器就能访问到静态资源文件 springboot只需要将图片放在 static 下 就可以被访问到了 总结&…

1、Qt6 Quick 简介

一、Qt6 Quick 简介 1、Qt Quick简介 Qt Quick 是 Qt 6 中使用的用户界面技术的总称。它是在 Qt 4 中引入的,现在在 Qt 6 中进行了扩展。Qt Quick 本身是几种技术的集合: QML——用户界面标记语言JavaScript - 动态脚本语言Qt C - 高度可移植的增强型…

element-plus按需引入报错Components is not a function

官网文档:快速开始 | Element Plus webpack配置 // webpack.config.js const AutoImport require(unplugin-auto-import/webpack) const Components require(unplugin-vue-components/webpack) const { ElementPlusResolver } require(unplugin-vue-components…

【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 💯前言💯什么是GPTsGPTs的工作原理GPTs的优势GPTs的应用前景总结 💯创建GPTS应用的基本流程进入GPTs创建界面方式一:按照引导完成生成创建GPTs方式二…

uniapp配置消息推送unipush 厂商推送设置配置 FCM 教程

说真的,这个 密钥文件 和 google-services.json 太难找了 现在 Firebase 已经不允许注册Cloud Messaging API (旧版)的密钥,所以下面这个官方的文档教程并不适用,但是大致位置可以参考 UniPush支持谷歌推送FCM配置指南 - DCloud问答 密钥文件 通过这里…

51单片机数字电子钟proteus仿真(数电课设,含时间显示、校准、整点报时、闹钟功能)

51单片机数字电子钟proteus仿真 由于学校实验课要求完成51单片机数字电子钟proteus仿真的实验,下面是经过一段时间的努力完成的学习成果。希望分享给有需要的人。 功能描述: 显示功能:可以显示时、分、秒(基于1602液晶显示屏&…

Java8 新特性 —— Optional API 详解

本文涉及到的知识点有Lambda表达式,函数式接口以及Stream API,有不了解的小伙伴可以先学习前两篇文章: Java8 新特性 —— Lambda 表达式、函数接口以及方法引用详解 Java8 新特性 —— Stream API 详解 前言 Optional类是Java8新引进的一个…

深入理解Python设计模式:工厂模式实践与应用

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

Windows系统安装部署C++基础开发环境

目录 前言安装MinGW-w64安装VSCode安装CMake完成 前言 这篇文章讨论一下Windows系统怎么安装部署C基础开发环境,你或许在想这还不简单吗,安装vs不就可以了吗,很对,可以在官网下载vs集成开发环境然后进行安装,这也是非…

Cisco ACI Leaf交换机导出show tech

cisco.com 文档描述操作如下: https://www.cisco.com/c/en/us/support/docs/cloud-systems-management/application-policy-infrastructure-controller-apic/214520-guide-to-collect-tech-support-and-tac-re.html#toc-hId–2125674131 Trigger via Switch CLI O…

基于matlab的人眼开度识别

我国已经成为世界汽车生产和制造大国,道路车辆的不断增加道路基础设施不断增强,但是随之而来的问题也日益严重,比如交通事故,噪声大气污染等。汽车行驶的安全性由于关乎人民生命安全,所以日益受到各国政府以及研究机构…

使用 Spring Boot 搭建 WebSocket 服务器实现多客户端连接

在 Web 开发中,WebSocket 为客户端和服务端之间提供了实时双向通信的能力。本篇博客介绍如何使用 Spring Boot 快速搭建一个 WebSocket 服务器,并支持多客户端的连接和消息广播。 1. WebSocket 简介 WebSocket 是 HTML5 的一种协议,提供了客…

详细分析Java8中的Duration时间类基本知识(附Demo)

目录 前言1. 基本知识2. Demo3. 拓展Demo 前言 基本的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 Duration 类是 Ja…

Day14买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如…

【星闪EBM-H63开发板】小熊派的开发板实物

前几天介绍了,我参加了小熊派的星闪EBM-H63开发板内测活动。今天去快递站取回来开发板,让我们看看实物照片。 下面是开发板的正面照片,绿色的部分是核心板,蓝色的部分实际上是个底板,引出了串口的管脚,再加…

zookeeper的选举机制

zk中有两种角色:Leader 和 Fllower Leader是自己的集群各台电脑投票选举出来的。 事务:一通操作,要么同时成立,要么都不成立。 举例:Jack 和 Rose Rose 给 Jack(小李子) 转钱 Rose -100 J…

六:java 基础知识(6)-- Maven项目管理

目录 1. 引言 1.1 什么是 Maven 1.2 Maven 的优势 2. Maven 基础 2.1 Maven 的基本概念 2.2 Maven 的工作原理 2.3 Maven 的安装与配置 3. Maven 项目结构 3.1 Maven 项目的标准目录结构 3.2 POM 文件(pom.xml)概述 3.3 POM 文件的基本配置 4…

Centrifuge 5425R - 微量离心机技术数据详情——艾本德

离心机,作为实验室中的关键设备,扮演着分离、浓缩和纯化样品的重要角色。而在众多离心机型号中,Centrifuge 5425R 以其出色的性能和多功能性,成为了众多科研人员的首选。下面,我们就来详细了解一下这款微量离心机的技术…

【06】A-Maven项目SVN设置忽略文件

做Web项目开发时,运用的是Maven管理工具对项目进行管理,在项目构建的过程中自动生成了很多不需要SVN进行管理的文件,SVN在对源码进行版本管理时,需要将其忽略,本文给出了具体解决方案。 SVN设置忽略Maven项目中自动生成…