Linux 用户态和内核态
1.特权级
特权级用来管理和控制程序执行。
如Intel x86架构的CPU,有0~3四个特权级,0级最高,3级最低。
硬件在执行每条指令时都会检查指令具有的特权级。
硬件提供了特权级使用机制,对操作系统来说,负责确定指令的特权级。
如Linux中,只使用了0和3级特权级,工作在0级特权级的指令具有CPU提供的最高权力,
而三级特权级指令只具有CPU提供的最基本权力。
2.用户态和内核态的区别
当程序运行在3级特权级时,称为运行在用户态,普通的用户进程一般运行在用户态。
当程序运行在0级特权级时,称为运行在内核态。
用户态和内核态最主要的差别在于特权级的不同。运行在用户态的程序不能直接访问操作系统内核。
我们通过以下示例来分析用户态和内核态:
void testfork(){
if(==fork()){
printf("create new process success");
}
}
当程序调用fork()时,最终会调用sys_fork()函数来创建一个子进程。
testfork()函数中不能直接调用sys_fork(),因为前者是用户态程序,而sys_fork()工作在内核态。此时,进程会在操作系统的帮助下,由用户态切换到内核态。
3.用户态和内核态切换的三种方式
1)系统调用
用户态进程主动要求切换到内核态。
用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。
如上例的sys_fork()
2)异常
当CPU在执行运行在用户态下的程序时,发生某些异常后,会触发当前运行进程切换到异常的内核相关程序中,也就转到了内核态,如缺页异常。
3)外围设备的中断
当外围设备完成用户请求的操作后,会向CPU发送相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前知心的指令时用户态下的程序,那么这个转换也就是由用户态到内核态的切换。如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作。
4.用户态和内核态切换的原理
用户态和内核态的切换,是系统调用了中断机制,执行了一个中断响应的过程。
步骤主要包括:
1)从当前进程的描述符中提取其内核栈的ss0及esp0信息。
2)使用sso和esp0执行的内核栈将当前进程的cs,eip,eflags,ss,esp信息保存起来,这个过程完成了由用户栈到内核栈的切换过程,同时保存了被暂停执行程序的下一条指令。
3)将先前由中断向量检索得到的中断处理程序的cs,eip信息装入相应的寄存器,执行中断处理程序,这时就转到了内核态的程序执行了。
Linux 用户态和内核态的更多相关文章
- Linux用户态和内核态
究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子: 1)例 ...
- Linux探秘之用户态与内核态
一. Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核).内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程 ...
- 【转载】 Linux用户态和内核态
[说明]转载自 http://my.oschina.net/liubin/blog/27795 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分 ...
- Linux操作系统学习_用户态与内核态之切换过程
因为操作系统的很多操作会消耗系统的物理资源,例如创建一个新进程时,要做很多底层的细致工作,如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录.页表等,这些操作显然不能随便让任何程序都可以做,于是就产 ...
- 【Linux 系统】Linux探秘之用户态与内核态
一. Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核).内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程 ...
- (转)linux用户态和内核态理解
原文:https://blog.csdn.net/buptapple/article/details/21454167 Linux探秘之用户态与内核态-----------https://www.cn ...
- Linux 用户态与内核态的交互【转载】
Linux 用户态与内核态的交互 在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用 netlink 套接字实现的,例如iprote2网络管理工具,它与内核的交 ...
- linux 用户态和内核态以及进程上下文、中断上下文 内核空间用户空间理解
1.特权级 Intel x86架构的cpu一共有0-4四个特权级,0级最高,3级最低,ARM架构也有不同的特权级,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查.硬件已经提 ...
- linux之用户态和内核态
一. Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核).内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程 ...
随机推荐
- Allegro PCB SI (2)
整理一下在电研院学的si (虽然彩超的si在频率15Mhz以上后,si是失真的.昨晚遇到孔大哥也是这样说的,板级仿真,要layout过硬,然后找到合适的top test point) Allegro ...
- GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站
引文 如果你已经购买了Nuand(官方)BladeRF x40,那么就可以在上面运行OpenBTS并可以输入一些指令来完成一些任务.一般来说HackRF,是一款覆盖频率最宽的SDR板卡.它几乎所有的信 ...
- 一群猴子排成一圈,按1,2,...n 编号,数到m只,踢出局,直到剩下最后一个猴子是大王
<?php/***function king*@param $m 数到m个数, $n 猴子个数*return int*/function king($m, $n){ //定义数组, 值为猴 ...
- 爬虫再探实战(三)———爬取动态加载页面——selenium
自学python爬虫也快半年了,在目前看来,我面临着三个待解决的爬虫技术方面的问题:动态加载,多线程并发抓取,模拟登陆.目前正在不断学习相关知识.下面简单写一下用selenium处理动态加载页面相关的 ...
- 10、网页制作Dreamweaver(扩展:各浏览器对 onunload 事件的支持与触发条件实现有差异)
标准参考 在 HTML 4.01 规范中关于 onunload 事件的描述是:当 document 从 window 中移除时,触发 onunload 事件. 关于 HTML 4.01 规范中 onu ...
- 转:SSL协议详解
http://kb.cnblogs.com/page/162080/ 背景介绍 最近在看<密码学与网络安全>相关的书籍,这篇文章主要详细介绍一下著名的网络安全协议SSL. 在开始SS ...
- LeetCode Word Pattern (模拟)
题意: 给出一个模式串pattern,再给出一个串str,问str的模板是否是pattern. 思路: 注意点:只要对于所有pattern[i]相同的i,str中对应的所有words[i]也必须相同, ...
- lhgdialog 与后台交互的对话框
官网:http://www.lhgdialog.com/ 1. 调用打开dialog的按钮 <span class="txtdec fs10 open"> <a ...
- CUDA 并行编程简介
前言 并行就是让计算中相同或不同阶段的各个处理同时进行.目前有很多种实现并行的手段,如多核处理器,分布式系统等.本专题的文章将主要介绍使用 GPU 实现并行的方法.参考本专题文章前请务必搭建好 CUD ...
- cuffdiff 和 edgeR 对差异表达基因的描述
ASE又走到了关键的一步 要生成能决定是否有差异表达的table. 准备借鉴一下cuffdiff和edgeR 的结果 cuffdiff对差异表达基因的描述: 一共十四列: 第一列, test_id ...