当前位置: 首页 > news >正文

进程、操作系统

文章目录

  • 一、冯诺依曼体系(Von Neumann Architecture)
    • 1. 概述
    • 2. CPU
  • 二、操作系统(Operating System)
  • 三、进程(process)/任务(task)

一、冯诺依曼体系(Von Neumann Architecture)

1. 概述

在这里插入图片描述

  • 分类

    • CPU 中央处理器: 进行算术运算和逻辑判断.
    • 存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
    • 输入设备: 用户给计算机发号施令的设备.
    • 输出设备: 计算机给用户汇报结果的设备.
  • 针对存储空间:硬盘 > 内存 >> CPU

  • 针对数据访问速度:CPU >> 内存 > 硬盘

2. CPU

(1)如何衡量一个CPU的好坏
通过主频/频率(CPU的时钟频率),数值越大,CPU越好

  • 主频:CPU执行的每个操作的最小单位,称为“指令”,写的一个程序,往往里面包含很多指令,可以简单理解为,1Hz == 一秒钟能够执行1个指令,1.9GHz就是一秒钟能执行19亿条指令,有的指令需要消耗好几个Hz,但是大部分指令1Hz就够了
  • 主频是动态变化的,还可以通过给CPU加电压的方式提高主频

(2)与显卡的区别

  • 显卡的本质和CPU是一样的,CPU是“通用计算芯片”,GPU是“专用计算芯片”。CPU计算能力比GPU更强,能执行复杂的计算,但是CPU只有一个,显卡有很多个,且进行简单运算时很快。
  • 显卡是用来显示图形的,图形的显示需要大量且简单的计算,这种用CPU也能算,但是大材小用,用GPU算更加合适
  • 现在显卡也可以用于AI(也需要进行大量且简单的运算)

(3)寄存器(Register)

  • 存储
    • 是个存储数据的单位,是CPU的一部分
    • 寄存器存储空间更小,访问速度更快,成本更高,掉电后数据会丢失
      • 寄存器的速度和内存速度的差距极大,是3-4个数量级
      • 内存上现在有16GB,服务器上256GB,512GB也有,寄存器一般就几十个字节或者几百个字节,甚至连几kb都达不到
  • 用途:辅助CPU完成指令的执行,一条指令,不仅仅是指令本身,还包括操作数,操作数通常就是在寄存器中保存的

(4)缓存

由于寄存器和内存之间速度和空间上的差异太大,难以协调工作,所以CPU又引入了“缓存”来调和两者之间的速度和空间。比如CPU上要进行一系列运算,在运算过程中,要反复用到一组内存中的数据,这些数据要频繁使用,需要频繁访问内存,同时这些数据又比较多,在寄存器里存不下,这时候就可以放到缓存之中

  • 缓存的存储空间介于寄存器和内存空间,后由于寄存器和内存之前差距太大,CPU又搞了二号缓存、三号缓存……

在这里插入图片描述

二、操作系统(Operating System)

操作系统是一组做计算机资源管理的软件的统称。对下,要管理各种硬件设备,对上要给各种软件提供一个稳定的运行环境
目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。
操作系统把硬件屏蔽起来,对软件这里提供出一组API(系统调用),让软件来调用,这样每个写软件的人,就不需要考虑硬件的差别和兼容性

在这里插入图片描述

三、进程(process)/任务(task)

作用:满足“并发编程”这样的需求,可以在多核心CPU的背景下,让应用程序中的代码可以把多个核心充分的利用起来,不至于一核有难,多核微观

1.概念

正在运行的程序

  • 同一个程序,执行多次,就可能会产生出多个进程,平时所说的程序,指的是一些exe的可执行文件,是静态的,得是把程序运行起来(双击,此时操作系统会把可执行文件中的数据和指令,加载到内存中,并且让cpu去执行这里的指令,完成一系列相关的工作),才能说是“进程”
  • 进程能够干活,说明进程能够消耗一定的硬件资源。可执行程序只是占用了硬盘空间,而进程,会消耗CPU资源、内存资源、硬盘、网络带宽
    • 比如下载操作,下载的是一个程序,是静态的,没法执行任何操作,但是安装就是真正运行起来,成为进程了
  • 进程是系统分配硬件资源的基本单位
  • java的生态不鼓励多进程编程

2.管理

当进程非常多的时候,就需要管理进程

