操作系统与进程【单身狗定制版】
大家好呀
我是浪前
今天给大家讲解的是操作系统与进程
祝愿所有点赞关注的人,身体健康,一夜暴富,升职加薪迎娶白富美!!!
点我领取迎娶白富美大礼包
前言:
我们今天我们来学习操作系统
当然啦,操作系统是一个很庞大的学科,远非小编一篇博客就可以掌握的
虽然小编我也没有怎么学会
但是还是斗胆将自己学到的一点点浅薄的知识
给大家胡编乱绉分享一下~
在我们现在的常用的操作系统中:
常用的有如下几个:
Windows10
Windows11
linux
mac os
ios
🎃为什么要有操作系统?
🎃 操作系统存在的背景:
因为我们的计算机中硬件设备各有不同,
需要操作系统来对不同的硬件设备进行统一管理
操作系统在管理的时候还要给软件提供统一的API
方便我们在写代码的时候进行调用不同的API,而且系统API都已经被jvm封装好的
程序员在写代码时就可以不用关注不同的硬件设备了;
🎃操作系统的存在的目的:
统一管理硬件设备,对硬件设备进行抽象封装
所以操作系统是一个软件:作用是 管理硬件设备
上: 给软件提供稳定的运行环境
下: 管理所有的硬件设备
🎃操作系统是如何管理的
我们的硬件厂商在开发硬件的时候,会同时开发出一个驱动程序(软件)
这个驱动程序(软件)专属于这个硬件设备
此时操作系统通过这个驱动程序(软件)来完成对硬件设备的控制
一个计算机上可以运行多个程序,同时每个程序各自独立运行的, 不会相互干扰
🎃操作系统最核心的东西
内核
内核是操作系统的核心
在操作系统中,内核态和用户态是指操作系统为确保系统安全和稳定性而设计的两种CPU工作模式。操作系统的内核是最核心的组件,负责管理系统资源(如CPU、内存、硬件设备)并提供各种服务。下面详细说明它们的关系。
🎃操作系统的核心:内核
内核是操作系统的核心部分,负责直接与硬件交互,并提供底层功能支持。它包含了:
- 进程管理:创建、调度和终止进程。
- 内存管理:分配和释放内存资源。
- 文件系统管理:管理文件和目录。
- 设备管理:控制硬件设备的操作,如硬盘、网络等。
- 系统安全和访问控制:控制对系统资源的访问权限。
内核是系统的“大脑”,对系统资源拥有完全控制权。为了保护内核和系统资源不被损坏,操作系统将CPU的权限分为内核态和用户态两种模式。
🎃什么是内核态(Kernel Mode)?
内核态是一种CPU的工作模式,在这种模式下,CPU可以访问系统的所有资源和硬件设备。内核态通常具有最高权限,可以执行敏感操作,如直接控制硬件、修改内存等。
- 谁可以运行在内核态:只有操作系统内核代码和某些低级的系统服务会在内核态运行。
- 什么操作在内核态执行:硬件访问、内存管理、进程调度等操作都需要在内核态下完成。
- 优点:内核态具有最高权限,可以直接与硬件通信,因此可以高效地管理系统资源。
- 风险:如果用户程序也在内核态执行,那么一旦出错,可能会导致系统崩溃,甚至硬件损坏。
🎃什么是用户态(User Mode)?
用户态是一种受限的CPU模式,在这种模式下,程序对系统资源的访问受到限制。用户态主要用于运行普通的应用程序。应用程序只能在受限的范围内执行,无法直接访问硬件资源。如果应用程序需要访问系统资源(比如读取文件或与硬件通信),必须通过“系统调用”来请求操作系统的帮助。
- 谁运行在用户态:所有普通的应用程序(如浏览器、文本编辑器)和非关键性服务都运行在用户态。
- 什么操作在用户态执行:普通的计算任务、非敏感操作等。
- 优点:用户态的限制使得即使应用程序出错也不会影响系统核心资源,保证了系统的稳定性。
- 风险:用户态权限受限,导致应用程序需要频繁进行“系统调用”以访问资源,增加了操作开销。
🎃内核态与用户态的关系
内核态和用户态之间的关系可以理解为:
- 安全隔离:用户态和内核态隔离,用户态程序无法直接访问内核资源。这种隔离确保了系统安全,避免用户程序直接操作内核数据。
- 权限分配:内核态拥有所有权限,而用户态的权限受限,这样可以保护系统资源不被误操作或恶意操作。
- 切换机制:用户程序想要执行需要高权限的操作时,必须通过系统调用切换到内核态,由内核完成操作后再切回用户态。这种切换确保了系统安全性,同时实现了对用户态程序的服务。
🎃系统调用:内核态与用户态的桥梁
系统调用(System Call)是用户态和内核态之间的桥梁,是用户态程序与操作系统交互的唯一方式。系统调用的过程如下
- 用户程序在用户态下执行,但遇到需要内核帮助的操作(如文件读写)。
- 通过系统调用,CPU切换到内核态,操作系统内核接管。
- 内核执行系统调用请求的操作。
- 完成操作后,内核将CPU切回用户态,程序继续执行。
这种机制确保了用户程序不会直接干扰内核资源,同时又能够访问系统服务。
🎃小结
- 内核态:最高权限,直接访问硬件,内核代码在内核态执行。
- 用户态:权限受限,应用程序在用户态执行,访问系统资源需通过系统调用。
- 内核:操作系统的核心,负责管理资源,提供系统服务,运行在内核态。
- 系统调用:用户态程序与内核交互的唯一方式,通过它可以安全地实现内核态和用户态的切换。
通过这种设计,操作系统既保证了系统的安全性和稳定性,又提供了丰富的系统功能给用户程序。
一个程序可以在内核态工作,也可以在用户态工作
内核是操作系统最核心的功能
而且硬件的驱动程序都是在系统内核中执行的
因为内核需要给很多应用程序提供支持
🎃 进程/任务(process / task)
进程就是任务
进程是操作系统最重要的概念;(和我们写代码密切相关)
进程定义: 正在运行的程序,只有正在运行的程序才是进程
没有正在运行的程序都不是进程
任务管理器中打开看见的就是进程
有的是系统自动创建的,有的是我们手动创建的
如图:
每个进程在执行的过程中都要消耗一定的系统资源(硬件资源)
比如CPU,内存,磁盘, GPU
每个进程都是系统资源分配的基本单位
上面这句话很重要,后面还会持续出现,(圈出来,后面要考)
系统是怎么分配资源的?
以进程为单位,每个进程分配一定的系统资源
🎃操作系统的进程管理
进程在系统中如何进行管理
注意:管理的前提是进程很多。
只有出现很多个进程的时候才会涉及到进程管理
管理从两个角度来进行管理
- 描述:先使用类/ 结构体这样的方式把实体属性给列出来
描述就是使用类/ 结构体 , 搞清楚被管理的这个对象都有哪些属性, 把这些属性都表示出来
2.组织 : 使用一定的数据结构把这些结构体/类/对象给串到一起
组织就是通过一定的数据结构,把这些表示出来的对象,串起来(为了后续的增删改查)
例子:
学校对学生进行管理:
先描述: 把每一个学生的各种属性都表示出来
再组织: 使用一定的数据结构(数据库/表格)把所有的学生信息都整理到一起
🎃 进程的描述
在操作系统中有一个结构体来描述进程的属性,操作系统是C/C++写的
所以我们使用结构体来描述进程,而这个结构体叫做"进程控制块" PCB (Precess Control Bolck)
PCB是一个统称(描述进程的结构体都统称为PCB)
这个PCB是描述进程的属性,一个进程可以使用一个PCB/多个PCB来描述
🎃进程的组织
系统会使用类似于双向链表这样的数据结构来组织多个PCB
创建一个新的进程即创建PCB,并且把PCB插入到链表中去
销毁进程就是把这个PCB从链表中删除并释放
展示进程列表,就是遍历链表的每个节点
🎃 PCB 的属性
PCB中有哪些东西(重点的部分)?
- PID身份标识
- 一组内存指针
- 文件描述符表
🎃1. PID 身份标识
类似于每个人的身份证号
PID是从1开始,保证不会重复
并且每个进程的PID都是唯一的
PID的作用
涉及到结束进程的操作
点击某个进程,并选择结束这个进程后,任务管理器就会获取到这个进程的PID
再调用一个系统的API ,把PID作为参数传递进去,于是就完成了结束进程的操作
🎃2. 一组内存指针 :
进程运行是要消耗系统资源的,内存就是重要的要消耗的资源…,所以内存需要申请了之后才可以使用
同时 每个进程都只能使用自己申请到到的内存
内存指针就是描述说你这个进程都能够使用哪些内存?
同时描述这个进程哪里存的是指令,哪里存的是数据…
内存指针描述了进程所使用的内存资源的详细信息
同时一个进程跑起来的时候,需要有指令和数据
指令和数据都是需要加载到内存当中去的
进程也需要知道哪里存的是指令,哪里存的是数据…
这也是内存指针的作用。
指令和数据是在进程跑起来之前加载的
我们双击一个.exe文件(可执行文件)就是系统先把这个exe文件里的内容(包含了指令和数据, 先加载到内存中) , 之后再去创建进程, 让进程开始执行
如下:
双击这个微信的.exe文件之后
系统会把这个 .exe 文件里的内容加载到内存中
之后再去创建微信这个进程,让微信这个进程开始运行
此时微信的进程就已经在任务管理器中开始出现了:
如图
指令一般不大,但是数据有可能会很大…
指令: CPU需要在内存中取走指令才能执行指令
内存指针描述了进程持有的内存资源是什么样的
🎃3. 文件描述符表:
描述这个进程所涉及的硬盘相关的资源
进程也涉及到硬盘操作 ,
而且进程是 按照文件的方式来操作的
当前进程关联了哪些文件, 能够操作哪些文件
都是通过文件描述表来组织和进行操作的
为什么会有文件描述表?
因为操作系统对硬盘这样的硬件设备,进行了封装
操作系统把硬件设备封装为了文件
存储器 = 内存 + 外存(硬盘, 软盘, 光盘 , U盘)
操作系统不管你是哪一个盘,都是进行统一的抽象, 都按照文件的方式来操作的
一个进程在操作文件之前,要先去打开文件
打开文件就是让你的进程在文件描述表中分配一个表项
那么进程是怎么去分配一个表项的?
使用文件描述表来构造一个结构体表示这个文件的相关信息
🎃总结
1: 操作系统的存在就是为了去管理各种硬件设备
2: 进程是系统资源分配的基本单位
3: 当进程很多的时候,需要对进程进行管理
4: 进程管理是从两个角度来进行的:
一个是描述:使用结构体来描述进程,这个结构体叫做PCB
一个是组织:使用双向链表来进行组织
而在PCB中有一些重要的属性
比如PID,内存指针,文件描述符表…
好啦,关于操作系统的一部分知识就讲到这里啦
下一篇我们将会详细讲解进程和线程
另外加一个题外话:
我自己最近在朋友圈看到有一位大佬(树林同学)发了一段话
有时候我感到自己的生活过得匮乏麻木的时,就会看一看他写的文章
我觉得很有意思,分享给大家~
想了好久,
我现在最在意的品质是什么?
柔软
它不是感性,也不是柔和
甚至都不是松弛
有点像五彩斑斓的黑
你在意,你好奇,你喜欢
你纠结,你痛苦,你愤怒
都是你的柔软
不物化自己,只觉得钱最重要
甚至比自己还重要,也不物化别人
没有人是你欲望的容器
无论是你的物欲,性欲,食欲,权力的欲望
人是一面镜子
看别人如何
自己亦如何
怕有些人把柔软当成是老好人
柔软不是脆弱
它不易碎
也并非没有形状
有自己的弹性
一定是有指向的
什么人,我不喜欢
什么事情,我不做
什么原则和底线,我不踏出
但也是有灰度的
和光同尘
这个世界对那些黑白分得太清的人
其实是不兼容的
什么都沾染一点
咱们就是自己人
说的可能还不够清楚
柔软
他的反面是:坚硬
心里面硬的跟个石头一样的人
自己活得也是很麻木的人
或者说是 僵硬
你心里面只有这一件事情
这件事无限大
你就装不下人了
我看过很多麻木的人
钱重要
公司重要
自己的名声重要
身体就不重要了
自己的情绪感受就不重要了
生活也就不重要了
我知道有人说
创业就是生活
但真的吗
真的吗
有
但应该不见得有这么顺口回答的那么多
少有人热爱
哪怕有人热爱
爱久了也会麻木
不为什么为定式
有弹性
偶尔会停下来
找人说说
聊聊
小酌一下
对影三人
身边红颜知己
身边贵人同好
人是社会关系的集合
最深度的关系
来自于看见和被看见
在哈萨克斯坦的语言体系里面
是没有喜欢的
他们的 “我喜欢你“
是”这一刻,我清楚地看见你“
相关文章:

