1、简述
无论是Windows还是Linux/UINX操作系统,操作系统都负责管理和分配所有的计算机资源。为了使用户进程合理、安全地使用系统内核提供的服务和资源,操作系统提供一组用户进程与内核交互的特殊接口——系统调用。
1.1、CPU指令集
指令:指示计算机硬件执行某种运算、处理功能的命令,是计算机运行的最小的功能单位。
指令集:一台计算机全部指令的集合,包括指令格式、寻址方式、数据形式。
目前CPU指令集有很多,在每个CPU指令集中,每个指令都有唯一的、不重复的指令编号。CPU硬件的控制单元,可以识别、解析程序中要执行的指令编号,然后控制单元使相关硬件做出相应的操作。
图1 CPU执行一条指令的过程
1.2、CPU指令权限分级
由于操作硬件极为复杂,如果允许用户程序任意使用指令集、操作硬件资源,可能出现一些不安全的操作,为了避免这种情况的出现,所以将CPU指令及分为特权级和非特权级。
特权级:只能由操作系统使用的指令。
非特权级:用户程序可以使用的指令。
inter的CPU把权限分为4个级别:ring0、ring1、ring2、ring3.
其中ring0级别最高,ring3级别最低。
在Linux系统中,ring0为内核态,ring3为用户态。用户程序读写IO,使用是ring3的指令,需要切换到ring0权限的系统内核,就要由用户态切换到内核态。
1.3、用户态切换为内核态的三种情况
1.系统调用
2.异常
3.外围设备的中断
文章仅为记录学习使用,后续会不断完善,如有不足、欢迎各位佬们斧正!