知识恶补-操作系统&汇编语言

特权等级

内核特权等级

16位cpu如何寻址20位

当16位CPU需要访问20位地址空间时,需要通过地址转换器将16位地址转换为20位地址。地址转换器通常由一组逻辑门电路组成,可以实现从一个地址空间到另一个地址空间的映射。

以下是16位CPU通过地址转换器寻址到20位的一般过程:

  1. CPU生成一个16位地址。

  2. 16位地址被送入地址转换器的输入端口。

  3. 地址转换器中的控制逻辑接收到16位地址后,根据预设的地址映射关系将其转换为20位地址。

  4. 转换得到的20位地址被发送到内存或外设。

需要注意的是,具体的地址转换方式由系统设计人员决定,不同的系统可能采用不同的地址转换方案。在某些系统中,可以使用硬件实现的地址转换器芯片组进行地址转换。在其他系统中,可能需要使用软件实现的内存管理单元(MMU)来完成地址转换。

总的来说,通过地址转换器,16位CPU可以访问到比其地址空间更大的20位地址空间,从而更高效地管理和利用系统资源。

虚拟内存

虚拟内存的设计是为了解决两个问题:内存不足和内存管理的复杂性。

当计算机的物理内存不足时,操作系统需要将部分内存数据换出到磁盘上,以释放物理内存。但是,如果操作系统只是简单地将内存数据写入磁盘,会导致系统响应速度变慢,程序运行异常,用户体验下降等问题。虚拟内存技术通过将内存数据映射到磁盘上的交换空间中,实现了内存数据的动态分配和管理,能够在保证系统稳定性的前提下,提高系统的利用率和响应速度。

此外,内存管理的复杂性也是虚拟内存设计的原因之一。在传统的内存管理中,操作系统需要为每个程序分配一定的物理内存空间,程序运行时只能使用这些空间,如果需要更多的内存,就必须重新分配物理内存。这种方式需要考虑内存管理的复杂性,如内存碎片、内存分配效率等问题。虚拟内存技术通过将程序所使用的虚拟内存空间映射到物理内存和磁盘上的交换空间中,实现了动态分配和管理内存,避免了内存碎片和内存分配效率等问题。

因此,虚拟内存技术是必不可少的一种内存管理技术,它能够提高系统的利用率和稳定性,降低内存管理的复杂性,为计算机系统提供更好的性能和用户体验。

虚拟内存是一种内存管理技术,它将程序所使用的内存空间映射到物理内存和磁盘交换空间中,实现动态分配和管理内存,其利弊如下:

利:

  1. 使得程序使用的内存空间可以超出物理内存的大小,从而避免了内存不足的问题;
  2. 允许多个程序同时运行,每个程序都可以使用自己的虚拟内存空间,提高系统的利用率;
  3. 通过内存的动态分配和管理,可以避免内存碎片的产生,从而提高内存的利用效率;
  4. 可以将不常用的内存页面换出到磁盘交换空间中,从而释放物理内存,提高系统的响应速度和稳定性。

弊:

  1. 虚拟内存的实现需要消耗额外的计算机资源,如处理器时间、磁盘空间等;
  2. 虚拟内存的访问速度比物理内存的访问速度慢,因为需要进行磁盘 I/O 操作;
  3. 由于虚拟内存的存在,程序的内存访问模式不再受到物理内存大小的限制,可能会导致内存泄漏和性能下降等问题;
  4. 如果磁盘交换空间不足,会导致操作系统崩溃或程序运行失败。

综上,虚拟内存是一种重要的内存管理技术,可以解决内存不足的问题,提高系统的利用率和稳定性。但是,需要注意虚拟内存的实现需要消耗额外的计算机资源,并且可能会导致程序运行异常和性能下降等问题。

x86中断

10H(10进制377)

中断号 0x10 是 BIOS 中的视频服务中断,也称为 INT 10h。它提供了一组用于处理显示器和文本模式的基本功能,例如设置光标位置、显示字符和字符串等。

INT 10h 中断可以通过调用 INT 10h 中断向量来触发,同时也可以通过 BIOS 提供的软件中断调用来使用。在调用 INT 10h 中断时,需要传递一个功能号和一些参数,以便选择所需的操作。

下面是一些常见的 INT 10h 功能号及其含义:

  1. 功能号 0x02:设置光标位置
  2. 功能号 0x03:获取光标位置
  3. 功能号 0x06:滚动屏幕
  4. 功能号 0x0E:在光标处显示字符
  5. 功能号 0x13:显示字符串
  6. 功能号 0x1A:获取显示器的型号和制造商信息

需要注意的是,INT 10h 中断是 BIOS 中的一部分,因此在现代操作系统中,它已经被取代了。在 Windows 和 Linux 等操作系统中,显示器和文本模式的操作通常通过图形驱动程序和控制台窗口来实现,而不是通过 INT 10h 中断。

