操作系统面试真题总结(二)

news2024/11/12 7:47:43

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

栈空间和空间堆有什么区别?各自优缺点呢?

栈空间和堆空间在编程中都被用于数据存储

  • 但它们的用途,分配方式,生命周期,甚至大小,都有显著的不同。

存储内容:

栈主要存储局部变量和函数调用的信息,比如函数的返回地址和参数。

  • 堆被用来存储动态分配的数据,例如动态数组,对象
    • 或者其他需要在程序运行中根据需要动态创建和销毁的数据。

生命周期:

  • 栈空间中的数据在定义它们的函数返回之后就会自动销毁,生命周期较短。
    • 而堆上的数据需要程序显式地创建和销毁,因此它们的生命周期可以被精确地控制
      • 但同时也使内存管理变得更加复杂。

分配方式:

  • 栈空间是由编译器自动分配和释放的,非常快速。
  • 但是,堆空间是由程序在运行时动态分配和释放的,这通常需要更多的计算资源。

大小限制:

  • 栈空间的大小通常在程序启动时就被固定,所以它的空间通常比较小。
  • 而堆的大小通由系统的可用内存来决定,所以它的空间通常比较大。

优点和缺点:

  • 栈空间的优点是管理简单,速度快。
  • 但它的缺点是空间有限,不能动态分配,只能用于存储生命周期短且大小已知的数据。

堆空间的优点是能够动态地分配大量的内存。

  • 但是它的缺点是需要手动管理,可能会引发内存泄漏或碎片,而且开销较大。

什么是物理地址?

物理地址,又称实际地址或绝对地址,是数据在计算机系统中物理内存(RAM)的实际位置或者地址。

  • 这个地址是总线或者内存控制器用来读取或者写入特定的物理内存的。

逻辑地址在经过CPU的内存管理单元(MMU)的地址转换后,变成物理地址。

  • 这个物理地址才是数据真正存储的地方。
  • 操作系统、内存管理单元以及硬件一起工作,把高级的程序抽象(逻辑地址)与底层硬件实现(物理内存)连接起来。

什么是逻辑地址?

在操作系统中,逻辑地址(有时也被称为虚拟地址),是在运行过程中的程序或进程所看到的地址。

  • 这个地址是由 CPU 生成的,并且不同于物理地址,后者是数据在主存储器RAM中的实际地址。

对于程序来说,它只需要对内存进行抽象的、逻辑的操作,不用关心具体数据在物理内存中的位置。

  • 这就是为什么操作系统需要引入逻辑地址的原因。

什么是虚拟内存?

虚拟内存是操作系统提供的一种内存管理技术,它通过将实际内存和磁盘空间组合使用

  • 给每个进程提供一个抽象的、看似连续的地址空间。

在虚拟内存中,每个进程能够访问的内存空间大于实际物理内存的容量。

  • 操作系统会根据进程的需要,将部分内存数据存储在物理内存中
    • 并将未使用的数据存储在磁盘上,以便于管理和利用。

通过使用虚拟内存,操作系统能够为每个进程提供独立的地址空间,使得进程之间相互隔离,更安全稳定。

  • 同时,虚拟内存也提供了一种内存扩展机制,使得系统能够运行更多的程序
    • 而不会因为物理内存不足而导致程序崩溃。

为什么需要虚拟内存?

虚拟内存有以下几个重要的作用和好处:

扩展可用内存:

  • 虚拟内存使得每个进程可以访问比物理内存更大的内存空间。
    • 当物理内存不足时,虚拟内存可以将一部分不常用的数据暂时存储在磁盘上,以释放出物理内存供其他进程使用。
      • 这样,系统能够同时运行更多的程序,提升了系统的整体运行能力。

进程隔离和保护:

  • 虚拟内存为每个进程提供了独立的地址空间,使得进程之间相互隔离。
    • 这样,一个进程不能直接访问其他进程的内存空间,保护了进程的数据和代码的安全性。
      • 如果一个进程出现了异常或崩溃,只会影响到该进程本身,而不会对其他进程造成影响。