(1)步骤

  • 先描述
    • 会使用一个专门的结构体(C语言的结构体,操作系统主要都是C/C++实现的,结构体就是一个低配的类), 叫PCB(进程控制块),这是通用叫法,各种系统用来描述进程的部分都可以称为PCB,来记录一个进程里面的各个属性
      • Linux中的PCB在源码中是一个task_struct结构体
  • 再组织
    • 使用一系列的数据结构,把多个进程进行一个有效的组织,随时方便进行遍历,查找,汇总数据……,LInux通常是使用双向链表把多个PCB结构体串起来来进行组织
      • 当使用双向链表来组织时
        • 查看进程的列表,本质就是在遍历这个链表
        • 创建一个进程,就是创建了一个PCB结构体,并且插入到链表上
        • 销毁一个进程,就是把这个PCB结构体从链表上删除并释放

(2)PCB里的信息

  • pid进程的标识
    同一个系统上,统一时刻中,每个进程的pid一定都是不同的。ps.有的时候,运行的一个exe文件,实际可能会涉及多个进程
  • 内存指针:表示了该进程对应的内存资源是什么样的
    • 里面最主要存储的就是从exe可执行文件中加载过来的指令和数据,还有一些运行过程中的中间结果之类的数据
      • 指令:二进制的指令,是程序员开发这个程序后最终编译生成的结果,也就是代码的逻辑,然后进一步的再交给CPU来执行。指令就是一个剧本,进程就是演员。
      • 数据:执行的这些指令会依赖到一些数据
  • 文件描述符表
    • 硬盘是硬件,应用程序一般是没法直接接触到“硬件”这一层的,于是操作系统抽象了“文件”这样的概念,应用程序操作的是文件,文件实际上是存储在硬盘上的。而“文件描述符表”就是记录当前这个进程正在使用哪些文件(fopen先打开,fread 再使用,fwrite,fclose最后关闭)
    • 操作系统打开一个文件,就会产生一个“文件描述符”(相当于是文件的身份标识,只在进程内部生效)
    • 会使用文件描述符表(类似于数组),把文件描述符组织起来

3.进程的调度和多核心CPU

每个进程想要执行里面的指令,完成对应的任务,都需要在CPU上执行。但是一台机器上只有一个CPU,同一时刻的进程却有很多个,为了解决这个问题,引入了进程的调度以及多核心的CPU

(1)多核心的CPU

  1. 早期的CPU都是单核心的,即一个CPU上只有一个场地,同一时刻只能让一个进程在里面运行。当单核心的集成程度没法提高时,工程师开始增加核心的个数。比如,双核CPU,一个顶俩。甚至超线程技术,让一个CPU的核心一个顶俩,即一个CPU核心是一个物理核心,相当于两个逻辑核心

  2. CPU只有一个,但是给进程提供的舞台不只有一个,现在的CPU都是多核心的

(2)进程的调度

  • 并行:同一时刻,两个进程,同时运行在两个CPU逻辑核心上
  • 并发:两个进程,在同一个舞台上,轮着上,由于CPU切换进程速度极快,微观上,这俩进程是串行执行的,宏观上,看起来这俩进程就是“同时”执行的。
  • 操作系统在调度这个进程的时候,可能是按照并行来的,也可能是按照并发的方式来的,在应用程序这一层,是感知不到的,只有在系统内核中能感知到,相当于下属只知道那天要自己当班,但是不知道具体是怎么安排的,安排的是专门的负责人。也因为宏观感知上都差不多,所以会有“并发”代替“并发”+“并行”

(3)PCB中关于进程调度相关的属性

这些属性也描述了进程对应的CPU资源的使用情况

  • 状态
    • 就绪状态:一个进程已经随时做好了在CPU上执行的准备
    • 阻塞状态/睡眠状态:有的时候,进程没有准备好被调度到CPU上
    • 状态是可以转换的,进程在系统中状态还有很多种,但是上述两种最关键
  • 优先级
    • 系统给进程进行调度的时候,并不是完全公平的,会根据优先级的不同,来决定时间分配的权衡,即把系统资源调配给更重要的进程
  • 上下文
    • 因为进程是轮着上的,如果一次运行不完,就需要保证下次上CPU运行的时候,能够读档,即实现存档和读档的效果。
    • 对于操作系统来说,所记录的上下文就是该进程在执行过程中,CPU的寄存器中对应的数据,这些寄存器有的是存一些中间结果,有的是存一些特定含义的数据(比如下一条指令是在哪里,当前的函数调用关系等),这些寄存器中的数据就需要在进程离开CPU之前,都保存好。下次该进程回到CPU执行,就可以把PCB中的上下文里的数据恢复到对应的寄存器中,这个时候进程就能实现“读档”的操作了
  • 记账信息
    • 相当于是一个统计信息,会统计每个进程在CPU上都执行多久了,执行了多少指令,是对进程的调度工作进行一个“兜底”(不让某一个进程排的时间太多或太少)

