用户态和内核态,系统调用

Ubuntu和centos这两个都是linux发行版,也就是在linux上包了一层壳(内核都是linux

),在发行版上安装的应用(如mysql,redis)无法直接与计算机硬件交互,这些应用需要先访问内核,然后基于内核操作计算机硬件(CPU,内存,网卡)

不能让用户应用随意的去操作各种计算机硬件资源,造成内核崩溃

 用户应用只能执行受限的指令,不能直接操控计算机硬件(需要通过内核提供的接口来间接操控),用户态只能访问用户空间这块内存区域

内核应用可以执行特权指令,可以直接操控计算机硬件,内核态程序可以访问内核空间这块内存区域

进程可以在内核态和用户态之间进行切换

系统调用,中断,异常可以使用户态变成内核态

(1)用户态线程通过执行系统调用指令变成内核态,就可以执行位于内核地址内存空间的系统调用函数了

(2)异常就是执行代码时出错了,比如除0异常

(3)中断:键盘按键被按下,鼠标被移动或者点击,网络中有数据发送过来

特权指令:具有特殊权限的指令,比如清内存,重置时钟,分配系统资源,修改用户的访问权限

由于这类指令的权限最大,所以使用不当会导致整个系统崩溃

系统调用:是操作系统提供给应用程序的接口(供应用程序调用的特殊函数),应用程序使用系统调用来获得操作系统的服务

运行的用户程序,想要操控内核态级别的资源(比如文件管理,进程控制,内存管理),需要通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成,要记住的是用户程序执行系统调用

用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取

内核态:可以访问内存所有数据,而且可以访问外围设备(硬盘,网卡),cpu也可以将自己从一个程序切换到另一个程序

内核态和用户态的区别就是权限不同,内核态处于权限0,权限较高,用户态处于权限3,权限较低

从用户态切换到内核态的方法:

(1)系统调用:   

进程调用:exit,fork()

文件系统访问:chmod,chown

设备调用:read,write

信息读取:读取设备信息

通信:mmap,pipe

(2)中断:外围设备的终端,硬盘读写操作完成后,会向cpu发出中断信号,这时cpu会暂停执行下一条将要执行的指令,转而去执行与中断信号对应的处理程序,这个程序时内核态程序,所以也会由用户态转为内核态

(3)异常:cpu在执行用户态下的程序时,发生了某些事先不可知的异常,这时会触发当前运行的进程切换到处理此异常的内核相关程序,也就转到了内核态,比如缺页异常,除零异常

应用程序在运行的时候,可能会涉及到一些硬件资源的调用,这个时候需要借助内核来操控硬件,应用程序通过系统调用可以调用内核的一些函数

用户态程序执行系统调用,cpu切换到内核态,系统调用执行完,cpu回到用户态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值