【进程篇】操作系统

再谈操作系统。

操作系统

概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。

操作系统是一款进行软硬件管理的软件

操作系统分为狭义和广义的操作系统。

笼统的理解,操作系统包括:

内核(进程管理、内存管理、文件管理、驱动管理)(这就是狭义的操作系统

其他程序(例如函数库,shell程序等等)

在这里插入图片描述

我们说安卓底层也是基于linux,也就是内核加上给手机专门设计的外壳程序,这部分就是安卓。

设计OS的目的

在这里插入图片描述

我们的底层硬件是需要驱动程序安装成功才能访问的。

接下来如果不特殊说明,我们说的操作系统就是狭义的只指内核的操作系统。

操作系统第一个作用是要向下进行软硬件资源的管理。

在这里插入图片描述

但是操作系统把硬件管理起来根本就不是目的,是手段。

目的是为了对上,给用户提供一个良好的执行环境。(主要目的,以人为本)

在这里插入图片描述

软硬件体系结构层状结构

在说软硬件体系结构时,要想到从用户到硬件整个过程。这是被设计成层状的一个结构。

软件层状结构本质是在软件工程上体现出高内聚,低耦合

高内聚就是把相同功能、逻辑的代码数据放在同一层内部,比如操作系统这一层就都是操作系统的数据,驱动程序这一层就都是驱动程序的数据。

低耦合指的是层与层之间,本身只使用接口的方式来互相调用,在数据和逻辑上没有强耦合。

所以未来如果想改动操作系统这一层,驱动和硬件都不用变。修改硬件,驱动和操作系统也不用变。

也就是为了代码后续的可维护性。

一个模块出问题就在一个模块改不用改其他模块。

就像我们的函数或者说接口,也是这样。

C++里的封装继承多态也是。继承关系就是个层状结构。

层状结构式软件领域最常见的模式。

我们的计算机里的各种硬件设计都是高内聚低耦合的。哪个硬件坏了把硬件换了就可以,比如计算机变得太慢了,换内存或者加内存条;计算机芯片有问题了,换个CPU;磁盘有问题换磁盘……

可以说整个计算机世界就是高内聚低耦合的。

访问操作系统必须使用系统调用

(——其实就是函数,只不过是系统提供的)

操作系统本身不允许用户直接访问内存,直接读取进程,直接访问文件,直接读取驱动。

在这里插入图片描述

而是要通过操作系统自己提供的一些C封装的接口来访问操作系统。这些接口就称为系统调用:
在这里插入图片描述

目前为止系统调用我们一个都没有用过。

这个系统调用用起来太麻烦了,理论上说还要懂操作系统才能会用。

比如想往显示器上进行打印,本质是把数据写到硬件。

程序只要是访问了硬件,它必须是贯穿整个操作系统的

我们是不可能绕过操作系统直接到达硬件的,所以本质上printf函数(库函数)底层一定要封装系统调用, 然后通过操作系统对对应的驱动进行访问,然后才能把数据交到硬件上。scanf也是类似。只要涉及到文件操作IO操作的,都必须贯穿操作系统。

库可能在底层封装了系统调用

以前我们所做的都叫做应用开发,只要使用对应的库就行了。

因为我们并没有研究过printf的底层实现。底层封装了一些接口。

因为系统调用太麻烦了,所以有人给我们封装成了库。

在这里插入图片描述

库将系统调用接口封装成库。

所以我们只需要用上层的代码就可以。

在这里插入图片描述

我们平时做开发在整个体系结构的最上层。

所以我们做的所有操作不管是开发、指令还是管理(比如新建文件删除文件)都必须被应用程序转化成系统 调用接口,访问操作系统。

理解操作系统

在这个层次图中我们也可以看到,操作系统这一层处于一个非常承上启下的位置。

在整个计算机硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件。

如何理解管理?

我们日常做的事可以简单分为两种:1.决策 2.执行

比如一个学校里,做决策的是管理者。执行者是中间层,比如辅导员。学生是被管理者。

我们的软硬件层次结构的下三层,操作系统、驱动程序、底层硬件。其中操作系统相当于校长的角色,学生相当于底层硬件,辅导员相当于驱动程序。

1.要管理,管理者和被管理者可以不需要见面
2.那,怎么管理呢?

见面并非管理的本质,而是要拿到数据进行管理。

3.不见面,如何得到数据?

由中间层获取。

比如做决策——让执行者去获取底层相关数据。

所以管理者不用管理被管理者,而是管理数据。对人的管理转为对数据的管理和决策。

如果数据太多呢?管理数据本身是增删查改。(操作系统是C语言写的)可以定义一个结构体,来表示所有学生的信息:
在这里插入图片描述

以前的相当于顺序表,现在在stu里加上指向下一个stu的指针,就变成了链表。

如果我们要找某个属性的最大值,就变成了在链表中的遍历查找,删除就变成了删除结点……

校长管理学生的工作就变成了链表的增删查改。(建模过程)

先描述(结构体)再组织(数据结构)。完成对现实世界任何管理场景的建模。

所以操作系统怎么管理硬件的?硬件名、硬件状态、硬件的其他属性,操作系统也可以先描述后组织,把网卡、硬盘、显卡、显示器这些,统一struct device。所以操作系统管理硬件转化成了对硬件数据的增删查改。

操作系统怎么对进程做管理?首先要对每个进程定义struct结构体对象,然后把进程相关的属性放到结构体里,用结点全部链接起来,将进程管理转换成对链表的增删查改。

所以C++等语言为什么要提供类的概念和STL?

因为类解决的就是先描述的问题。

STL就是各种算法和容器(即数据结构),容器解决的是再组织的问题。

我们写的各种东西,操作系统、贪吃蛇扫雷、学生管理系统这些,本质都是对数据做管理,所以本质就是先描述再组织。所以任何面向对象的语言都必须提供类和容器。

世界就是个先描述后组织的世界、数据结构才能让计算机处理…

所以C语言中也有struct,并能让我们自己实现数据结构。

总结:

先描述就是可以用class或者struct包含被管理对象的属性集,再组织就是用数据结构将其管理起来。

组织起来后我们就可以将对结点的管理转化成对算法的设置。所以大部分语言提供类和容器,类解决描述问题,容器解决组织问题。

操作系统与底层硬件不直接打交道而是拿到底层硬件的数据,将其先描述再组织,转化成对链表等容器的增删查改。


预言:操作系统内一定会存在大量数据结构以及与该数据结构匹配的算法。

(这也是学懂数据结构的意义——为了学操作系统,网络等所有基于数据结构的所有学科。

操作系统如何对进程做管理?

也是先描述再组织,将对进程的管理转化成对某种数据结构的增删查改。对内存文件、网络也一样是先描述再组织!

理解系统调用

操作系统要向上提供对应的服务(什么是服务?访问硬件的能力)

操作系统不相信任何用户或者人

不相信但又要提供服务?听起来有些抽象。

这其实就像银行。我们可以存取钱,但不能进到金库里,而是在门口等,设置了一个个窗口。

所以操作系统必须把自己的细节封装起来,给人提供系统调用。所以系统调用本质是操作系统给我们提供的函数调用

我们使用的各种操作系统无论是Linux 、Windows 、macOS,基本都是C语言写的,既然是C语言写的,基本就是提供C函数

只要是函数就要想到输入参数和返回值,前者是用户给操作系统的,后者是操作系统给用户的。

用户和操作系统之间,进行某种数据交互,耦合度较低,保证自身安全情况下提供服务。

由于直接使用系统调用很难,所以有专门的人写好了库、外壳、指令,来将系统调用封装,让我们使用。

在这里插入图片描述

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

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

相关文章

day5,数据结构,单向,双向,循环链表

1】思维导图 2】完成单向循环链表的所有操作 【创建、判空、尾插、遍历、尾删、销毁】 创建: LooplinkPtr caerte() {LooplinkPtr h(LooplinkPtr)malloc(sizeof(Looplink));if(NULLh){printf("创建失败\n");return NULL;}h->len0;h->data0;h->…

threejs 建筑设计(室内设计)软件 技术调研之四 墙体添加真实门窗并保持原材质

运用threejs 开发 建筑设计(室内设计)软件 技术调研 四 墙体添加真实门窗并保持原材质 在线体验地址:http://47.96.130.245:8080/design/index.html 实现功能: 墙体材质变换后,添加真实门窗,墙体可保持原…

【JavaEE进阶】关于Maven

目录 🌴什么是Maven 🌲为什么要学Maven 🎍创建一个Maven项目 🎄Maven核心功能 🚩项目构建 🚩依赖管理 🎋Maven Help插件 🍀Maven 仓库 🚩本地仓库 &#x1f6a…

RabbitMQ 路由(Routing)通讯方式详解

在现代分布式系统中,消息队列(Message Queue)是实现异步通信、解耦系统组件的重要工具。RabbitMQ 作为一个广泛使用的消息代理(Message Broker),提供了多种消息传递模式,其中路由(Ro…

uniapp自定义树型结构数据弹窗,给默认选中的节点,禁用所有子节点

兼容H5、安卓App、微信小程序 实现逻辑&#xff1a;给默认选中节点的所有子节点添加一个disabled属性&#xff0c;以此禁用子节点。 /components/sonTreeNode/sonTreeNode.vue 封装成组件 <template><view><view :class"[item,item.is_level1?pL1:item…

疾风大模型气象系统:精准到分钟,预见天气未来

精准到分钟,预见天气未来 在现代社会中,气象预报的精准度直接关系到人们的生活质量和生产效率。传统的天气预报虽然能为我们提供趋势性参考,但在短时突发天气变化的应对上仍有一定局限。而疾风大模型气象系统凭借其领先的技术和精细化的预测能力,为气象预报树立了新的标杆…

2024年合肥师范学院信息安全小组内部选拔赛(c211)WP

目录 前言MISC签到题_熟悉吗又来一道签到题文件包含 CRYPTO古典1古典2RSA webbaby_sql 前言 [HFNU 校级选拔] 已经结束&#xff0c;接下来一起了解下题目是怎么做的。 通过网盘分享的文件&#xff1a;ARCHPR_4.66.266.0_汉化绿色版.7z 链接: https://pan.baidu.com/s/1N_c0PJX…

15.初识接口1 C#

这是一个用于实验接口的代码 适合初认识接口的人 【CSDN开头介绍】&#xff08;文心一言AI生成&#xff09; 在C#编程世界中&#xff0c;接口&#xff08;Interface&#xff09;扮演着至关重要的角色&#xff0c;它定义了一组方法&#xff0c;但不提供这些方法的实现。它要求所…

3.使用SD卡挂载petalinux根文件系统

前言 说明为什么使用SD卡挂载petalinux根文件系统如何使用SD卡挂载根文件系统 配置根文件写入类型制作SD分区格式化SD卡将工程目录下的rootfs.tar.gz解压到SD EXT4分区 为什么使用SD卡挂载petalinux根文件系统 Petalinux 默认的根文件系统类型是 INITRAMFS&#xff0c;不能…

【Vulkan入门】16-IndexBuffer

TOC 先叨叨 上篇介绍了如何使用VertexBuffer传入顶点信息。两个多星期了我们一直在玩三个点&#xff0c;本篇介绍如何渲染更多的点。 在渲染前考虑一个问题&#xff0c;渲染一个三角形需要三个点&#xff0c;渲染两个相接的三角形需要几个点&#xff1f; 答案是6个点&#xf…

计算机工作流程

分析下面的计算机工作流程&#xff1a; 1.取数a至ACC&#xff1a;PC程序寄存器自增1&#xff0c;变成0&#xff08;可以理解为PC初始从-1开始自增&#xff09;&#xff1b;接着PC把当前指令的地址给到MAR&#xff08;地址寄存器&#xff09;&#xff1b;MAR拿到当前地址后&…

Restaurants WebAPI(二)——DTO/CQRS

文章目录 项目地址一、DTO1.1 创建Restaurant的Dto1.2 修改之前未使用Dto的接口1.2.1 修改GetRestaurantByIdUseCase1.2.2 修改IGetRestaurantByIdUseCase接口1.2.3 再次请求接口1.3 显示Dish List1.3.1创建DishDto1.3.2 在RestaurantDto里添加DishDto1.3.3 使用Include添加Dis…

202412月最新植物大战僵尸杂交版【V3.0.1】更新内容与下载

以下是对UI优化和新内容添加的摘要&#xff1a; UI优化摘要&#xff1a; 主界面重做&#xff1a;对游戏的主界面进行全面的设计更新&#xff0c;提升用户体验。商店重做&#xff1a;对游戏内的商店界面进行重新设计&#xff0c;以改善玩家的购物体验。选卡界面增加图鉴功能&a…

MCU驱动使用

一、时钟的配置&#xff1a; AG32 通常使用 HSE 外部晶体&#xff08;范围&#xff1a;4M~16M&#xff09;。 AG32 中不需要手动设置 PLL 时钟&#xff08;时钟树由系统自动配置&#xff0c;无须用户关注&#xff09;。用户只需在配置文件中给出外部晶振频率和系统主频即可。 …

服务器防火墙设置某个端口号只允许固定 ip地址访问

服务器防火墙设置某个端口号只允许固定 ip地址访问是运维常见的功能&#xff0c;今天我们分享一下&#xff1a; 一、Linux环境 1、firewall 方式 1&#xff09;允许特定 IP 地址访问 23 端口 sudo firewall-cmd --zonepublic --add-rich-rulerule family"ipv4" s…

Hexo Next主题集成百度统计

个人博客地址&#xff1a;Hexo Next主题集成百度统计 | 一张假钞的真实世界。 首先&#xff0c;需要在百度统计控制台新增自己的站点。 点击“新增网站”按钮&#xff1a; 按照要求输入相关信息并保存&#xff0c;页面跳转至代码获取页面。从代码页面中拷贝网站的ID&#xff1…

8K+Red+Raw+ProRes422分享5个影视级视频素材网站

Hello&#xff0c;大家好&#xff0c;我是后期圈&#xff01; 在视频创作中&#xff0c;电影级的视频素材能够为作品增添专业质感&#xff0c;让画面更具冲击力。无论是广告、电影短片&#xff0c;还是品牌宣传&#xff0c;高质量的视频素材都是不可或缺的资源。然而&#xff…

JumpServer开源堡垒机搭建及使用

目录 一,产品介绍 二,功能介绍 三,系统架构 3.1 应用架构 3.2 组件说明 3.3 逻辑架构 3.3 逻辑架构 四,linux单机部署及方式选择 4.1 操作系统要求(JumpServer-v3系列版本) 4.1.1 数据库 4.1.3创建数据库参考 4.2 在线安装 4.2.1 环境访问 4.3 基于docker容…

华为云计算HCIE笔记01

第一章 华为云Stack解决方案 2018年云栖大会马云提出的数据科学时代&#xff08;Data technology&#xff09;&#xff0c;相较于传统信息时代&#xff0c;技术的变更主要集中在过去我们更加看重的是传输&#xff0c;也就是传统的网络建设&#xff0c;随着目前国家网络建设的完…

Redis的主从集群以及哨兵机制学习总结

Redis的主从集群以及哨兵机制 为什么要使用主从集群&#xff1f;部署主从集群主从集群怎么同步数据&#xff1f;数据同步的方式和时机实例查看主从数据同步原理增量同步潜在的问题主从集群的优化 主节点宕机怎么办&#xff1f;哨兵机制 为什么要使用主从集群&#xff1f; 我们…