操作系统与进程【单身狗定制版】
大家好呀 我是浪前 今天给大家讲解的是操作系统与进程 祝愿所有点赞关注的人,身体健康,一夜暴富,升职加薪迎娶白富美!!! 点我领取迎娶白富美大礼包 前言: 我们今天我们来学习操作系统 当然啦,操作系统是一个很庞大的…...

监听el-table中 自定义封装的某个组件的值发现改变调用函数
监听el-table中 自定义封装的某个组件的值发现改变调用函数 当你在一个 el-table 中使用封装的自定义组件作为单元格内容时,监听这个组件的值变化并调用函数,可以通过以下步骤实现: 创建自定义组件:首先创建一个自定义的 Vue 组…...

frida安装
开始安装 frida https://github.com/frida/frida/releases 下载安装的时候查看自己手机是多少位的 adb shell getprop ro.product.cpu.abi # 按照自己的机型下载进行解压里面有个文件放入到手机中开始进入手机 然后按照下面的图执行命令 其中log 我只是看了下 不需要执行因为刚…...

链表详解(三)
目录 链表功能实现链表的查找SLNode* SLFind(SLNode* phead, SLNDataType x)代码 链表任意位置前插入void SLInsert(SLNode**pphead,SLNode* pos, SLNDataType x)代码 链表任意位置前删除void SLErase(SLNode**pphead,SLNode* pos)代码 链表任意位置后插…...

