操作系统的一些知识

一、操作系统

1、操作系统的定义

操作系统是一个搞管理的软件

对下,要管理硬件设备;对上,要给软件提供稳定的运行环境。

操作系统是软件、硬件、用户之间交互的媒介。

2、常见的操作系统

Windows、Linux、Mac

3、操作系统的定位

我们平时所说的操作系统,指的是系统调用,操作系统内核,驱动程序这三个部分。 

应用程序java运行在JVM上,属于应用程序
系统调用

操作系统给应用程序提供的API

比如,有个程序想操作一下硬件设备,就需要先通过系统调用,

把操作命令告诉给系统内核,内核调用驱动程序,进一步操作硬件设备

比如,你写了一个System.out.println("hello world"),想要在显示器上打印hello world

也是这个流程,print这个方法在底层一定调用了系统调用,系统调用通知操作系统内核,

内核通过驱动程序找到显卡,最终把数据渲染到界面上。

操作系统内核

操作系统的核心功能,管理功能。

对下,要管理硬件设备;对上,要给软件提供稳定的运行环境。

驱动程序

因为硬件设备种类繁多,厂商各异,

硬件厂商开发硬件时会提供对应的驱动。

电脑装了对应的驱动,才能让系统正确识别硬件设备。

硬件设备也就是硬件,电脑后盖打开,能看到的都是硬件设备

4、并行和并发 

并行:微观上同一时刻,两个CPU核心上的进程,就是同时执行的。

并发:微观上同一时刻,一个核心上只能运行一个进程,但是它能够对进程进行快速的切换。(比如先运行一下QQ,再运行一下画图板,再运行一下CCtalk,非常快速的切换。)宏观上看起来就像是几个进程在同时运行。

究竟是并行和并发,是由操作系统内核负责处理的,我们宏观上感知不到。

因此,往往把并行和并发,统称为并发!!除非显示声明,谈到并发,就是指并行和并发。

二、进程

1、进程的定义

进程(process),也叫任务(task),一个“跑起来”的程序就是一个进程。也就是说,一个正在运行的程序是一个进程,不在运行中的不叫进程,只能说是程序。

如何看电脑上运行了多少进程?

打开任务管理器,就可以看到你电脑上正在运行的所有进程。

每个进程都对应一些资源,进程是操作系统资源分配的基本单位。 

2、操作系统内核是如何管理进程的?

进程是一个重要的“软件资源”,操作系统内核负责管理。

操作系统内核是如何管理进程的呢?

通过描述+组织的方式。

描述:就是讲清楚进程有哪些属性特征。

使用结构体(C语言的结构体)来描述进程属性,给这个结构体起了个特殊的名字,叫做PCB,即进程控制块。

那么可以说,操作系统内核通过PCB来描述进程的属性。

组织:通过一定的数据结构,把多个这样的基本单位给串起来。

通过双向链表,把多个PCB给串起来。

也就是说,我们在任务管理器上看到的进程列表,本质上就是遍历这个PCB链表。

创建一个进程,本质上就是创建一个PCB这样的结构体对象,把它插入到链表中。

销毁一个进程,本质上就是把链表上的PCB结点删除掉。

3、PCB这个结构体中哪些属性 用来描述进程属性特征?

PCB里包含的用来描述进程特征的属性是非常多的,下述这些都是核心的属性:

  1. pid
  2. 内存指针
  3. 文件描述符表
  4. 进程调度相关的属性:(1)进程的状态(2)优先级(3)上下文(4)记账信息

 下面分别进行详细介绍:

PCB中的核心属性说明
pid进程的身份标识符,是唯一的数字
内存指针指向了分配给自己的内存是哪些,描述了进程持有哪些内存资源
文件描述符表硬盘上的文件等其他资源,描述了进程持有哪些文件等其他资源

进程调度相关的属性

进程的状态

  1. 就绪状态:随叫随到,进程随时准备好去CPU上执行
  2. 运行状态:正在CPU上执行
  3. 阻塞状态:短时间内无法到CPU上执行,比如进程在进行密集的IO操作,读写数据。
优先级

先调度哪个进程,后调度哪个进程,

操作系统进行进程调度也是有优先级的,

不是一碗水端平的。

上下文

操作系统在进行进程切换的时候,需要把进程执行的“中间状态”记录下来,保存好。

下次这个进程再上CPU上运行的时候,就能恢复上次的状态好继续往下执行。

也就是“存档,读档”。

进程的上下文,就是CPU中各个寄存器的值(CPU中的寄存器:CPU内置的存储数据模块,保存的是程序运行过程中的中间结果)

