特权与非特权指令,处理器内部结构,处理器状态及其转换

处理器是啥?

什么是处理器呢?先插入一个处理器的结构图,看看他长啥样

特权与非特权指令,处理器内部结构,处理器状态及其转换_第1张图片

CPU 的核心是从程序或应用程序获取指令并执行计算,CPU从系统的主存(内存)中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。

看到上面的图片,我们可以知道:从功能来看,CPU 的内部由寄存器、控制器、运算器和时钟四部分组成,各部分之间通过电信号连通。

  • 寄存器是中央处理器内的组成部分。它们可以用来暂存指令、数据和地址。可以将其看作是内存的一种。根据种类的不同,一个 CPU 内部会有 20 - 100个寄存器。
  • 控制器负责把内存上的指令、数据读入寄存器,并根据指令的结果控制计算机
  • 运算器负责运算从内存中读入寄存器的数据
  • 时钟 负责发出 CPU 开始计时的时钟信号

在 CPU 的四个结构中,我们程序员只需要了解寄存器就可以了,其余三个不用过多关注,为什么这么说?因为程序是把寄存器作为对象来描述的。看下面的图片:

特权与非特权指令,处理器内部结构,处理器状态及其转换_第2张图片

下面对各个寄存器进行说明:

1.程序计数器(Program Counter):是用来存储下一条指令所在单元的地址。

程序执行时,PC的初值为程序第一条指令的地址,在顺序执行程序时,控制器首先按程序计数器所指出的指令地址从内存中取出一条指令,然后分析和执行该指令,同时将PC的值加1指向下一条要执行的指令。

我们还是以一个事例为准来详细的看一下程序计数器的执行过程:

特权与非特权指令,处理器内部结构,处理器状态及其转换_第3张图片

这是一段进行相加的操作,程序启动,在经过编译解析后会由操作系统把硬盘中的程序复制到内存中,示例中的程序是将 123 和 456 执行相加操作,并将结果输出到显示器上。

地址 0100 是程序运行的起始位置。Windows 等操作系统把程序从硬盘复制到内存后,会将程序计数器作为设定为起始位置 0100,然后执行程序,每执行一条指令后,程序计数器的数值会增加1(或者直接指向下一条指令的地址),然后,CPU 就会根据程序计数器的数值,从内存中读取命令并执行,也就是说,程序计数器控制着程序的流程。

2.标志寄存器(Program Status Word):区别不同的处理器工作状态

每个程序都有一个与其执行相关的PSW(即程序状态字),每个处理器都设置一个PSW寄存器。程序占有处理器执行,它的PSW将占有PSW寄存器

特权指令和非特权指令:

对处理器就简单的介绍完了,那接下来要说一下,什么是特权指令和非特权指令

计算机的机器指令的集合称指令系统;指令系统包括数据处理类指令,转移类指令,数据传送类指令,移位与字符串指令,I/O类指令;我们从从资源管理和控制程序执行的角度出发,把指令系统中的指令分作两部分:特权指令和非特权指令;特权指令是指只能提供给操作系统的核心程序使用的指令,如启动I/O设备、设置时钟、控制中断屏蔽位、清主存、建立存储键,加载PSW等。 应用程序只能使用非特权指令。

内核态和用户态:

处理器怎么知道当前是操作系统还是一般用户程序在运行呢?

处理器状态标志: 管理状态(核心状态、特态或管态)和用户状态(目标状态、常态或目态)。

处理器处于管理状态时,程序可以执行全部指令,使用所有资源,具有改变处只能执行非特权指令

处理器状态的转换:用户态-->内核态

中断和异常是用户态到内核态转换仅有的途径

你可能感兴趣的:(操作系统,系统架构,linux,windows,macos)