现代操作系统学习笔记——内核态与用户态、系统调用

本文为学习《现代操作系统》时遇到的疑问,为网上查找资料的总和。


内核态与用户态

操作系统需要CPU的两种状态,即内核态与用户态,两种状态的不同主要体现在所能使用的指令范围上。

内核态:可以执行任何指令,对所有硬件具有完全访问权,操作系统就运行在内核态。

用户态:只能使用计算机指令集的一个子集,不允许执行某些指令。


两种状态的不同:

除了可使用指令的不同之外,处于用户态执行时,能访问的内存空间收到限制,所占用的处理机(包括CPU、存储器、IO设备、及外围设备)是可被抢占的,内核态可以访问所有的内存空间,所占用的处理机不允许被占用。


由用户态转变为内核态主要有三种方式:1、系统调用,2、异常,3、外围设备的中断。在这里只介绍系统调用。


Intel -86架构CPU的特权级别

分为:R0、R1、R2、R3,其中R0具有最高权限,相当于内核态,R3相当于用户态,Intel-86CPU只能处于其中一个特权级,决定代码可以做什么不可以做什么,之前用vs进行网络编程时,由于没有用管理员运行,所以无法执行代码,问题应该出现在此,硬件每次执行一条指令时都会对指令所具有的特权级进行检查,如果与当前CPU所处特权级相符则执行,否则拒绝执行。


系统调用

系统调用:为特殊的过程调用,用户在操作系统中调用操作系统所提供的一些子功能,通过系统调用命令(即调用系统调用的命令),终止现行的程序转去执行相应的子程序,以完成特定的系统功能,完成后,控制又返回到发出系统调用命令之后的一条指令,被中断的程序继续执行下去。系统调用将应用程序的请求传给内核,调用相应的内核函数完成所需要的处理,将处理结果返回给应用程序,通俗的说,目前CPU所处等级无法执行我们程序想要的功能,而系统调用相当于提升CPU所处等级,以便CPU执行某些功能



猜你喜欢

转载自blog.csdn.net/dhaiuda/article/details/79375537