再看Java-笔试

放在前面的话

最近确实有些空闲,分配的功能从一开始的两眼一黑到现在的一上午就能完成,这何尝不是一种进步呢。

该说不说,海康的API问题相比较其他第三方的API还是蛮多的,而且10月份人工客服还会停运,不过到那个时候我也用不到了。

而这篇博客其实也就是汇聚一下笔试的相关知识点。

正文

macOS使用的是unix内核,它其实是unix的一条分支;

而linux其实也是基于unix开发的,也是unix的一条分支,因此macos和linux其实都是基于unix的分支。因此,不能说macos是基于linux开发的。

下面是基于linux开发的常见操作系统,用的较多的包括:红帽RedHat、CentOS、Ubuntu

进程调度的定义:进程调度的主要功能是按照一定的策略选择—个处于就绪状态的进程,使其获得处理机执行。

进程调度是操作系统的核心功能之一,简单来说,它就是合理安排各个程序运行的顺序和时间,使得系统能够高效运转。

局部变量和函数参数存放在栈上

全局变量和今天变量被分配到同一块全局静态区域中

常量存储在常量存储区 ,不允许修改

代码存放在 代码区,不允许修改,但是可以执行

C++中new一个对象是从堆上分配内存 。

希尔排序

希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。
尔排序中对于增量序列的选择十分重要,直接影响到希尔排序的性能。
希尔排序并不稳定, 相同大小的元素很可能调换原始的先后次序

冒泡排序是两两比较,一轮找出一个最大的,所以叫冒泡。

选择是下标元素和其他未排序的元素比较,一轮找出最大或最小的那个。

软链接与硬链接

符号连接,在计算机领域通常指的是符号链接(Symbolic Link),也称为软链接。它是一类特殊的文件,其主要特点是包含了一条以绝对路径或者相对路径的形式指向其他文件或目录的引用

  • 如果删除的是软链接文件本身(即那个包含指向另一个文件路径的文本字符串的文件),那么软链接将不再存在于文件系统中。但请注意,这并不影响被软链接指向的文件,该文件仍然完好无损地存在于其原始位置。
  • 如果删除的是软链接所指向的文件,那么软链接将变得无效。

硬链接是通过inode(索引节点)进行的链接。在Linux系统中,每个文件都有一个唯一的inode号,inode中存储了文件的元数据(如文件大小、创建和修改时间、权限等)和数据块位置信息。硬链接允许多个文件名指向同一个inode号,即多个文件名可以关联到同一个文件的内容。

  • 删除一个硬链接并不会影响文件本身的内容,因为inode和文件数据块仍然存在,只要还有其他硬链接指向该inode。
  • 只有当最后一个硬链接被删除时,inode和文件数据块才会被释放,文件才会被真正删除。
  • 如果删除的是硬链接所指向的原文件(即该文件不是通过硬链接创建的,而是最初的文件),并且还有其他硬链接指向该文件,那么文件本身仍然是有效的,因为这些硬链接仍然指向同一个inode和文件数据块。
  • 如果没有其他硬链接指向该文件,那么文件将被删除,所有硬链接都会失效。

在一个进程终止后,其所打开的文件通常不会被系统删除。文件的删除需要由用户或程序通过显式的删除操作来完成。

1 代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作

2 数据段:存放程序静态分配的变量和全局变量

3 BSS段:BSS段包含了程序中未初始化的全局变量,在内存中 bss段全部置零。

进程都有自己的虚拟地址空间,把虚拟地址转换为物理地址需要查找页表,页表查找是一个很慢的过程,因此通常使用Cache来缓存常用的地址映射,这样可以加速页表查找,这个Cache就是TLB(translation Lookaside Buffer,TLB本质上就是一个Cache,是用来加速页表查找的)。

由于每个进程都有自己的虚拟地址空间,那么显然每个进程都有自己的页表,那么当进程切换后页表也要进行切换,页表切换后TLB就失效了,Cache失效导致命中率降低,那么虚拟地址转换为物理地址就会变慢,表现出来的就是程序运行会变慢,而线程切换则不会导致TLB失效,因为线程无需切换地址空间,因此我们通常说线程切换要比较进程切换块,原因就在这里。
 

 

进程切换需要切换地址空间,而线程切换不需要,这主要是由于进程和线程在内存管理上的根本区别所导致的。

进程与地址空间

  1. 进程定义:进程是系统进行资源分配和调度的一个独立单元,是程序的一次动态执行过程。每个进程都有自己独立的虚拟地址空间,这个空间是进程运行所必需的,包括代码段、数据段、堆和栈等。

  2. 地址空间切换:当操作系统进行进程切换时,意味着从一个进程切换到另一个进程。由于每个进程都有自己独立的虚拟地址空间,因此切换进程时必须同时切换其对应的地址空间。这包括更新页表、刷新TLB(Translation Lookaside Buffer,快表)等操作,以确保新进程能够正确地访问其地址空间中的数据和代码。

