腾讯面试题讲解:32 位 4GB 系统,访问 2GB 数据,虚拟内存会发生什么?

本文介绍了操作系统中的虚拟内存管理和寻址方式,特别是针对32位系统访问2GB数据的情况。文章详细讲解了分页和分段的寻址原理,以及虚拟地址如何映射到物理地址。同时,还探讨了内核态和用户态的区别,以及网络协议中的HTTP状态码和TCP的拥塞控制策略。
摘要由CSDN通过智能技术生成

操作系统和应用程序也可以对TCP窗口大小进行配置和调整。通过调整操作系统的参数或应用程序的设置,可以影响TCP窗口大小的默认值和动态调整的行为。

今天有读者给我发了他 8 月份面腾讯的面经,被问到的问题还挺多的。

操作系统和网络面试整个面试 60%,剩下40%是 Java+项目的内容(读者的技术栈是 Java 方向)。

这次,我主要是截取操作系统和网络相关的问题给大家解析一波。

腾讯面试问题

腾讯面试问题

操作系统

单核可以多线程吗?

可以的。

单核创建了多线程,CPU 会从一个进程快速切换至另一个进程,其间每个进程各运行几十或几百个毫秒,虽然单核的 CPU 在某一个瞬间,只能运行一个进程。但在 1 秒钟期间,它可能会运行多个进程,这样就产生并行的错觉,实际上这是并发。

并发与并行

并发与并行

虚拟地址怎么找到对应的内容的?

操作系统内存管理方式主要两种,不同的管理方式,寻址的实现是不同的:

  • 内存分段:将进程的虚拟地址空间划分为多个不同大小的段,每个段对应一个逻辑单位,如代码段、数据段、堆段和栈段。每个段的大小可以根据需要进行调整,使得不同段可以按需分配和释放内存。虚拟内存分段的优点是可以更好地管理不同类型的数据,但是由于段的大小不一致,容易产生外部碎片。
  • 内存分页:将进程的虚拟地址空间划分为固定大小的页,同时将物理内存也划分为相同大小的页框。通过页表将虚拟地址映射到物理地址,并且可以按需加载和释放页。虚拟内存分页的优点是可以更好地利用物理内存空间,但是可能会产生内部碎片。

分段的寻址方式

分段机制下的虚拟地址由两部分组成,段选择因子和段内偏移量。

图片

图片

段选择因子和段内偏移量:

  • 段选择子就保存在段寄存器里面。段选择子里面最重要的是段号,用作段表的索引。段表里面保存的是这个段的基地址、段的界限和特权等级等。
  • 虚拟地址中的段内偏移量应该位于 0 和段界限之间,如果段内偏移量是合法的,就将段基地址加上段内偏移量得到物理内存地址。

在上面,知道了虚拟地址是通过段表与物理地址进行映射的,分段机制会把程序的虚拟地址分成 4 个段,每个段在段表中有一个项,在这一项找到段的基地址,再加上偏移量,于是就能找到物理内存中的地址,如下图:

图片

图片

如果要访问段 3 中偏移量 500 的虚拟地址,我们可以计算出物理地址为,段 3 基地址 7000 + 偏移量 500 = 7500。

分段的办法很好,解决了程序本身不需要关心具体的物理内存地址的问题,但它也有一些不足之处:

  • 第一个就是内存碎片的问题。
  • 第二个就是内存交换的效率低的问题。

分页的寻址方式

虚拟地址与物理地址之间通过页表来映射,如下图:

图片

图片

页表是存储在内存里的,内存管理单元 (MMU)就做将虚拟内存地址转换成物理地址的工作。

而当进程访问的虚拟地址在页表中查不到时,系统会产生一个缺页异常,进入系统内核空间分配物理内存、更新进程页表,最后再返回用户空间,恢复进程的运行。

在分页机制下,虚拟地址分为两部分,页号和页内偏移。页号作为页表的索引,页表包含物理页每页所在物理内存的基地址,这个基地址与页内偏移的组合就形成了物理内存地址,见下图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗者才子酒中仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值