简化内存管理:

  • 虚拟内存使得内存管理更加简化。
    • 操作系统可以在物理内存和磁盘之间进行数据交换,将内存调度和分配操作集中在物理内存上
      • 而不需要关心具体的物理地址。
      • 这样简化了内存分配和释放的操作,提高了内存管理的效率。

内存共享和进程通信:

  • 虚拟内存允许多个进程共享同一部分内存,这样不同的进程可以轻松地共享数据和信息
    • 实现进程间的通信和协作。
    • 例如,多个进程可以共享同一块内存区域,实现高效的数据交换和共享资源。

分页与分段有什么区别?

分页和分段都是内存管理的策略,但它们的目的和方式是不同的:

分页:

  • 分页是一种内存管理技术,它将虚拟内存空间和物理内存空间分割成固定大小的单元,我们称这个单元为
  • 分页是为了解决内存碎片的问题,因为分页可以让每一块内存空间都被有效利用。
    • 分页是透明的,也就是说这个过程对用户程序是不可见的。
    • 用户程序看到的仍然是一个连续的内存空间。

分段:

  • 对于分段,其主要目标是将程序自身的逻辑结构反映到物理存储器中去。
  • 在逻辑上,程序员根据代码的逻辑关系将程序分成大小不等的段,比如说代码段、数据段等。
    • 然后根据程序的需要,将这些段加载到内存中。
    • 分段是可见的,也就是说程序员在编写程序的时候可以看到分段的效果。

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

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

相关文章

diffusion 模型gguf量化使用案例,支持CPU运行

参考: https://github.com/leejet/stable-diffusion.cpp 在线demo使用: https://colab.research.google.com/drive/1NkAzSn3iYOwkY1Jy7qJfV_d2ZMHQmXrK?usp=sharing 一般gguf量化质量 fp16 > Q8 > fp8 > Q4 > Q4k_m > Q4k_s > nf4 安装 !git clone --r…

[H贪心] lc3273. 对 Bob 造成的最少伤害(贪心+排序+推公式+双周赛138_4)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:3273. 对 Bob 造成的最少伤害 题单: na na 2. 题目解析 略低于正常难度的 T4。 显然我们应该尽可能的将伤害高的先消掉,然后写完代码就会发现 WA 了。想太简单了,那就推…

如何在JPG文件中隐写数据

概述 最近在做资源管理器背景的一个功能时,需要将信息传递到DLL中去, 主要就是传递一些比较简单的参数,包括图片的契合度,透明度之类的。通信方式有多种,毕竟是练手的功能,就想找一些以前没用过的方式。 …

心觉:潜意识精准显化(一)开篇

Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松搞定人生挑战,实现心中梦想! 挑战日更写作156/1000(完整记录在下面) 公门洞开纳百川 众心逐梦越千山 号召引领潜力绽 心觉潜意识无间 每个人都渴望自…

psql常见报错解决

问题 解决 要在管理员模式下启动 pg_ctl start -D "D:\Program\PostgreSQL\data" 注册成服务 D:\Program\PostgreSQL\bin\pg_ctl.exe register -N "postgresql" -D "D:\Program\PostgreSQL\data" -U "postgres" -P "postgre…

华为 HCIP-Datacom H12-821 题库 (1)

有需要题库的可以看主页置顶 1.MSTP 有不同的端口角色,对此说法不正确的是: A、MSTP 中除边缘端口外,其他端口角色都参与 MSTP 的计算过程 B、MSTP 同一端口在不同的生成树实例中可以担任不同的角色。 C、MSTP 域边缘端口是指位于 MST 域的边…

桶排序【算法 14】

桶排序算法详解 桶排序(Bucket Sort)是一种基于分配的排序算法,适用于均匀分布在特定范围内的数据。其核心思想是将输入数据分到若干个桶(Bucket)中,每个桶分别进行排序,最后合并桶内的元素形成…

【STM32】BKP备份寄存器与RTC实时时钟

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 BKP简介 BKP代码注解 读写备份寄存器 复位备份寄存器 BKP代码 RTC简介 RTC代码注解 RTCCLK时钟源选择 分频器配置 时钟同步 RTC代码 MyRTC.h MyRTC.c main.c BKP简介 BKP&…

TeamTalk路由服务器

