8086汇编疑问

                                                        图1  cpu与内存的交互

学习王爽汇编,看到这张图,突然想到cs(代码段寄存器),ip(指令指针寄存器)的值是如何获取的?同时也联想到高级语言通过编译和链接生成的可执行文件是存放在内存中,那么它是如何从硬盘到内存,内存读写硬盘是否占用cpu以及读写的细节?也提出cache(高速缓冲区)如何判断自己是否拥有cpu所需的内容,从而不去从内存中获取?

通过查阅资料得知:

       1.1 内存读写硬盘是否占用cpu以及读写的细节?

        当CPU需要从硬盘读取数据时,它首先会向硬盘发送读取请求。硬盘会根据请求的地址和大小读取相应的数据,并将其传输到内存中的特定位置。这个过程中,硬盘使用的接口通常是SATA、SCSI或NVMe等标准。

        1.2那么cpu如何向硬盘发送读写请求?

        CPU向硬盘发送请求的过程是通过操作系统和硬盘控制器完成的。当CPU需要从硬盘读取数据时,它会发出一个系统调用,通知操作系统并提供所需数据的相关信息,例如要读取的数据的起始位置和长度等。接着,操作系统会将请求转换为适当的格式,并将其发送到硬盘控制器。硬盘控制器负责管理硬盘并执行相关的操作,例如读取、写入或删除数据等。硬盘控制器接收到请求后,会确定所需数据的位置,并在物理上定位它。然后,硬盘控制器会从磁盘上读取所需数据,并将其传输到内存中的特定位置。最后,硬盘控制器会向CPU发出中断信号,告诉CPU已经完成了请求的操作,CPU就可以开始处理所需数据了。

        1.3那么在读写硬盘到内存时,cpu是否空闲?

在硬盘读写到内存时,CPU可以执行其他任务,但通常会等待数据传输完成。当硬盘控制器从磁盘上读取所需数据并将其传输到内存中的特定位置时,CPU处于等待状态,直到数据传输完成。

        2.1 cs(代码段寄存器),ip(指令指针寄存器)的值是如何获取的?

在解释这个问题前,先要了解可执行文件如何载入内存?

        在大多数操作系统中,当用户运行一个可执行文件时,操作系统不会立即将整个可执行文件加载到内存中。相反,它会首先建立一个进程控制块(PCB)数据结构来跟踪该进程的状态,并为该进程分配一些资源。在接下来的步骤中,可执行文件被分成若干个段,然后逐段地被载入内存中。

具体来说,一个可执行文件通常被分成以下几个部分:

1. 头部:包含有关文件格式和其他元数据的信息。

2. 代码段:可执行程序的指令所在的内存区域。

3. 数据段:程序需要使用的全局和静态数据所在的内存区域。

4. BSS段:声明但未初始化的全局和静态数据所占用的内存区域。

5. 堆:动态分配内存的区域。

6. 栈:函数调用和本地变量所使用的内存区域。

在将可执行文件加载到内存中时,操作系统会将每个段映射到适当的虚拟地址上,并根据需要分配物理内存页。这种方式可以确保只有必要的部分被载入内存,从而最小化内存的占用并提高性能。因此,在运行可执行文件时,首先进行的是文件的解析和分段,并在需要时将每个段逐一载入内存中。这样做可以在不占用过多内存的情况下,使程序能够在运行时访问所需的代码和数据。

        2.2在了解了操作系统控制可执行文件分段载入内存,那么操作系统给就可以给cs , ip等段寄存器赋值。从而通过计算逻辑地址,来读写内存中的机器码到cpu,完成程序执行。

        2.3cache(高速缓冲区)如何判断自己是否拥有cpu所需的内容,从而不去从内存中获取?

        高速缓存通常使用一种叫做“缓存行”的结构来存储数据。每个缓存行包含一段连续的内存空间,并且通常有固定的大小(例如64字节)。当CPU需要访问某个内存地址时,它首先会检查该地址是否已经在缓存中。这是通过将内存地址映射到缓存行的索引来完成的。如果请求的地址位于缓存行中,那么就称为“缓存命中”,缓存会立即返回该数据给CPU,无需从内存中获取。如果地址不在缓存中,那么就称为“缓存未命中”。此时,缓存会从内存中加载整个缓存行,并将所需数据返回给CPU。同时,在缓存加载该行的同时,它还会将周围的一些行预取到缓存中,以便在将来可能被访问到。因此,缓存可以通过比较内存地址与缓存行的索引来判断自己是否拥有CPU所需的内容。如果地址位于缓存行中,则命中缓存;否则,未命中缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值