保存上下文:就是把这些CPU寄存器的值,记录保存到内存中。

恢复上下文,就是把内存中的这些寄存器值恢复回去

记账信息操作系统统计每个进程在CPU上占用的时间和执行的指令数目,根据这个来决定下一阶段如何调度。

进程调度:

操作系统决定让哪个进程上CPU运行,进程分配CPU资源

进程调度相关的属性:

本质上是为了解决“狼多肉少”的问题,通过并发,让大量的进程可以在少数的CPU上同时运行

操作系统里有一个重要的模块调度器,就是负责让有限的CPU来调度执行这么多进程的,而实现这个模块调度器,就需要PCB提供进程调度相关的属性来完成进程调度。

4、进程的虚拟地址空间

程序中获取到的内存地址,并非是真实的物理内存的地址,而是经过了一层抽象的虚拟地址。

那么,什么是物理地址,为什么不使用物理地址而是使用虚拟地址呢?

物理地址:

内存,物理上就是个内存条,内存条上的内存编号就是“地址”,也就是真是的“物理地址”。

内存有个重要的特点:支持机访问。正是因为这个特点,所以数组取下标操作是O(1)

使用真实的物理地址时,当你写的程序出现了内存越界,反而把人家的Chrome或者其他程序给搞坏了,明明是进程1出的问题,反而把进程二给搞坏了。这就很难受了。

所以为了避免进程之间相互产生影响,在代码中不在使用“物理地址”,而是使用“虚拟地址”。

由操作系统和专门的硬件设备MMU(MMU很多时候也是集成在CPU里的)负责进行虚拟地址到物理地址的转换。

一旦进程访问越界了,这个越界的地址MMU硬件设备就翻译不了了,操作系统内核发现地址超过进程的访问范围,直接会向进程反馈一个错误,引起进程的崩溃。谁出了bug,谁崩溃,其他进程不受影响。

使用虚拟地址解决了进程之间相互影响的问题。

5、进程间的通信

搞一个多个进程都能访问到的“公共空间”,基于这个公共空间来进行交互数据。

通信方式/公共空间有很多具体的体现形式,比如说:基于文件、基于网络。

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

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

相关文章

2024华数杯国际数学建模A题思路模型详解

2024华数杯国际数学建模A题思路论文:1.17上午第一时间持续更新,详细内容见文末名片 建立一个模型来描述放射性废水在海水中的扩散速率和方向,考虑到涉及的物理过程和环境因素的复杂性,我们通常会使用一个简化的扩散模型作为起点…

视频剪辑教程:如何批量制作滚动字幕,提升画面质感的方法

在视频剪辑中,字幕的处理是至关重要的一环。合适的字幕不仅能提供必要的信息,还能增强画面的视觉效果。下面详解云炫AI智剪如何批量制作滚动字幕,提升画面质感的方法,助您更好地完成视频剪辑工作。 批量制作滚动字幕的方法&#x…

Mysql详细安装步骤

Linux 安装 MySQL【超详细版】 ​编辑 我叫BuGu    2023-05-11 16:48:10 发布 一、安装 MySQL 的准备工作 1. 查看系统版本 cat /etc/redhat-release2. 查看系统是否已经安装过 MySQL 查看是否安装了 MySQL rpm -qa | grep mysql查看是否有安装 mariadb,该软件与 MySQ…

逆向分析C++类的本质

面向对象的语言中,类这种语言特性是最基本也是最重要的东西。这篇博客记录下从汇编角度去理解类的本质是什么。创建一个对象的本质又是什么。 一.C语言中的结构体和C的类有啥区别 我们知道在C语言中,有语言本身自带的一些内置类型。比如int&#xff0c…

kafka(一)——简介

简介 Kafka 是一种分布式、支持分区、多副本的消息中间件,支持发布-订阅模式,多用于实时处理大量数据缓存的场景,类似于一个“缓存池”。 架构 Producer:消息生产者;Consumer:消息消费者;Brok…

SpringCloud之Nacos的学习、快速上手

1、什么是Nacos Nacos是阿里的一个开源产品,是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案,用来实现配置中心和服务注册中心。 Nacos 快速开始 2、安装运行nacos nacos下载地址 下载地址: https://github.com/alibaba/nacos/rel…

【Linux】Linux系统的生态

Linux中安装软件 Linux中安装软件一般有三种方式: 源代码安装rpm包安装yum安装 1.源代码安装 有些软件本来就是开源的,如果不想用别人直接发布好的软件,我们就可以把源代码下载下来,在我们的环境中编译,自己安装 …