【RESP问题】RESP.app GUI for Redis 连接不上redis服务器
问题描述: 在使用RESP的时候出现地址和密码正确但是连接不上Redis服务器的情况,但是由于在之前我是修改过Redis的配置文件的,所以现在怀疑是防火墙的问题。 问题解决: 在[rootlocalhost ~]下输入以下命令打开防火墙 #放通6379/…...

【github 有趣项目】AMULE
官方网站github ‘All-platform’ P2P client based on eMule电骡社区文档 下载&安装 去官方网站下载(社区版一般版本较新),解压版解压打开即可。 点击“下一页”,输入名称,后边全都下一步即可 通过upnp设置端…...

【WRF数据准备】土地利用类型分类标准:USGS+MODIS IGBP 21
【WRF数据准备】土地利用类型分类标准:USGSMODIS IGBP 21 WRF常用土地类型分类MODIS IGBP 21USGSNLCD Landuse 选择土地利用分类标准替换城市土地类型后更改土地利用分类参考 WRF常用土地类型分类 WRF中土地利用类型最高分辨率是30s,且主要分为MODIS和U…...

KVM虚拟机迁移:无缝迁徙,重塑云上未来
作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#…...

CSS常见适配布局方式
在网页设计中,布局是确保内容按预期显示的关键部分。CSS 提供了多种布局方式,每种方式都有其特定的用途和优势。以下是您提到的五种布局方式的详细解释: 1. 流式布局(百分比布局) 概述: 流式布局…...