但是,在一些嵌入式系统和一些早期的操作系统中,仍然可能会使用 INT 10h 中断来进行屏幕和文本操作。

0x0E(10进制14)

中断号 0x0E 是 BIOS 中的视频服务中断,也称为 INT 10h/0Eh。它提供了在屏幕上显示一个字符的基本功能。当调用 INT 10h/0Eh 时,需要传递要显示的字符的 ASCII 码和一些参数,以便选择所需的显示属性和光标位置。

下面是 INT 10h/0Eh 中使用的寄存器和参数:

AH = 0x0E
AL = 要显示的字符的 ASCII 码
BH = 页码(默认为 0)
BL = 文本颜色属性(高 4 位为背景颜色,低 4 位为前景颜色)
CX = 光标位置(高 8 位为行号,低 8 位为列号)

当调用 INT 10h/0Eh 时,屏幕会在指定位置显示指定字符,并根据指定的颜色属性进行着色。如果未指定页码,则默认使用第 0 页。如果未指定光标位置,则光标位置不会被更改。

需要注意的是,INT 10h/0Eh 中断只能在文本模式下使用,而不能在图形模式下使用。在图形模式下,需要使用其他的显示函数和图形库来进行屏幕绘制和字符显示。

内存物理地址

0x07c0(10进制为1984)

0x07c0 是指在 x86 汇编语言中,引导扇区(boot sector)被加载到内存的地址。在引导扇区中,第一个字节必须是 0x55,第二个字节必须是 0xAA。这是因为在 BIOS 启动计算机时,它会查找引导扇区的前两个字节是否为 0x55AA,如果是,则认为该扇区是一个有效的启动扇区,并跳转到该扇区的代码执行。

在编写引导扇区时,我们需要知道该扇区被加载到内存的地址。在 x86 架构中,BIOS 将引导扇区加载到内存地址 0x07c00(也就是 0x0000:0x7c00)处。因此,在编写引导扇区的时候,我们需要将代码放在该地址处,以便 BIOS 可以正确地加载该扇区并跳转到代码执行。

引导扇区的大小通常是 512 字节,因为这是 BIOS 加载扇区的标准大小。引导扇区的第一个字节必须是 0x55,第二个字节必须是 0xAA,之后的 510 字节可以用来放置引导扇区的代码。因此,引导扇区被加载到内存地址 0x07c00 处,并占用了 512 字节的空间(0x07c00 到 0x07dff)。

0x0000

0x0000 地址通常被称为系统的起始地址或者系统的重置向量,它是计算机系统中最重要的地址之一。当计算机加电或者复位时,CPU 会从这个地址处开始执行指令,这个地址中存储的指令被称为启动代码(Bootstrap Code)或引导程序(Bootloader),它负责初始化计算机的硬件设备,加载操作系统内核或者其他系统软件,使得系统能够正常运行。

在 IBM PC 兼容机中,启动代码通常存储在 ROM BIOS 芯片中,当计算机加电或者复位时,CPU 会从 ROM BIOS 中的 0xFFFF0 地址开始执行代码,这个地址对应的物理地址是 0xF000:0xFFF0,也就是 ROM BIOS 的最后 16 字节。执行的第一条指令会跳转到 0x0000 地址处,这个地址对应的物理地址是 0xF000:0x0000,也就是 ROM BIOS 的第一个 16 字节。

在一些嵌入式系统中,启动代码可能存储在闪存或者 EEPROM 中,也有一些系统使用外部存储设备,如磁盘、U盘、SD卡等来存储启动代码。

无论是哪种存储方式,系统的启动代码都必须存储在物理地址为 0x0000 的位置,这是因为 CPU 在加电或复位后会从这个地址开始执行,所以启动代码必须存储在这个位置才能被正确地执行。

jmp 0x8000:0x0000

jmp 0x8000:0x0000 是一个汇编语言中的跳转指令,它的作用是跳转到物理地址为 0x80000 的位置开始执行指令。

在实模式下,地址总线是 20 位宽,可以寻址的物理地址范围是 0x00000~0xFFFFF。在 jmp 0x8000:0x0000 指令中,0x8000 表示段基址,0x0000 表示偏移量。由于在实模式下,段基址左移 4 位,再加上偏移量,就是真正的物理地址。因此,该指令实际的物理地址为 0x8000 << 4 + 0x0000 = 0x80000。

在实模式下,CPU 通过段寄存器和偏移量来计算物理地址。在 jmp 0x8000:0x0000 指令中,CPU 会将段寄存器 CS 的值设置为 0x8000,将 IP 寄存器的值设置为 0x0000,这样 CPU 就可以通过 CS:IP 的值来计算跳转的物理地址为 0x80000,然后开始执行该地址处的指令。

需要注意的是,jmp 0x8000:0x0000 指令只能在实模式下使用,而不能在保护模式下使用。在保护模式下,CPU 使用段选择符和段描述符来计算物理地址,不同于实模式下的简单计算方式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值