(4)虚拟地址空间

使用场景:每个进程都需要一定的内存资源,早期的操作系统就是直接把物理内存分配给进程(某块内存给哪个进程),但是一旦某个进程内部代码写出bug,内存越界访问了,就可能会影响到别的进程,为了解决这个问题,操作系统引入了“虚拟地址空间”这样的概念

在这里插入图片描述

  • 这样设定之后,每个进程的有效的虚拟地址,都是固定范围,进程使用该虚拟地址的内存,都需要操作系统进行转换成物理地址的过程,这个转换过程中,就可以针对虚拟地址是否有效作出一个校验
    • 校验:系统自动检查看是否出现非法的地址的使用,能够及时地通知这个进程,甚至直接让进程挂掉,避免影响到其他的进程,提高了整个系统的稳定性。
  • 在虚拟空间地址的加持下,进程具有了“独立性”,每个进程有自己的虚拟地址空间,一个进程无法直接访问,或者修改其他进程虚拟地址空间的内存,强化了系统的稳定性

(5)进程间通信

在进程隔离性的基础上,放松一点,让进程能够有限制的进行相互影响。本质上是:找一个公共的区域,多个进程都能访问到的区域,借助公共区域来完成数据的交换

相关文章:

进程、操作系统

文章目录 一、冯诺依曼体系(Von Neumann Architecture)1. 概述2. CPU 二、操作系统(Operating System)三、进程(process)/任务(task) 一、冯诺依曼体系(Von Neumann Architecture) 1. 概述 分类 CPU 中央处…...

hadoop学习:mapreduce入门案例四:partitioner 和 combiner

先简单介绍一下partitioner 和 combiner Partitioner类 用于在Map端对key进行分区 默认使用的是HashPartitioner 获取key的哈希值使用key的哈希值对Reduce任务数求模决定每条记录应该送到哪个Reducer处理自定义Partitioner 继承抽象类Partitioner,重写getPartiti…...

HTTP与SOCKS5的区别对比

在互联网世界中,服务器是一种重要的工具,可以帮助我们提高网络安全性等。今天,我们将重点关注两种常见的技术:HTTP和SOCKS5。让我们深入了解它们的工作原理、用途和优缺点,并通过Python代码示例学习如何使用它们。 HT…...

在阿里云请求发短信接口去掉证书验证

composer require alibabacloud/dysmsapi-20170525 2.0.23 cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://dysmsapi.aliyuncs.com/?PhoneNumbers 两种方法 第一…...

k8s里pv pvc configmap

通过storageClassName 将PV 和PVC 关联起来。 [rootk8-master home]# cat /home/npm-pvc.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata:name: npm-repository-pvcnamespace: jenkins spec:accessModes:- ReadWriteManyresources:requests:storage: 50GistorageC…...

【Atcoder】 [ARC144D] AND OR Equation

题目链接 Atcoder方向 Luogu方向 题目解法 考虑满足条件 2 2 2 的形式为 a n p 0 ∑ i ∈ n p i a_np_0\sum\limits_{i\in n}p_i an​p0​i∈n∑​pi​ 这是一步很巧妙的转化,神奇地利用了 & \& & 和 ∣ | ∣ 的性质,把求 a a a 的…...

python使用字典暴力解析wifi密码

前言 最近无wifi可用,搜到了很多高质量但是没有密码的WiFi,我在想应该可以用python调用常见的wifi字典包来暴力破解一下这些WiFi,也许可以成功 原理 使用pip install pywifi命令安装pywifi 使用它调用本机网卡,设置wifi加密方式,对字典包扫描密码逐个尝试 扫描失败的密码会被…...

java八股文面试[多线程]——synchronized锁升级详细流程

偏向锁 偏向锁是JDK6中的重要引进,因为HotSpot作者经过研究实践发现,在大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低,引进了偏向锁。 偏向锁是在单线程执…...