线程与共享地址空间

  1. 线程定义:线程是进程中的一个实体,是CPU调度和分派的基本单位,它是比进程更小的独立运行的单位。线程是进程的一部分,因此它共享进程所拥有的全部资源,包括内存和地址空间。

  2. 无需切换地址空间:由于线程共享其所在进程的虚拟地址空间,因此在同一进程内的线程切换时,无需进行地址空间的切换。线程切换主要涉及的是线程上下文(如寄存器值、程序计数器等)的保存和恢复,以及线程调度相关的操作,这些操作相对于进程切换来说开销要小得多。

        所以,进程切换需要切换地址空间是因为每个进程都有自己独立的虚拟地址空间;而线程切换不需要切换地址空间是因为线程共享其所在进程的虚拟地址空间。这种差异导致了进程切换和线程切换在开销和性能上的显著差异。在需要频繁切换执行单元的场景中,使用线程通常比使用进程更为高效。

补充,

在进程切换时,虚拟内存地址本身并不会改变,因为它们是进程代码和数据在逻辑上的表示。然而,由于不同进程拥有不同的虚拟地址空间,因此当从一个进程切换到另一个进程时,实际上是在访问不同进程的虚拟地址空间。

页表是操作系统用于将虚拟地址转换为物理地址的数据结构。每个进程都有自己的页表,它描述了该进程虚拟地址空间中的每个页面与物理内存中页面的映射关系。

在进程切换时,由于涉及到不同进程的虚拟地址空间,因此也需要切换到与该进程相关联的页表。这通常通过更新CPU中的页表基址寄存器(如x86架构中的CR3寄存器)来实现。

TLB是CPU中的一个高速缓存,用于存储虚拟地址到物理地址的映射关系。它的目的是减少CPU访问页表的次数,从而提高地址转换的效率。

当进程切换时,由于页表已经改变,TLB中缓存的旧进程的地址映射关系将不再有效。因此,为了确保新进程能够正确地访问其虚拟地址空间,通常需要刷新或清空TLB。这样,当新进程访问其虚拟地址时,CPU将重新从页表中查找对应的物理地址,并将其存储在TLB中以供后续快速访问。

简述,

  • 虚拟内存地址(逻辑地址)在进程切换时保持不变,但它们指向的物理内存位置会随着页表的改变而改变。
  • 页表在进程切换时需要更新,以反映新进程虚拟地址空间与物理内存的映射关系。
  • TLB中的缓存项在进程切换时需要被清空或刷新,以确保新进程能够正确地访问其虚拟地址空间。

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

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

相关文章

【CTF】Nginx日志注入

Nginx日志注入: 日志包含漏洞的成因还是服务器没有进行严格的过滤 ,导致用户可以进行任意文件读取,但是前提是服务器需要开启了记录日志的功能才可以利用这个漏洞。 对于Apache,日志存放路径:/var/log/apache/access.l…

华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 5 发送通知消息

场景介绍 通知消息通过Push Kit通道直接下发,可在终端设备的通知中心、锁屏、横幅等展示,用户点击后拉起应用。您可以通过设置通知消息样式来吸引用户。 开通权益 Push Kit根据消息内容,将通知消息分类为服务与通讯、资讯营销两大类别&…

【Qt】QSS的设置方式

QSS的设置方式 QWidget 中包含了 setStyleSheet ⽅法, 可以直接设置样式. 上述代码我们已经演⽰了上述设置⽅式 还可以通过 QApplication 的 setStyleSheet ⽅法设置整个程序的全局样式. 设置全局样式,可以将界面上所有的样式都集中到一起来组织。 全局样式优点:…

图神经网络的新篇章:通用、强大、可扩展的图变换器

人工智能咨询培训老师叶梓 转载标明出处 图变换器(Graph Transformers, GTs)因其在处理节点间全局依赖关系方面的能力而受到广泛关注。然而,现有的GTs模型在处理大规模图时面临着计算复杂度高、泛化能力有限等问题。为了解决这些问题&#x…

UnLua扩展接口

一、在蓝图中创建接口 1、创建BlueprintInterface 2、声明接口函数 3、继承接口 注意,接口不需要绑定Lua,也没有Bind按钮 二、在Lua中实现接口函数 1、实现接口函数 BP_Player.lua function BP_Player_C:UpdateAiming(IsAiming)if IsAiming thensel…

maven手动导入本地仓库

maven手动导入本地仓库 1.在maven仓库下载对应的依赖 一定要把jar包下载到maven仓库的bin下 2.找到自己仓库的maven仓库下的bin目录cmd进去 在cmd窗口中输入以下命令&#xff1a;&#xff08;这里根据你的groupId、artifactId、version修改即可&#xff09; <!-- https:…

gpu scene cull

