计算机操作系统和进程

news2024/11/29 4:33:15

请添加图片描述

✨个人主页:bit me👇
✨当前专栏:Java EE初阶👇
✨每日一语:心平能愈三千疾,心静可通万事理。

目 录

  • 🐬一. 操作系统
    • 🍦1. 操作系统是什么?
    • 🍨2. 操作系统的两个核心功能:
    • 🍧3. 操作系统软硬件结构图
  • 🐋二. 进程
    • 📙1. 什么是进程/任务(Process/Task)?
    • 📘2. 进程管理
    • 📗3. PCB(进程控制块)
    • 📕4. 进程的调度
    • 📒5. 进程的虚拟地址空间
    • 📔6. 进程间通信

🐬一. 操作系统

🍦1. 操作系统是什么?

  • 操作系统是一组做计算机资源管理的软件的统称

目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等

🍨2. 操作系统的两个核心功能:

  • 防止硬件被时空的应用程序滥用;(对下,要管理各种硬件设备)

  • 向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。(对上,要给各种软件提供稳定的运行环境)

🍧3. 操作系统软硬件结构图

在这里插入图片描述

  • 操作系统内核是操作系统最核心的功能部分
  • 系统调用:操作系统给应用程序提供的 API 接口,就比如你想往控制台打印一个 " hello " 这个过程你需要调用 printf.(库函数) 内部就要调用操作系统提供的系统调用 write,调用 write 就会进入到内核来执行,内核的话就要进一步的控制硬件,完成输出过程
  • 当我们使用系统调用进入操作系统内核的时候,就会涉及到 用户态 到 内核态 之间的切换,由于内核只有一个,应用程序有很多,这些程序都需要靠我们的这个操作系统内核来提供工作支持,很可能就要排队等待
  • 驱动程序:软件,是由硬件厂商提供的软件程序,直接和硬件设备打交道(硬件一般都会提供一些 " 寄存器 "),驱动程序相当于在 硬件 和 内核 之间来了一层转换

 

🐋二. 进程

📙1. 什么是进程/任务(Process/Task)?

  • 一个程序,运行起来,完成一系列任务的模样

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;

注:

  • 进程和程序(可执行文件)之间的区别

打开任务管理器,里面的 QQ 是跑起来的模板,这是一个进程,是动态的,被加载到内存中的

在这里插入图片描述

在我们的电脑中找到 QQ 文件安装的位置,找到 Bin 目录里的 QQ.exe 文件,这是一个可执行文件,是静态的,躺在硬盘上的

在这里插入图片描述

一个计算机的硬盘上可能会躺着很多的可执行文件,同一时刻,可能只有一小部分在运行(变成了进程)

  • 一个可执行文件,是 " 静态的 " ,当我们双击运行的时候,操作系统就会把这个可执行文件中的关键信息加载到内存中,并且开始运行里面的代码,就形成了一个进程.

📘2. 进程管理

一个操作系统上,同时跑着这么多进程,就需要操作系统来安排他们

管理:

  1. 先描述:使用一个类 / 结构体,把这个东西有啥特征,都表示出来
  2. 再组织:使用一个数据结构,把很多个这样的对象 / 结合体给整理到一起

结构体:进程管理是操作系统内核的功能,操作系统又是 C 语言实现的,C 语言的结构体就是低配的类.

📗3. PCB(进程控制块)

  • 就是一个结构体,这个结构体里就包含了一些表示进程的核心信息

操作系统内核中,就把若干 PCB 串成了一个双向链表

PCB 里面都有啥信息?

最好的办法还是看看操作系统内核的源码

    1. 进程的身份标识 pid (学号)

在这里插入图片描述

    1. 内存指针

操作系统要把一些必要的数据加载到内存中(必要的数据:有些是要运行的指令(代码),有些是运行时依赖的数据(全局变量))

内存指针就描述了:该进程的内存中哪些部分是指令,哪些部分是数据

    1. 文件描述表

表示了当前进程都打开了哪些文件

在代码中打开一个 fopen 就会在进程的文件描述符表 (顺序表) 里给这个文件分配一个表项。每个元素就代表一个打开的文件,对应的数组下标就是 " 文件描述符 "。

内存指针 和 文件描述表 描述了进程持有哪些系统的资源,也认为 进程 是操作系统中 " 资源分配 " 的基本单位

📕4. 进程的调度

进程里有一组比较关键的属性,用来实现进程的调度

  • 进程状态的优先级
  • 进程的状态
  • 进程的记账信息
  • 进程的上下文

本质问题:当前计算机,CPU 是有限的,但是进程数量是比较多的,例如 CPU 核心数只有 6 核,进程数量非常多,几十个,几百个,这就形成了狼多肉少的局面,操作系统是要做到尽可能的公平,让每个狼都有吃肉的机会,就需要进行调度

那么如何调度呢?轮流吃!

  • 并发式执行:宏观上同时执行,微观上不是同时执行

CPU 主频是1.9 Ghz,1s 有 19 亿个时钟周期,人是感知不到的,站在宏观的角度来看,好像这些进程是在同时进行,微观上并不是同时,而是 " 轮流 " 的方式占用 CPU 执行

  • 并行式执行:宏观上同时执行,微观上也是同时执行

CPU 上有多个核心,每个核心上都可以跑一个进程,某一时刻两个进程就是在两个 CPU 上同时执行的

实际开发中,并不会对这俩概念做明确的区分,往往使用 " 并发 " 概括表示 " 并发 " 和 " 并行 " 。–> " 并发编程 "

进程状态的优先级:安排时间表的时候先排谁,后排谁。

进程的状态:安排时间表的时候要考虑到每个人当前特定的情况。

两种比较典型的状态:

  • 就绪状态:进程是准备就绪的,随时可以在 CPU 执行
  • 阻塞状态:进程在等待某个任务完成(读写磁盘),完成之后才能上 CPU,完成之前就没办法继续执行

进程的记账信息:安排时间表的时候,就要考虑到一些历史记录,操作系统在安排进程的时候,也会记录每个进程以往在 CPU 上执行的时间,如果发现某个进程被安排的太少,就会适当的调整策略。(不一定是以执行指令为单位,也可能是以执行的指令数为单位)

进程的上下文:对于进程来说,上下文,具体指的就是 CPU 里的一堆寄存器里的值,上下文就会在进程被切出 CPU 的时候,把寄存器的状态保存到 PCB里(内存),下次进程回到 CPU 上就把 PCB 里的上下文读取出来,恢复到 CPU 寄存器中。

类似于我们打游戏,存档和读档,存档保存的信息,就是我上次退出游戏之前的状态,就是这个 " 上下文 "。

📒5. 进程的虚拟地址空间

进程,需要使用一些系统资源,其中内存资源,就是一个很关键的资源

每个进程都希望用自己的内存,互相不干扰,但是在 C语言 中有一个操作,叫做指针解引用,解引用的时候需要保证这个指针里面包含的地址,指向的是我们弄的合法地址,但是指针也可能指向错误,把别的进程弄挂了,这种行为就会让整个操作系统都很不稳定(操作系统要给应用程序提供稳定的运行环境)。

为了让各个进程之间不要相互干扰,操作系统就引入了 “虚拟地址空间” 这样的概念,每个进程都只能访问到自己的地址空间,相互之间不会有影响了,哪怕你指针指错,操作系统也能及时发现,不会影响到其他的进程,就算出问题,问题也被限制到进程的内部了。

在这里插入图片描述
比如进程3里面,*p = xxx,p 成了野指针指到错误的地址上了,进行操作 p 指向的内存的时候需要进过 MMU 进行映射,MMU 就知道当前访问的是一个有问题的地址,于是就会向操作系统告状,有进程访问内存错了,操作系统就会给对应的进程发一个 " 信号 "(这个信号的默认处理行为就是让程序终止运行),告诉他你的内存访问出错。

因为虚拟地址空间,进程就有了一个重要的特征:隔离性

每个进程都有一个 " 虚拟地址空间 " ,一个系统里面里的进程又有那么多,这些虚拟地址空间加到一起,比物理内存大了可咋办?

实际上:

  • 同一时刻执行的进程没几个
  • 即使同一时刻,有好几个进程在跑,这些进程也不是同时把所有的虚拟地址空间使用上了。(虽然每个进程的虚拟空间很大,但是实际使用的内存就只有一小部分,物理内存只需要把真实使用的这部分内存数据给表示出来即可)
  • 极端情况下,确实同时跑的这几个进程同时吃了很多的真实内存,确实是会导致物理内存不够(出现这种情况,算 bug,因此程序猿就需要想办法优化一下内存占用,或者扩容换一个内存更大的机器)

📔6. 进程间通信

进程引入了隔离性,确实让系统更稳定了,但是也有别的问题,多个进程之间想要配合工作,就麻烦了,操作系统又引入了 " 进程间通信 ",在隔离性的前提下,开了个口子,让多个进程之间能相互通信

操作系统提供的进程间通信方式有很多种,但是本质上都是一样的!!!搞一个多个进程之间都能访问到的公共资源,借助公共资源来进行通信!!

在这里插入图片描述
在后面网络编程中会更加详细提及,网络通信本质上也是一种进程间通信!而且是现在最主要的使用方式。

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

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

相关文章

Hot 100 | 79. 单词搜索、200. 岛屿数量

LeetCode 79. 单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格…

GPT-4——比GPT-3强100倍

GPT-4——比GPT-3强100倍 当前世界上最强大的人工智能系统当属ChatGPT。推出2个月用户数就突破1亿。ChatGPT是当下最炙手可热的话题,科技圈几乎人人都在讨论。这边ChatGPT的热度还在不断攀升,另一边来自《纽约时报》的最新报道称ChatGPT即将被自家超越&…

chatGPT在命令行聊天实现方法

