操作系统CPU态(学习笔记二)

概念
简单来说就是CPU的工作状态;具体来说它是对资源和指令使用权限的描述。
比如HALT:停止CPU的工作;IN/OUT:执行I/O操作等特权指令,只有CPU工作在权限很高的态下才能使用这些指令。

态的分类
用户态:仅能访问部分资源,其他资源受限。一般通过用户程序访问资源
内核态:能够访问所有资源和执行所有指令(与用户态的最大差别)。存在于管理程序或OS内核中
管态:介于内核态与用户态之间

详细说一下内核态与用户态吧

用户态与内核态之间的转换
1.内核态转换到用户态

  • 一般是执行中断返回:IRET

2.用户态转换到内核态

  • 用户请求OS提供服务
  • 发生中断
  • 用户进程产生错误(内部中断)
  • 用户态企图执行特权指令

硬件和OS对CPU的观察

  • 硬件按 “态” 来区分CPU的状态
  • OS按 “进程” 来区分CPU的状态

以一个简单的C程序举例:

#include<stdio.h>
#include<string.h>
int sum(int a,int b){
	return a+b;
}

int main(){
	int x;
	x=sum(1,2);//这里调用sum函数,仍然在用户态
	printf("%d\n",x);//系统调用引发中断,用户态切换到内核态
	x=strlen("hello");//内核态转换到用户态
	printf("%d\n",x);//用户态再次通过系统调用转换到内核态
	return 0;
}

系统调用
是内核提供给用户的接口,使用户可以对内核操作。但需要进入内核态,才能调用。系统调用使用户进程进入内核的接口层,它本身并非内核函数,但它是由内核函数实现的,进入系统内核后,不同的系统调用会找到各自对应的内核函数。

强调一下:这里 printf() 是调用 write() 系统调用函数向标准输出设备写。通过一步步查看 printf() 的定义,会发现最后找到了write(), 而在C中并没有write()的具体代码实现。具体系统调用过程可参阅:https://blog.csdn.net/edonlii/article/details/20135059
strlen() 是c标准库的函数,无需系统调用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值