路由相关信令和协议设计 enum BuddyListCmdID {// ...... 暂时省略无关信令CID_BUDDY_LIST_USERS_STATUS_REQUEST 522,CID_BUDDY_LIST_USERS_STATUS_RESPONSE 523,// ...... 暂时省略无关信令 };message IMUsersStatReq{//cmd id: 0x020arequired uint32 user_id 1;repeat…

JS设计模式之“名片设计师” - 工厂方法模式

image.png 前言 上篇文章我们了解到什么是简单工厂模式,请参考上篇文章:JS设计模式之 “神奇的魔术师” - 简单工厂模式,不过这是工厂中最简单的一种,本篇文章我们将同大家一起认识一种更复杂的工厂模式,它将给我们提…

【Kubernetes】声明式创建各种资源

k8s声明式创建 kubernetes陈述式创建与声明式创建yaml各个字段含义Pod yaml文件详解deployment.yaml文件详解server.yaml文件详解 k8s中port的区别1、声明式创建pod label包含app: zhangsan2、声明式创建deployment,包含3个nginx副本,label包含app: zhan…

【MyBatis】MyBatis的一级缓存和二级缓存简介

目录 1、一级缓存 1.1 我们在一个 sqlSession 中,对 User 表根据id进行两次查询,查看他们发出sql语句的情况。 1.2 同样是对user表进行两次查询,只不过两次查询之间进行了一次update操作。 1.3 一级缓存查询过程 1.4 Mybatis与Spring整…

Windows10上安装PostgreSQL 16

PostgreSQL是一个先进的、开源的、免费的、功能强大的关系型数据库,它使用并扩展了SQL语言,并结合了许多功能,可以安全地存储和扩展复杂的数据工作负载。PostgreSQL可在Windows、Linux、macOS等多个平台上运行,License使用Postgre…

hive学习(五)

一、hive的DML操作 1.load(向表中装载数据) hive> load data [local] inpath 路径 [overwrite] into table 表名 [partition (partcol1val1,…)];特殊说明 1)local:标识从本地加载数据到Hive表,若没有local的话从…

Linux系统下KubeSphere3.4.1离线安装包制作及部署过程

一、概述 KubeSphere 是 GitHub 上的一个开源项目,是成千上万名社区用户的聚集地。很多用户都在使用 KubeSphere 运行工作负载。对于在 Linux 上的安装,KubeSphere 既可以部署在云端,也可以部署在本地环境中,例如 AWS EC2、Azure…

JS设计模式之“幽灵工厂” - 抽象工厂模式

image.png 一. 了解带头模范 - 抽象类 JavaScript中并没有原生的抽象类的概念,但可以通过一些方式来模拟实现抽象类的效果。 抽象类是一种不能被直接实例化的类,只能作为其他类的基类使用。它定义了一组抽象方法,子类必须实现这些抽象方法。…

【函数模板】函数模板的类型推导

一、类型的自动推导 当函数模板的返回值被指定或与传入的参数的类型一致&#xff0c;那么可以直接调用函数模板&#xff0c;而不需要显式的指定参数。 //函数推导 template<typename T, typename R> T Add(T a, R b) {return a b; }void Test1() {//自动推导int x 1;…

【MySQL】索引使用规则——(覆盖索引,单列索引,联合索引,前缀索引,SQL提示,数据分布影响,查询失效情况)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

【初出江湖】剖析软件架构发展之路

目录标题 架构发展历程单体架构&#xff08;Monolithic&#xff09;垂直拆分分布式服务微服务架构 SOAESB分布式微服务SOA&#xff0c;ESB&#xff0c;微服务的区别和关系分布式与微服务之间的区别于关系 架构发展历程 单体架构&#xff08;Monolithic&#xff09; 单体应用时…

Django 第十一课 -- ORM - 多表实例

目录 一. 前言 二. 创建模型 三. 插入数据 四. ORM - 添加数据 4.1. 一对多(外键 ForeignKey) 4.2. 多对多(ManyToManyField)&#xff1a;在第三张关系表中新增数据 4.3. 关联管理器(对象调用) 五. ORM 查询 5.1. 一对多 5.2. 一对一 5.3. 多对多 六. 基于双下划线…