一个简单、轻量级的 shell 脚本,无需安装 python 或 node.js,即可从终端使用 OpenAI 的 chatGPT 和 DALL-E。该脚本将completions端点和text-davinci-003模型用于 chatGPT 以及images/generations用于生成图像的端点。 支持功能 1、从终端与 GPT 聊天 …

某某银行行面试题目汇总--HashMap为什么要扩容

一、HashMap啥时候扩容,为什么扩容? HashMap的默认大小是16。在实际开发过程中,我们需要去存储的数据量往往是大于存储容器的默认大小的。所以,出现容量默认大小不能满足需求时,就需要扩容。而这个扩容的动作是由集合自…

MySQL数据库常用命令汇总(全网最全)

目录 数据库常用命令 数据库的创建 数据表的操作 表数据的增删查改 分组与函数查询 运算符:数学运算符 连接查询 多表查询 修改语句 删除语句 字符查询like MySQL练习 总结感谢每一个认真阅读我文章的人!!! 重点&…

DS期末复习卷(七)

一、选择题(30分) 1.设某无向图有n个顶点,则该无向图的邻接表中有( B )个表头结点。 (A) 2n (B) n ( C) n/2 (D) n(n-1) n 表头结点数顶点数 2.设无向图G中有n个顶点,则该无向图的最小生成树上有&#xff…

mysql修改root用户密码

一、记得密码 登录mysql执行以下语句 mysql -u root -p 按回车确认, 如果安装正确且 MySQL 正在运行, 会得到以下响应: 然后输入正确的密码,进入mysql 然后修改密码: mysql> ALTER USER rootlocalhost IDENTIFIED BY 123456; mysql> flush p…

二叉树——路径总和

路径总和 链接 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点…

风光并网对电网电能质量影响的matlab/simulink仿真建模

之前配电网的一个项目,我把其中一部分分享给大家,电能质量影响这部分,我在模型中主要体现的就是不同容量的光伏、风电接入,对并网点的电压影响情况。 前言 考虑到我国的地理因素以及气候影响问题,我国的风电开发相应的…

华为分布式存储(FusionStorage)

Server SAN SAN:存储区域网络 IP SAN:以太网交换机和普通网线连接的存储,交换机之间做堆叠FC SAN:FC(光纤)交换机和光纤连接的存储,交换机之间做级联Server SAN:可以使用以太网交换机…

75岁彪马再发NFT 复活美洲狮IP

在“运动品牌Web3”的潮流里,彪马(PUMA)绝对算是发烧友级别。2月22日,这家德国服装品牌的新NFT又来了,总量10000个Super PUMA NFT中,将有4000个以0.15 ETH(约为255美元)价格正式公售…

C++设计模式(18)——模板方法模式

亦称: Template Method 意图 模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 问题 假如你正在开发一款分析公司文档的数据挖掘程序。 用户需要向程序输入各种格式…

ICRA 2023 | 首个联合暗光增强和深度估计的自监督方法STEPS

原文链接:https://www.techbeat.net/article-info?id4629 作者:郑宇鹏 本文中,我们提出了STEPS,第一个自监督框架来联合学习图像增强和夜间深度估计的方法。它可以同时训练图像增强网络和深度估计网络,并利用了图像增…

【JAVA程序设计】(C00103)基于Springboot+Thymeleaf智能分类的相册管理系统——有文档

基于SpringbootThymeleaf智能分类的相册管理系统——有文档项目简介项目获取开发环境项目技术运行截图项目简介 基于SpringbootThymeleaf智能分类的相册管理系统共分为二个角色:系统管理员、用户 管理员角色包含以下功能: 登录、用户管理(增…

LeetCode-131. 分割回文串

目录题目思路回溯题目来源 131. 分割回文串 题目思路 切割问题类似组合问题。 例如对于字符串abcdef: 组合问题:选取一个a之后,在bcdef中再去选取第二个,选取b之后在cdef中再选取第三个…。切割问题:切割一个a之后&…

现在的00后,实在是太卷了

现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天,原来这位小老弟家里条…

ES mapping 详解

nested 类型??? _all _routing; ES-mapping Elasticsearch根据业务创建映射mapping结构分析:keyword和text(一)_elasticsearch keyword mapping_周全全的博客-CSDN博客 0.Mapping样例 {"mapping…

【微信小程序】--JSON 配置文件作用(三)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#…

【Vue源码解析】Vue虚拟dom和diff算法

Vue虚拟dom和diff算法1. 简介2. 搭建环境1. 安装snabbdom2. 安装webpack5并配置3、函数3.1 虚拟节点vnode的属性3.2 使用h函数 创建虚拟节点3.3 使用patch函数 将虚拟节点上DOM树3.4 h函数嵌套使用,得到虚拟DOM树(重要)3.5 patchVnode函数3.6…

Mac 上搭建 iOS WebDriverAgent 环境

文章目录Mac环境搭建配置 Xcode 生成 WDA常见问题brew 安装失败Mac环境搭建 macOS 系统电脑:12.6.2 Xcode:14.0.1(xcodebuild -version) appium Desktop:1.21.0 (下载链接) Appium Desktop 1.22.0 ,从该版…