ArkUI常用布局:构建响应式和高效的用户界面
在HarmonyOS应用开发中,ArkUI作为用户界面开发框架,提供了多种布局方式来帮助开发者构建响应式和高效的用户界面。本文将详细介绍ArkUI中的常用布局方式,包括线性布局、层叠布局、弹性布局、相对布局、栅格布局、列表和轮播布局,并…...

论面向服务架构设计及其应用
一、引言 企业应用集成(Enterprise Application Integration,EAI)是企业实现信息系统协同工作的关键途径,尤其是在当前多系统、多平台并存的企业环境下,集成需求愈发显著。面向服务架构(Service-Oriented …...

HTML5 + CSS3 + JavaScript 编程语言学习教程
HTML5 CSS3 JavaScript 编程语言学习教程 欢迎来到这篇关于 HTML5、CSS3 和 JavaScript 的详细学习教程!无论你是初学者还是有一定基础的开发者,这篇文章都将帮助你深入理解这三种技术的核心概念、语法和应用。 目录 HTML5 1.1 HTML5 简介1.2 HTML5 …...

Java日志脱敏——基于logback MessageConverter实现
背景简介 日志脱敏 是常见的安全需求,最近公司也需要将这一块内容进行推进。看了一圈网上的案例,很少有既轻量又好用的轮子可以让我直接使用。我一直是反对过度设计的,而同样我认为轮子就应该是可以让人拿去直接用的。所以我准备分享两篇博客…...

在 Ubuntu 22.04 上部署Apache 服务, 访问一张照片
要在 Ubuntu 22.04 上部署一张照片,使其可以通过 Apache 访问,你可以按照以下步骤进行操作: 1. 安装 Apache(如果尚未安装) 如果你还没有安装 Apache,可以使用以下命令: sudo apt update sud…...

从0学习React(10)
示例代码: const columns: ProColumns<API.BasicInfoItem>[] [{title: 设备编码,dataIndex: deviceCode,ellipsis: true,width: 40,},{title: 设备名称,dataIndex: deviceName,ellipsis: true,width: 50,},{title: 产线-工序,dataIndex: deviceClassifyName…...

Redis-结构化value对象的类型
文章目录 一、Redis的结构化value对象类型的介绍二、Redis的这些结构化value对象类型的通用操作查看指定key的数据类型查看所有的key判断指定key是否存在为已存在的key进行重命名为指定key设置存活时间pexpire与expire 查看指定Key的存活时间为指定key设置成永久存活 三、Redis…...

【QT】Qt对话框
个人主页~ Qt窗口属性~ Qt窗口 五、对话框2、Qt内置对话框(1)Message Box(2)QColorDialog(3)QFileDialog(4)QFontDialog(5)QInputDialog 五、对话框 2、Qt内…...

【计算机网络篇】数据链路层(14)虚拟局域网VLAN(概述,实现机制)
文章目录 🛸虚拟局域网VLAN🍔虚拟局域网VLAN的实现机制🥚IEEE 802.1Q帧🥚以太网交换机的接口类型🗒️例一:在一个交换机上不进行人为的VLAN划分,交换机各接口默认属于VLAN1且类型为Access的情况…...

伺服中的电子凸轮与追剪
一、机械凸轮 机械凸轮是一个具有曲线轮廓或凹槽的构件,它把运动特性传递给紧靠其边缘移动的推杆,推杆又带动机架做周期性运动。 凸轮的推杆位置跟随凸轮角度的周期性变化而变化,其运动特性与机械凸轮的外形相关,定义凸轮…...

Oracle 第22章:数据仓库与OLAP
第22章:数据仓库与OLAP 1. 数据仓库概念 数据仓库(Data Warehouse, DW) 是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。数据仓库中的数据通常来自不同的操作型系统或外部数据源,…...

在Ubuntu上安装TensorFlow与Keras
文章目录 1. 查看系统和Python版本信息1.1 查看Ubuntu版本信息1.2 查看Python版本信息 2. 安装pip2.1 下载get-pip.py2.2 运行get-pip.py2.3 查看pip版本 3. 安装Jupyter Notebook3.1 安装Jupyter Notebook3.2 运行Jupyter Notebook3.3 安装jupyter-core3.4 配置Jupyter Notebo…...

vue data变量之间相互赋值或进行数据联动
摘要: 使用vue时开发会用到data中是数据是相互驱动,经常会想到watch,computed,总结一下! 直接赋值: 在 data 函数中定义的变量可以直接在方法中进行赋值。 export default {data() {return {a: 1,b: 2};},methods: {u…...

如何理解ref,toRef,和toRefs
1. ref ref 是 Vue 3 提供的一个用于创建响应式数据的 API。它可以用来创建简单的响应式变量,例如数字、字符串、布尔值或对象等。通过使用ref,当数据发生变化时,相关的组件视图会自动更新。 用法 创建响应式数据: import { ref …...

从单一到多元:揭秘 Hexo Diversity 主题的运行原理
揭秘 Hexo Diversity 主题的运行原理 一、 引言二、 Diversity 主题2.1 Hexo 控制台命令2.2 Hexo 核心 API2.3 运行原理2.3.1 多主题配置相关2.3.2 多主题执行指令 2.4 版本演进2.4.1 V1版本2.4.2 V2版本2.4.2.1 PC 端2.4.2.2 Phone 端 2.5 后续展望 三、 总结 一、 引言 众所…...

软考中级(系统集成项目管理工程师)案例分析计算题-笔记
案例分析计算题必拿分!! 1.成本进度管理 初中数学题,整了一堆缩写,容易给人绕晕 知道英文全称后就好理解了名词汇总: 英文缩写英文全称含义公式PVPlanned Value (计划值)按照计划到当前时间点需要花费的钱根据题目自…...

Docker打包自己项目推到Docker hub仓库(windows10)
一、启用Hyper-V和容器特性 1.应用和功能 2.点击程序和功能 3.启用或关闭Windows功能 4.开启Hyper-V 和 容器特性 记得重启生效!!! 二、安装WSL2:写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/143057041 三…...

CesiumJS 案例 P20:监听鼠标滚轮、监听鼠标左键按下与松开、监听鼠标右键按下与松开、监听鼠标左击落点
CesiumJS CesiumJS 是一个开源的 JavaScript 库,它用于在网页中创建和控制 3D 地球仪(地图) CesiumJS 官网:https://www.cesium.com/ CesiumJS 下载地址:https://www.cesium.com/platform/cesiumjs/ CesiumJS API 文…...

如何使用Web-Check和cpolar实现安全的远程网站监测与管理
文章目录 前言1.关于Web-Check2.功能特点3.安装Docker4.创建并启动Web-Check容器5.本地访问测试6.公网远程访问本地Web-Check7.内网穿透工具安装8.创建远程连接公网地址9.使用固定公网地址远程访问 前言 本期给大家分享一个网站检测工具Web-Check,能帮你全面了解网…...

随机生成100组N个数并对比,C++,python,matlab,pair,std::piecewise_construct
随机生成100组N个数,数的范围是1到35,并检查是否包含目标数组的数字 python版本 import numpy as np def count_groups_containing_obj(N, obj):# 随机生成100组N个数,数的范围是1到35groups np.random.randint(1, 36, size(1000, N))#pri…...

python爬虫获取数据后的数据提取
文章目录 python爬虫中的数据提取1.Json格式数据的数据提取2.Html格式数据提取之bs4解析器如何使用快速使用对象的种类Tagname和attributes属性NavigableString(字符串)BeautifulSoupComment 子节点.contents.children.descendants 父节点.parent.parents 节点内容.string.stri…...