ui网页设计实训心得

ui网页设计实训心得篇一 通过这次实训对这门课程的学习,做好网页,并不是一件容易的事,它包括网页的选题、 内容采集整理、 图片的处理、 页面的排版设置、 背景及其整套网页的色调等很多东西。 所以我得出一下总结: 一、 准备资…...

论文阅读_扩散模型_DDPM

英文名称: Denoising Diffusion Probabilistic Models 中文名称: 去噪扩散概率模型 论文地址: http://arxiv.org/abs/2006.11239 代码地址1: https://github.com/hojonathanho/diffusion (论文对应代码 tensorflow) 代码地址2: https://github.com/AUTOM…...

菜鸟教程《Python 3 教程》笔记(15):数据结构

菜鸟教程《Python 3 教程》笔记(15) 15 数据结构15.1 将列表当作队列使用15.2 遍历技巧 笔记带有个人侧重点,不追求面面俱到。 15 数据结构 出处: 菜鸟教程 - Python3 数据结构 15.1 将列表当作队列使用 在列表的最后添加或者弹…...

CH05_介绍重构名录

重构的记录格式 每个重构手法都有5个部分。 名称(name) 要建造一个重构词汇表,名称是很重要的。 速写(sketch) 名称之后是一个简单的速写(sketch);这部分可以帮助你更快找到你所…...

1、Nginx 简介

文章目录 1、Nginx 简介1.1 Nginx 概述1.2 Nginx 作为 web 服务器1.3 正向代理1.4 反向代理1.5 负载均衡1.6 动静分离 【尚硅谷】尚硅谷Nginx教程由浅入深 志不强者智不达;言不信者行不果。 1、Nginx 简介 1.1 Nginx 概述 Nginx (“engine x”) 是一个高性能的 HT…...

C++之——宏

宏(Macro)是一种在编程语言中使用的符号,通常用于将一段代码片段替换为另一段代码。宏在代码中起到了预处理的作用,它们在编译代码之前被处理和展开。宏通常用于简化代码、提高代码的可读性、实现代码重用以及引入编译时常量。 在…...

代码随想录打卡—day56—【编辑距离】— 9.2 编辑距离系列

1 583. 两个字符串的删除操作 583. 两个字符串的删除操作 【注意点1】感觉和下面这题很像。就是一模一样,return变一下就是。 1143. 最长公共子序列 【注意点2】注意这题和day55的最后一题的区别,本题求的是最大长度,那题求的是组合方式。…...

uni-app app端.m3u8类型流的播放

1.开发环境:HBuilderX3.8.7、uni-app、vue2.0、view2.0、uni-ui 2.实现通过web-view 嵌入H5页面,进行视频流自动播放。 注意事项: 如果只是在android端可以直接使用.flv格式的视频流; 如果App需要支持ios就可以考虑一下播放.m3u8格…...

使用proxy_pool来为爬虫程序自动更换代理IP | 开源IP代理

1. 前言 之前做爬虫的时候,经常会遇到对于一个网页,使用同一个IP多次会被禁掉IP的问题,我们可以自己手动更换代理IP再继续这个问题但多少会有点麻烦,我对于一个懒人来说,手动更换IP太麻烦,而且也不符合程序员懒惰的美德,于是便有了下面的故事。proxy_pool 是一个开源的代…...

【易售小程序项目】修改“我的”界面前端实现;查看、重新编辑、下架自己发布的商品【后端基于若依管理系统开发】

文章目录 “我的”界面修改效果界面实现界面整体代码 查看已发布商品界面效果商品数据表后端上架、下架商品ControllerMapper 界面整体代码back方法 编辑商品、商品发布、保存草稿后端商品校验方法Controller 页面整体代码 “我的”界面修改 效果 界面实现 界面的实现使用了一…...

Centos7 + Apache Ranger 2.4.0 部署

一、Ranger简介 Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、Hive、Hbase等进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。 1、组件列表 # Service Name Liste…...

硬件SPI口扩展

在工控板设计中,经常会遇到扩展IO。具有相同的功能电路板接口相同,所以很容易采用排线方式连接到CPU主控板上,这种排线连接,我称之为总线。 现在的CPU引脚多,不扩展IO,使用模拟SPI,也可以实现&…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘&#xf…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下&#xf…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...

数据库——redis

一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...