(1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) LaunchComputeRelevanceTask 调用堆栈 (1) (1)

12k star,这可能是我见过最强的国产开源支付系统!(附源码)

最近有读者问到支付系统相关的问题&#xff0c;这里推荐两个总体完成度还不错的国产开源支付系统&#xff0c;可以拿来学习&#xff0c;也可以根据项目需求直接拿来用。 01 Jeepay 项目介绍 &#xff1a; 一套适合互联网企业使用的开源支付系统&#xff0c;提供了交易、退款、…

IO流中的异常捕获

Java简化 接口AutoCloseable

【深入学习Redis丨第六篇】Redis哨兵模式与操作详解

〇、前言 哨兵是一个分布式系统&#xff0c;你可以在一个架构中运行多个哨兵进程&#xff0c;这些进程使用流言协议来接收关于Master主服务器是否下线的信息&#xff0c;并使用投票协议来决定是否执行自动故障迁移&#xff0c;以及选择哪个Slave作为新的Master。 文章目录 〇、…

vue3扩展echart封装为组件库-快速复用

ECharts ECharts&#xff0c;全称Enterprise Charts&#xff0c;是一款由百度团队开发并开源&#xff0c;后捐赠给Apache基金会的纯JavaScript图表库。它提供了直观、生动、可交互、可个性化定制的数据可视化图表&#xff0c;广泛应用于数据分析、商业智能、网页开发等领域。以…

在已安装的openresty上添加安装upstream模块报错的解决以及使用Consul服务发现时定时变更nginx的upstream的shell脚本

一、在已经安装好的openresty环境上添加安装upstream模块报错&#xff1a; 在已经安装好的openresty环境上添加安装upstream模块报错&#xff1a;http upstream check module can not find any check server, make sure you ve added the check 的问题解决。 服务器上已经安装好…

JavaWeb+Web服务器简介

一、Java Web 1.1 简介 Web&#xff0c;在英语中web即表示网页的意思&#xff0c;它用于表示Internet主机上供外界访问的资源。 Java Web指的是使用Java技术开发的Web应用程序。Java在Web开发中有着广泛的应用&#xff0c;主要得益于其跨平台性、安全性和丰富的开发工具与框…

鼻咽癌中三级淋巴结构的单细胞与空间转录组分析|文献精析·24-09-22

小罗碎碎念 研究团队通过单细胞和空间转录组分析&#xff0c;揭示了与鼻咽癌进展和免疫治疗反应相关的三级淋巴结构。 作者角色作者姓名单位&#xff08;中文&#xff09;第一作者Yang Liu/通讯作者Jin-Xin Bei国家癌症中心南方肿瘤学重点实验室&#xff0c;鼻咽癌诊断治疗广东…

TryHackMe 第3天 | Pre Security (二)

该学习路径讲解了网络安全入门的必备技术知识&#xff0c;比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识&#xff0c;本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…

『功能项目』QFrameWork更新道具图片UGUI【71】

我们打开上一篇70QFrameWork物品交换UGUI的项目&#xff0c; 在资源商店免费下载图片 创建Image重命名为Icon并且隐藏Name 给Icon一张随意道具图片Icon 重新绑定对象 接下来创建IItem.cs接口 与 ItemConfig.cs道具配置类 创建Config文件夹 创建脚本&#xff1a;ItemConfig.cs 编…

【416】【举报垃圾信息】

这题倒挺简单的 注意一下映射关系&#xff0c;再使用字典即可。 class Solution:def reportSpam(self, message: List[str], bannedWords: List[str]) -> bool:nlen(message)if n1:return Falsedictdefaultdict(int)num0for a in message:dict[a]1for b in bannedWords:if…

构建高效心理辅导平台:Spring Boot实践

1绪 论 1.1研究背景 随着计算机和网络技术的不断发展&#xff0c;计算机网络已经逐渐深入人们的生活&#xff0c;网络已经能够覆盖我们生活的每一个角落&#xff0c;给用户的网上交流和学习提供了巨大的方便。 当今社会处在一个高速发展的信息时代&#xff0c;计算机网络的发展…

安装黑群晖,并使用NAS公网助手实现DDNS动态域名解析

很多人都会安装安装一个黑群晖进行练手&#xff0c;黑群晖有很多玩法和NAS套件&#xff0c;而且黑群晖安装比较简单&#xff0c;没有复杂的步骤&#xff0c;这也是很多人玩黑裙的理由&#xff0c;这里教大家如何安装黑群晖&#xff0c;并且安装神卓互联NAS公网助手实现DDNS动态…

【STM32】 TCP/IP通信协议(1)

一、前言 TCP/IP是干啥的&#xff1f;它跟SPI、IIC、CAN有什么区别&#xff1f;它如何实现stm32的通讯&#xff1f;如何去配置&#xff1f;为了搞懂这些问题&#xff0c;查询资料可解决如下疑问&#xff1a; 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …