首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么操作系统不能使用整个64位进行寻址?为什么只有48位?

操作系统不能使用整个64位进行寻址的原因是因为x86架构的CPU在设计时采用了48位的虚拟地址空间和物理地址空间的限制。

首先,虚拟地址空间是指每个进程在运行时所能访问的内存地址范围。在x86架构中,虚拟地址空间被划分为用户空间和内核空间。用户空间用于存放用户程序的代码和数据,而内核空间用于存放操作系统的代码和数据。根据x86架构的设计,用户空间的虚拟地址范围是从0x00000000到0x00007FFFFFFFFFFF,共计47位,而内核空间的虚拟地址范围是从0xFFFF800000000000到0xFFFFFFFFFFFFFFFF,共计48位。

其次,物理地址空间是指实际的物理内存地址范围。在x86架构中,物理地址空间的大小取决于CPU的物理寻址能力。目前大部分x86架构的CPU支持的物理地址空间大小为2^36个字节,即64GB。因此,操作系统只能使用48位的虚拟地址空间进行寻址,以保证虚拟地址能够映射到物理地址空间的范围内。

为什么只有48位而不是64位呢?这是因为在x86架构的设计中,剩余的16位被保留用于扩展虚拟地址空间的能力。这些保留位可以用于未来的扩展,例如支持更大的物理内存容量或者增加更多的虚拟地址空间。

总结起来,操作系统不能使用整个64位进行寻址是因为x86架构的CPU在设计时限制了虚拟地址空间和物理地址空间的大小,其中48位用于虚拟地址空间,保留了16位用于未来的扩展。这样的设计可以满足当前的内存寻址需求,并为未来的发展留下了余地。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《笨开发学习操作系统》1启动

是不是直接读取操作系统的代码,然后一条条往下执行,最终就启动了整个系统,然后你就可以使用了?其实整个启动过程复杂而又神秘。 回忆 让我们先来看两张图 你是否曾经在开机的时候见过这两个画面?...没错,蓝色的这张是 BIOS,而黑色的这张则是 GRUB,为什么我要先拿这两张图出来呢?没错,其实操作系统的启动过程你需要记住这两个画面,今天你就能通过下面的学习将原有的这两幅画面串起来了。...,有以下特点: 对指令及其访问的资源进行控制 寻址空间变大 区分了各个特权级 总之,在保护模式下,权限收拢,对访问进行了严格控制,但是寻址空间变大 启动流程 以下的几个阶段是我个人理解的人为划分,每个人有不同的理解...其实我一开始也不明白为什么需要有 GRUB 这个启动器,总感觉它好像没干啥事,就不能直接跳过这个,直接让 BIOS 直接启动内核吗?...总结 操作系统最简单的启动过程就是如下面这张图样子 我最喜欢的就是下面这张图,整个详细的过程就看它来理解 当我们知道了操作系统是如何启动的时候,其实对于之前的我来说,最重要的一点就是明白了之前我操作系统重装的时候到底在装些什么东西

55810

为什么

同理,32位CPU也不能装64位的操作系统的。 程序数值int32和int64的含义 这个我们平时写代码接触的最多,比较好理解了。...如果说我用的是64位的CPU,那么我在计算两个int64的数值相加时,我就能将数据通过64位的总线,一次性存入到64位的寄存器,并在进行计算后返回到内存中。整个过程一步到位,一气呵成。...系统能正常工作,但一般用不到8G,因为32位系统的总线寻址能力为2的32次方,也就是4G,哪怕装了8G的内存,真正能被用到的其实只有4g,多少有点浪费。...注意上面提到的是一般,为什么这么说,因为这里有例外,32位系统里,有些是可以支持超过4G内存的,比如Windows Server 2003就能最大支持64G的内存,它通过使用 PAE (Intel Physical...寻址能力,除了受到cpu的限制外,还受到操作系统的限制,如果操作系统就是按着32位的指令和寻址范围(4G)来编译的话,那么它就会缺少64位系统该有的指令,它在运行软件的时候就不能做到超过这个限制,因此寻址能力还会是

2.8K20

面试常考知识点总结——面试必看

组合强调的是has-a关系,是通过对现有对象进行拼装形成更复杂的功能。 三次握手的过程?每一次都携带什么数据?为什么要给确认报文中的ack值加1,为什么不是2,3,4?...使用同一块共享内存的进程使用的虚拟地址相同吗?为什么?...在模板内的static函数只可被这一模块内的其他函数调用,这个函数的适用范围被限制在声明他的模板内 在类中static成员变量属于整个类所拥有,对象的所有对象只有一份复制 在类中static成员函数属于整个类所拥有...对引用使用“sizeof”得到的是变量的大小,对指针使用“sizeof”得到的是变量的地址的大小。 理论上指针的级数没有限制,但引用只有一级。即不存在引用的引用,但可以有指针的指针。...网络ID就是网络地址,它是供路由器在路由表中寻址使用的。 主机ID就是在局域版网中的主机号; 不能做switch参数的类型有哪些?

83420

Shopee 送命题:进程切换为什么比线程切换慢

只要在某一个时间内存中只有一个程序,那么就不会发生上述所说的地址冲突。这就实现了一种比较粗糙的并发。 为什么说他是粗糙的呢,因为这种方法有一个问题:将全部的内存信息保存到磁盘太慢了!...那么如何对每个进程使用的地址进行保护(protection)呢?...,而这张表的内容正是由操作系统进行管理的。...至此,上述这一套 CPU 生成虚拟地址并进行地址翻译的流程就是虚拟寻址(virtual addressing): 进程切换为什么比线程切换慢?...所以,我们需要一种机制对每个进程使用的地址进行保护,因此操作系统创造了一个新的内存模型,那就是虚拟地址空间 就是说,每个进程都拥有一个自己的虚拟地址空间,并且独立于其他进程的地址空间,然后每个进程包含的栈

62120

malloc 背后的系统知识

为什么需要虚拟内存? CPU 对内存的寻址最简单的方式就是直接使用物理内存地址,这种方式一般叫做物理寻址。早期的 PC 使用物理寻址,而且像数字信号处理器、嵌入式微控制器也使用物理寻址。...物理寻址的好处是简单,坏处也有很多,比如: 不安全:操作系统的地址直接暴露给用户程序,用户程序可以破坏操作系统。这种解决方案是采用特殊的硬件保护。...当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将确实的部分装入物理内存。虚拟地址寻址(也叫做虚拟寻址)的示意图如下。...如果一个段比较大,把它整个保存到内存中可能很不方便甚至是不可能的,因此可以对段采用分页管理,只有那些真正需要的页面才会被调入内存。...mmap 申请的内存在操作系统的映射区。比如 32 位系统,映射区从 3G 虚拟地址粗向下生长,但是因为程序的其他段也会占用空间(比如代码段必须以特定的地址开始),所以并不能申请 3G 的大小。

1K11

文件系统和软硬链接

这种定位方式被称为C(柱面)H(磁头)S(扇区)定位法 3.磁盘的逻辑结构 如果使用CHS定位法,这是一种三维寻址方式,效率不够高,所以为了效率和方便管理,实际上操作系统在管理磁盘的时候,是将磁盘抽象成一种线性结构...操作系统内部也是使用的LBA地址,当我们实际要去磁盘中读取数据时就需要将LBA地址转换成CHS地址(通过计算可以得到)。 a.为什么操作系统不直接使用CHS地址?...1.为了方便管理,CHS寻址是三维的,而数组下标则是一维寻址 2.让操作系统的代码与硬件进行解耦,不让硬件的变化影响操作系统 b.实际IO一次的大小 虽然一个扇区的大小是512字节,但是对于文件来说还是太小了...操作系统在管理磁盘的时候采取的是分治的思想,首先将磁盘进行分区(将磁盘分成C盘,D盘),然后再将区进行分组。...这就是为什么同一个目录下不能有两个同名文件,因为inode与文件是一一对应的(也就是说一个inode只能与一个文件名映射)。

37930

10分钟!搞懂计算机磁盘实现原理

二、磁盘寻址过程 磁盘的存储介质了解之后,那回到我们刚才说的问题,为什么进行磁盘io读写会慢,要回答这个问题之前,我们先来了解一下,磁盘到底是如何寻址的,如下图所示: 图片 目前市面上一般有两种磁盘...所以读取速度的瓶颈就是如何减少寻址的时间。 在我们不知道具体物理地址之前,需要进行全盘遍历寻址,那如何遍历寻址才会高效呢?...上头我们介绍到,机械磁盘其实是圆柱体,是由很多盘片组成,又因为寻道时间大于旋转时间远,所以是并发同时进行最外层磁道的读取,如果整个圆柱体的当前磁道都读取不到数据的情况下,再移动磁头,也就是进行寻道,然后再接着继续旋转读取磁道信息...3.1 什么是文件系统 像我们不管是开发程序还是日常使用软件,对于文件的读写,都不需要考虑底层存储细节,而且速度非常快,实现这一切的功臣就是我们所熟知的操作系统。 每个操作系统都提供了成熟的文件系统。...图片 上面的磁盘空间是1T的,也就是有1024GB空间,现在只有931G空间,其中一部分就是被元数据所占用。

41320

又又又被内存坑了!!

为什么在讲到虚拟地址翻译的时候,好像跟段又没有关系了呢? 之所有有这个问题,是因为很多同学看的教程很多都是偏理论的或者是过时的,根本不给你讲现代操作系统中实际的情况。...3 现代操作系统实际情况 学完了这两种内存管理方式,很多人就要懵了: 现在操作系统到底用的哪种方式?好像是分页,但为什么段寄存器好像还是有,到底是怎么一回事?...既然是同时存在的,那为什么现在将内存地址翻译时,都是讲分页,而很少谈到分段呢? 这一切的一切,都是因为一个原因:操作系统通过巧妙的设置,‘屏蔽’了段的存在。...GDT是位于操作系统内核地址空间中的,在Windows上有两种查看方式,一种是通过Windbg,一种是通过一些ARK工具,我这里选择使用PChunter这个神器进行查看。...前面提到过,GDT中的表项是段描述符,这是一个比较复杂的数据格式,好在,这个神器对段描述符进行了解析,使用表格字段的方式进行了展示,让我们看起来轻松多了。

51640

真棒! 20 张图揭开内存管理的迷雾,瞬间豁然开朗

---- 前言 之前有不少读者跟我反馈,能不能写图解操作系统? 既然那么多读者想看,我最近就在疯狂的复习操作系统的知识。...我们完全可以在进行虚拟内存和物理内存的页之间的映射之后,并不真的把页加载到物理内存里,而是只有在程序运行中,需要用到对应虚拟内存页里面的指令和数据时,再加载到物理内存里面去。...那么为什么不分级的页表就做不到这样节约内存呢?我们从页表的性质来看,保存在内存中的页表承担的职责是将虚拟地址翻译成物理地址。假如虚拟地址在页表中找不到对应的页表项,计算机系统就不能工作了。...这主要是上面 Intel 处理器发展历史导致的,因为 Intel X86 CPU 一律对程序中使用的地址先进行段式映射,然后才能进行页式映射。...每个进程都有自己的虚拟空间,而物理内存只有一个,所以当启用了大量的进程,物理内存必然会很紧张,于是操作系统会通过内存交换技术,把不常使用的内存暂时存放到硬盘(换出),在需要的时候再装载回物理内存(换入)

93110

面试问题之操作系统

但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。 为什么这个问题是面试高频?...进程与进程之间不能共享内存,而线程可以。那么就深入提问,内存如何寻址? 当你回答:线程之间通信很方便,进程与进程通信不方便。那么问题就又来了,你给我说一下进程之间怎么通信?进程之间通信方法有哪些?...存储与寻址 存储 硬盘(容量大)-->内存(快速随机访问)--> 缓存 --> 寄存器 寻址 寻址空间:指针能寻找到的地址 32位 --> 4G 64位 --> ~10^18 Bytes 64位JVM...--> 可使用更大内存,需重新编译 // 寻址 int n = *p; // --> MOV EAX, [EBX] 过程解释: 分页 进程管理、内存管理和文件管理是操作系统的三大核心功能。...内存是操作系统里面的另一个核心概念。它是进程的存放场所。如何对内存进行管理,使得数据的读写具有高效率、高安全、高空间利用率和位置透明的特性是内存管理所要达到的目的。

36321

mmap可以让程序员解锁哪些骚操作?

为什么麻烦 现在你应该看到了,操作磁盘文件要比操作内存复杂很多,根本原因就在于寻址方式不同。...现在你应该看到了,其实采用mmap这种方法磁盘依然还是按照块的粒度来寻址的,只不过在操作系统的一番骚操作下对于用户态的程序来说“看起来”我们能像读写内存那样直接读写磁盘文件了,从按块粒度寻址到按照字节粒度寻址...我为什么使用mmap?...使用mmap处理大文件要注意一点,如果你的系统是32位的话,进程的地址空间就只有4G,这其中还有一部分预留给操作系统,因此在32位系统下可能不足以在你的进程地址空间中找到一块连续的空间来映射该文件,在64...很简单,可执行程序A、B、C中为什么都要各自保存一份完全一样的数据呢?

50150

【Linux】多线程概念再理解

1次写入到磁盘中肯定是更高,因为只需要一次寻址操作 说明OS和磁盘进行IO交互时,绝对不是按照字节为单位的,而是要按照 块(4KB) 为单位 若只想修改一个比特位,也必须IO4KB,因为 4KB 作为一个块...为什么字符常量区是不允许被修改的?...hello world在常量区,只能被读取,不能被修改,所以*s='w',是错误的 ---- s里面保存的是指向的字符的虚拟起始地址 *s寻址时,会伴随虚拟地址到物理地址的转换 ---- 通过查页表的方式...,对操作进行权限查询,发现只有读的权限,但没有修改的权限,所以MMU(内存管理单元)异常, OS识别到异常,给目标进程发送信号 即 在内核态转换为用户态时,进行信号处理---终止进程 5....性能损失 创建过多的线程,只有少数在运行,大多数的线程来回被调度 造成性能损失 即多线程创建不合理 ---- 2.健壮性降低 如果一个线程出现问题,可能会对整个进程造成影响 ---- 3.缺乏访问控制

15910

七层网络协议

OSI把整个网络分为7层,但tcp/ip只分为4层,osi的七层从上到下分别是 应用层,表示层,会话层 传输层,网络层,数据链路层,物理层,如下图。 ?  ...为什么选7层而不是4层,我觉得划分越详细越容易理解其中的细节。这估计也是为什么将网络分层的原因。 应用层   我们先从离大多数人最近的一层开始,这也是大多数人能接触到的一层。...现在很多大厂基于udp也做了好多改在,在udp基础上实现部分tcp的功能,来都达到tcp可靠和udp高效之间的权限,比如之前就传出http3.0要使用google的QUIC协议来传输数据。...所有可以上网的机器都有一个全球唯一的MAC地址,它是在厂商生产网络设备的时候写死在硬件里的,虽然是不能改动的,但很多操作系统提供了修改的功能,都是软改。局域网中通信都是依靠mac地址的。   ...可能有人很好奇,既然有了mac地址,为什么还会有ip地址?二者存其一不就行了!mac地址虽然是全球唯一的,但它并不具备寻址的功能,就比如身份证号码一样,给你一个身份证号码,你能知道这个人现在在哪吗?

1K10

Kafka中sequence IO、PageCache、SendFile的应用详解

大家都知道Kafka是将数据存储于磁盘的,而磁盘读写性能往往很差,但Kafka官方测试其数据读写速率能达到600M/s,那么为什么Kafka性能会这么高呢?...因为磁盘是典型的IO块设备,每次读写都会经历寻址,其中寻址中寻道是比较耗时的。随机读写会导致寻址时间延长,从而影响磁盘的读写速度。...大家有没有想过MapReduce进行shuffle的时候,为什么map端和reduce端要进行排序,不排序不也不影响正常业务的处理,排序反而因为消耗资源增加了处理时间?...当上层有写操作时,操作系统只是将数据写入PageCache,同时标记Page属性为Dirty。当读操作发生时,先从PageCache中查找,如果发生缺页才进行磁盘调度,最终返回需要的数据。...对于In-Process Cache,如果Kafka重启,它会失效,而操作系统管理的PageCache依然可以继续使用

79540

【Kafka】一文详解零拷贝原理……

为什么 Kafka 这么快 批量处理 客户端优化 日志格式 日志编码 消息压缩 建立索引,方便快速定位查询 分区 一致性 顺序写盘 页缓存 零拷贝 以上几点是对于 kafka 为什么这么快总结的几个方面...中的数据,copy 到 socket 网络发送缓冲区(属于操作系统内核的缓冲区); 第四次:将 socket buffer 的数据,copy 到网卡,由网卡进行网络传输。...因为硬盘是机械结构,每次读写都会寻址->写入,其中寻址是一个“机械动作”,它是最耗时的。 所以硬盘最讨厌随机 I/O,最喜欢顺序 I/O。为了提高读写硬盘的速度,Kafka 就是使用顺序 I/O。...除了减少数据拷贝外,因为整个读文件 - 网络发送由一个 sendfile 调用完成,整个过程只有两次上下文切换,因此大大提高了性能。零拷贝过程如下图所示。...RocketMQ 在消费消息时,使用了 mmap。kafka 使用了 sendFile。

5.9K31

用HDFS数据存储与你想象一样吗?

昨天装好伪分布式的hadoop环境后,今天进行最基础的HDFS环境操作。HDFS最刚开始使用有几个误区,接下来,我们在实际操作中进行一一演示。 ?...二、相应在程序中调用HDFS的文件,不能直接用java.io.file类,必须引入hadoop-hdfs.jar包 在MyEclipse开发java程序时,不能直接用java.io.file类直接操作hdfs...三、Hadoop中默认的块空间大小为128MB,为什么 ?...如果寻址时间为10ms左右,而传输速率为100MB/s,为了使寻址时间仅占传输时间的1%。计算机的默认存储块大小为512KB,hadoop的Block Size严重大于操作系统的存储块。...NameNode负责管理整个文件系统的元数据,也就是哪个Block被放入了哪台计算机的目录,属称元数据。

81210

聊聊运维应该了解的一些内核知识

了解了Linux系统如何工作,我们才能更好的使用它,让它为我们服务。 Linux的由来 内核为什么吸引人,很重要的一个原因是自由精神,可以随手拿到源码,只有愿意,可以了解到每个功能非常细微的地方。...一些体系结构的内存物理寻址范围比虚拟寻址范围大得多,这样,就有一些内存不能永久地映射到内核空间上。...扇区和块的区别是,物理磁盘寻址是按照扇区级进行的,文件系统是按照块来进行的。块大小必须是扇区的倍数,一般是2的整数倍,并且不能超过一个内存页大小,因为文件块需要被缓存到内存中。...尽快Linux内核是单块内核的操作系统,但是整个内核是模块化的,允许在运行时动态的插入或者删除代码,即所谓的可装载内核模块。...一种思路是尽量追求通用性,尽量少的使用汇编语言,这样设计出来的操作系统可移植性非常高,但是缺点是不能针对某种体系深入优化。

1.2K10

Linux 虚拟内存,这理解很到位

操作系统有一块物理内存(中间的部分),有两个进程(实际会更多)P1 和 P2,操作系统偷偷地分别告诉 P1 和 P2,我的整个内存都是你的,随便用,管够。...操作系统的这种欺骗进程的手段,就是虚拟内存。对 P1 和 P2 等进程来说,它们都以为自己占用了整个内存,而自己使用的物理内存的哪段地址,它们并不知道也无需关心。...在系统启动时,操作系统整个物理内存以 4K 为单位,划分为各个页。...根据虚拟内存的概念,在 32 位系统上运行 64 位软件也并无不可,但由于系统对虚拟内存地址的结构设计,64位的虚拟地址在32位系统内并不能使用。...本文只讲了些基本原理,略过了很多细节,比如虚拟内存寻址中段寄存器的使用操作系统使用虚拟内存增强缓存、缓冲区的应用等,有机会单独拿出来说。

2.7K10

写一个操作系统_06 内存寻址

保护模式 为什么要有保护模式   实模式是有很大弊端的,首先,直接操作物理内存,这样的话每次只能运行一个程序,并且不安全;另外,内存最大使用到1M,限制太大。   ...保护模式下,程序不能直接访问物理地址,程序的虚拟地址需要被转换为物理地址后再去访问,地址转换是由处理器和操作系统协作完成的,处理器在硬件上提供地址转换部件,操作系统提供转换过程中需要的页表。...模式转换   bits伪指令用于指定处理器的运行模式,这一点是编译器和处理器约定的,操作数大小翻转前缀0x66和寻址方式反转前缀0x67用于将当前运行模式下的操作数大小和寻址方式转换成另一种模式。...地址空间的保护模型都来自分页,像ARM体系结构就不支持分段,仅靠MMU进行保护。 ?...二级页表 为什么要二级页表 每个进程1M个页表,每个4字节,进程多了占用的内存还是很多的。 一般进程使用的内存是远低于全部虚拟内存的。

65910

Linux 从头学 01:CPU 是如何执行一条指令的?

在 Linux 内核代码中,很多地方使用了原子操作,比如:互斥锁的实现代码。 为什么原子操作需要对变量的类型限制为 int 型呢?这就涉及到对内存的读写操作了。...控制总线决定了 CPU 可以对外进行多少种控制,决定了 CPU 对外部器件的控制能力。 CPU 如何对内存进行寻址?...对于 8086 CPU 来说,它有 20 根地址线,可以传送 20 位地址,达到 1MB 的寻址能力。 但是 8086 又是 16 位的结构,在内部一次性处理、传输、暂时存储的地址只有 16 位。...从内部结构来看,如果将地址从内部简单的发出到地址总线上,只能送出 16 位的地址,这样的话,寻址能力只有 64KB。 那么应该怎么才能充分利用 20 根地址线呢?...也就是说,即使 CPU 有能力直接输出一个 20 位的地址,它仍然可能会采用 基地址 + 偏移量的方式来进行内存寻址

1.1K20
领券