进程,线程,虚拟内存,交换技术

参考资料:

参考视频1icon-default.png?t=N7T8https://www.bilibili.com/video/BV1Hs421M78w/?spm_id_from=333.999.0.0&vd_source=97411b9a8288d7869f5363f72b0d7613

参考视频2icon-default.png?t=N7T8https://www.bilibili.com/video/BV1jE411W7e8/?spm_id_from=333.337.search-card.all.click&vd_source=97411b9a8288d7869f5363f72b0d7613


相关阐述:

  1. 进程和线程
  1. 进程
  1. 执行磁盘上由代码编写的程序,并将程序从磁盘加载到内存中,变成一个可执行的程序,我们称之为进程
  2. 每一个进程都拥有一块独立的虚拟内存(下面会讲),认为自己独占了整个物理内存(即内存条)

  1. 线程
  1. 当进程的作用机制比较复杂,一个主线程不能满足同时处理多个事件,就需要开启多个线程来进行处理;
  2. 进程中的多个线程,共享着进程的虚拟内存
  3. 进程是可执行程序的一个独立工作单位,拥有者独立的内存和工作逻辑
  1. 计算机的内存分层
  1. 分层存储器体系

计算机的存储器大致分为三类:

  1. 永久存储:磁盘
  2. 临时存储:内存条
  3. 临时存储:高速缓存(通常位于CPU,寄存器等元件中)

它们速度越来越快,价格缺越来越高

  1. 虚拟内存

通常情况下,计算机系统运行的进程所需要的内存空间是远大于计算机实际的内存条的大小的,为了应对这种情况

  1. 原始的方式
  • 最原始的办法是利用基址寄存器和界限寄存器,为进程分配一段连续的物理内存,即一部分内存条;

其中,基址寄存器存储的是进程在物理内存上开始的地址,界限寄存器存储的是进程基于开始地址的偏移量

  • 但是这样显然物理内存不够每个进程分,我们就需要在磁盘中开辟一部分空间来临时存储未分配到物理内存的进程,当物理内存中有进程关闭,就将磁盘中的进程拷贝至物理内存中,或者当物理内存中有进程处于休息状态,就将休息的进程拷贝至磁盘中,将磁盘中的待执行的进程拷贝至物理内存中执行。这项技术叫内存交换技术(swapping)

  • 在频繁的物理内存和磁盘的进程交换过程中,物理内存会产生很多间隙,称之为空洞(hole),整理物理内存空洞,将进程的物理内存地址尽可能向下移动,使他们紧密的排列在一起的技术,叫内存紧缩(Memory Compaction);内存紧缩效率很低,需要很多时间。

  1. 新的内存管理方式-虚拟内存

使用基址寄存器和界限寄存器管理内存的方式因为其效率低下,已经不再使用,取而代之的是虚拟内存

  • 虚拟内存其实就是将进程所需要的物理内存,以及磁盘文件进行切分,通常4kb为一个单位,只加载CPU使用的部分到物理内存中,其余不使用的部分仍然留在磁盘文件中,使得内存的有效使用率达到最大;其中内存中叫页框,磁盘中叫页,都是4KB

  • 当然CPU并不是直接通过物理地址访问物理内存的,它是通过内存管理单元(MMU),将逻辑上的虚拟内存地址转换为物理内存地址(具体原因下面说)
  • 当进程启动时,进程会在逻辑上分配整个物理内存甚至比物理内存更大的内存,但是只加载CPU需要的页到物理内存中,以应对进程更为复杂的运行;
  • 并且会内存中的页表生成虚拟内存到物理内存的映射关系;

  • 当进程需要对虚拟内存中的页进行读写时,MMU就会通过页表到物理内存中寻找,如果物理内存没有加载,就到磁盘中进行加载
  • 当物理内存中的页框,不被CPU使用时,就会被释放,写入到磁盘中
  • 当然操作系统有缓存机制,物理内存会保存近期使用的页表项,来提高效率


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

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

相关文章

独家首发 | Matlab实现SVM-Transformer多变量回归预测

独家首发 | Matlab实现SVM-Transformer多变量回归预测 目录 独家首发 | Matlab实现SVM-Transformer多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现SVM-Transformer多变量回归预测,SVM递归特征消除Transformer多输入单输出回归预测…

从项目中学习Bus-Off的快慢恢复

0 前言 说到Bus-Off,大家应该都不陌生,使用VH6501干扰仪进行测试的文章在网上数不胜数,但是一般大家都是教怎么去干扰,但是说如何去看快慢恢复以及对快慢恢复做出解释比较少,因此本文以实践的视角来讲解Bus-Off的快慢恢…

STM32人体心电采集系统

资料下载地址:STM32人体心电采集系统 1、项目功能介绍 此项目主要实现了以STM32为核心的人体心电采集系统软硬件的设计。软件设计过程是在STM32上移植的uCGUI做图形界面,并如实显示采集到的心电波形信号,有SD卡存储和USB数据传输功能。 2、实…

反激开关电源反馈电路相关参数选型