防伪技术行业研究:年复合增长率约为10%

近年来,我国各种新的防伪技术不断涌现,部分防伪技术已经达到国际先进水平,并广泛应用于产品防伪、票证防伪等领域,推动了防伪行业的持续、健康发展。 常见的产品防伪技术有:隐形分子技术、二维码防伪、揭开留底防伪、安…

【设计模式 创建型】单例模式

类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法) 指一个类只有一个实例,且该类能自行创建这个实例的一种模…

「Kafka」Broker篇

「Kafka」Broker篇 主要讲解的是在 Kafka 中是怎么存储数据的,以及 Kafka 和 Zookeeper 之间如何进行数据沟通的。 Kafka Broker 总体工作流程 Zookeeper 存储的 Kafka 信息 启动 Zookeeper 客户端: [atguiguhadoop102 zookeeper-3.5.7]$ bin/zkCli.sh通…

时间复杂度的排序

在计算机科学中,不同的算法有不同的时间复杂度。以下是一些常见的时间复杂度,并按照它们的增长速度从低到高排序: O(1) - 常数时间复杂度: 表示算法的执行时间是固定的,不随输入规模的增加而变化。例如,直接…

使用 Docker 部署 的WAF: 雷池社区版

Web应用防火墙(WAF)是保护网站不受恶意攻击的关键组件。 使用 Docker 部署雷池社区版,可以大大简化安全管理工作。 一、WAF 雷池社区版简介 雷池社区版是一种流行的开源 Web 应用防火墙,它提供基本的安全保护,如防止…

多维表格产品vika多维表、Flowus、Wolai体验记录

昨天从下午6点肝到凌晨2点多体验低代码平台多维表格产品,体验了3个国内产品,vika多维表、Flowus、Wolai。 具有多维表格新型关系数据库的鼻祖是 Airtable,国内模仿产品有vika多维表、飞书多维表格等。 还有一种类型就是以在国内鼎鼎大名的N…

细讲Labview条件结构用法及易错点

本文讲解Labview条件结构的常用情景及易错点注意事项。帮助大家深刻理解并使用该结构,欢迎点赞关注加评论,有问题可以私聊或在下方评论区留言。 本文程序均附在文章结尾,可自行下载学习。 博主之前讲过Labview事件结构、For循环等的基础知识介…

每日OJ题_算法_滑动窗口⑥_力扣438. 找到字符串中所有字母异位词

目录 力扣438. 找到字符串中所有字母异位词 解析及代码1 解析及代码2 力扣438. 找到字符串中所有字母异位词 438. 找到字符串中所有字母异位词 - 力扣(LeetCode) 难度 中等 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串&am…

Mac Could not find the GDAL library 问题解决

目录 1. 参考2. 问题描述3. 解决步骤3.1. 安装依赖包3.2. 配置 GDAL_LIBRARY_PATH3.3. 配置 GEOS_LIBRARY_PATH 1. 参考 https://docs.djangoproject.com/en/5.0/ref/contrib/gis/install/#macos 2. 问题描述 苹果系统 Mac 中搭建 GeoDjango 开发环境时出现以下报错&#xf…

第十四章 MyBatis

第十四章 MyBatis 1.入门-课程介绍2.入门-快速入门程序3.配置SQL提示4.入门-JDBC5.入门-数据库连接池6.入门-lombok工具包介绍7.基础操作-环境准备8.基础操作-删除9.基础操作-删除(预编译SQL)10.基础操作-新增11.基础操作-新增(主键返回&…

Python初识——小小爬虫

一、找到网页端url 打开浏览器,打开百度官方网页点击图片,打开百度图片 鼠标齿轮向下滑,点击宠物图片 进入宠物图片网页,在网页空白处点击鼠标右键,弹出的框中最下方显示“检查”选项,点击(我是…

安全帽识别-赋能深圳自贸中心智慧工地

在当今的建筑行业中,安全管理一直是一个至关重要的议题。深圳自贸中心项目在这方面进行了一次有益的尝试——实施智慧工地安全帽识别系统。本文将对这一创新举措进行简要介绍。 项目背景 深圳自贸中心,作为一项标志性建设项目,承载着城市发展…

云的网络安全优势

在考虑迁移到云计算时,网络安全已经成为一个关键因素。毫无疑问,企业希望通过网络浏览器或移动应用为员工、合作伙伴和客户提供一致的数据和应用访问权限,以保持竞争力。 网络攻击的性质和重要性正变得越来越复杂,并造成严重的财…