Vb的电压正常变化范围是:0-1V(最低0V,由于有稳压管,最高不会超过1V) Vb的电压越高,则输出占空比越大,Vb电压越低,则输出占空比越小 那么Va的正常变化范围应该是:1.4-4.…

阅读这篇文章,彻底了解响应式网页设计

随着移动设备的普及,访问网站的方式发生了翻天覆地的变化。人们不再仅仅依靠桌面机来获取信息和享受在线服务。这给网页设计带来了巨大的挑战。如何构建一个能够在各种设备上流畅运行并提供一致用户体验的网站,已经成为每个网页设计师关心的问题。此时&a…

超详细之IDEA上传项目到Gitee完整步骤

1. 注册gitee 账号密码,gitee官网地址:Gitee官网,注册完成后,登录。 2. 创建仓库,在主页左下角有新建按钮,点击新建后会进入到此页面填写仓库信息。 3. 创建完成后复制仓库地址 4. 打开IntelliJ IDEA新建或…

java基于ssm+jsp 房屋租赁系统

1 管理员登录 管理员输入个人的用户名、密码登录系统,这时候系统的数据库就会在进行查找相关的信息,如果我们输入的用户名、密码不正确,数据库就会提示出错误的信息提示,同时会提示管理员重新输入自己的用户名、密码,…

Chapter8 透明效果——Shader入门精要学习笔记

一、基本概念 在Unity中通常使用两种方法来实现透明效果 透明度测试(无法达到真正的半透明效果)透明度混合(关闭了深度写入) 透明度测试 基本原理:设置一个阈值,只要片元的透明度小于阈值,就…

go Channel原理 (三)

Channel 设计原理 不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。 在主流编程语言中,多个线程传递数据的方式一般都是共享内存。 Go 可以使用共享内存加互斥锁进行通信,同时也提供了一种不同的并发模型,即通…

信息系统的安全模型

1. 信息系统的安全目标 信息系统的安全目标是控制和管理主体(含用户和进程)对客体(含数据和程序)的访问。作为信息系统安全目标,就是要实现: 保护信息系统的可用性; 保护网络系统服务的…

基于Java实现图像浏览器的设计与实现

图像浏览器的设计与实现 前言一、需求分析选题意义应用意义功能需求关键技术系统用例图设计JPG系统用例图图片查看系统用例图 二、概要设计JPG.javaPicture.java 三、详细设计类图JPG.java UML类图picture.java UML类图 界面设计JPG.javapicture.java 四、源代码JPG.javapictur…

jvm性能监控常用工具

在java的/bin目录下有许多java自带的工具。 我们常用的有 基础工具 jar:创建和管理jar文件 java:java运行工具,用于运行class文件或jar文件 javac:java的编译器 javadoc:java的API文档生成工具 性能监控和故障处理 jps jstat…

Spring Boot 实现 AOP 动态热插拔功能并附DEMO源码

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

【解锁未来:深入了解机器学习的核心技术与实际应用】

解锁未来:深入了解机器学习的核心技术与实际应用 💎1.引言💎1.1 什么是机器学习? 💎2 机器学习的分类💎3 常用的机器学习算法💎3.1 线性回归(Linear Regression)&#x1…

基础算法模板

1. 相向双指针 class Solution { // 两数之和public int[] twoSum(int[] numbers, int target) {int left 0; // 第一步初始化开头和结尾两个指针int right numbers.length - 1;while (true) { // 之后一直while循环 int s numbers[left] numbers[right]; //计算左右两个…

Flutter循序渐进==>数据结构(列表、映射和集合)和错误处理

导言 填鸭似的教育确实不行,我高中时学过集合,不知道有什么用,毫无兴趣,等到我学了一门编程语言后,才发现集合真的很有用;可以去重,可以看你有我没有的,可以看我有你没有的&#xf…

mybatis实现多表查询

mybatis高级查询【掌握】 1、准备工作 【1】包结构 创建java项目,导入jar包和log4j日志配置文件以及连接数据库的配置文件; 【2】导入SQL脚本 运行资料中的sql脚本:mybatis.sql 【3】创建实体来包,导入资料中的pojo 【4】User…

Swift宏的实现

上篇介绍了Swift宏的定义与生声明,本篇主要看看是Swift宏的具体实现。结合Swift中Codable协议,封装一个工具让类或者结构体自动实现Codable协议,并且添加一些协议中没有的功能。 关于Codable协议 Codable很好,但是有一些缺陷&…

141个图表,完美展示数据分类别关系!

本文介绍使用Python工具seaborn详细实现分类关系图表,包含8类图141个代码模版。 分类关系图表用于展示数字变量和一个或多个分类变量之间的关系,可以进一步分为:箱形图(box plot)、增强箱形图(enhanced bo…

DP:子数组问题

文章目录 引言子数组问题介绍动态规划的基本概念具体问题的解决方法动态规划解法:关于子数组问题的几个题1.最大子数组和2.环形子数组的最大和3.乘积最大子数组4.乘积为正数的最长子数组长度5.等差数列划分 总结 引言 介绍动态规划(DP)在解决…