首页 > 系统相关 >【Linux内核态】内核态和用户态的理解

【Linux内核态】内核态和用户态的理解

时间:2023-08-14 18:36:36浏览次数:35  
标签:fork 中断 特权 用户 切换 Linux 内核

内核态和用户态的理解

特权级

在Unix/Linux系统中,fork的工作实际上是以系统调用的方式完成相应功能的,具体的工作是由sys_fork负责实施。其实无论是不是Unix或者Linux,对于任何操作系统来说,创建一个新的进程都是属于核心功能,因为它要做很多底层细致地工作,消耗系统的物理资源,比如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录页表等等,这些显然不能随便让哪个程序就能去做,于是就自然引出特权级别的概念,显然,最关键性的权力必须由高特权级的程序来执行,这样才可以做到集中管理,减少有限资源的访问和使用冲突。

特权级显然是非常有效的管理和控制程序执行的手段,因此在硬件上对特权级做了很多支持,就Intel x86架构的CPU来说一共有0~3四个特权级,0级最高,3级最低,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查,相关的概念有CPL、DPL和RPL,这里不再过多阐述。硬件已经提供了一套特权级使用的相关机制,软件自然就是好好利用的问题,这属于操作系统要做的事情,对于Unix/Linux来说,只使用了0级特权级和3级特权级。也就是说在Unix/Linux系统中,一条工作在0级特权级的指令具有了CPU能提供的最高权力,而一条工作在3级特权级的指令具有CPU提供的最低或者说最基本权力。

用户态和内核态

当程序运行在3级特权级上时,就可以称之为运行在用户态,因为这是最低特权级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态;反之,当程序运行在0级特权级上时,就可以称之为运行在内核态。

虽然用户态下和内核态下工作的程序有很多差别,但最重要的差别就在于特权级的不同,即权力的不同。运行在用户态下的程序不能直接访问操作系统内核数据结构和程序,比如上面例子中的testfork()就不能直接调用sys_fork(),因为前者是工作在用户态,属于用户态程序,而sys_fork()是工作在内核态,属于内核态程序。

当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态,比如testfork()最初运行在用户态进程下,当它调用fork()最终触发sys_fork()的执行时,就切换到了内核态。

用户态和内核态的转换

用户态切换到内核态的3种方式

系统调用

这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。

异常

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

外围设备的中断

当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

以上这3种方式是系统在运行时由用户态转到内核态的最主要方式,其中系统调用可以认为是用户进程主动发起的,异常和外围设备中断则是被动的。

具体的切换操作

从触发方式上看,可以认为存在前述3种不同的类型,但是从最终实际完成由用户态到内核态的切换操作上来说,涉及的关键步骤是完全一致的,没有任何区别,都相当于执行了一个中断响应的过程,因为系统调用实际上最终是中断机制实现的,而异常和中断的处理机制基本上也是一致的,关于它们的具体区别这里不再赘述。关于中断处理机制的细节和步骤这里也不做过多分析,涉及到由用户态切换到内核态的步骤主要包括:

  1. 从当前进程的描述符中提取其内核栈的ss0及esp0信息。

2.使用ss0和esp0指向的内核栈将当前进程的cs,eip,eflags,ss,esp信息保存起来,这个过程也完成了由用户栈到内核栈的切换过程,同时保存了被暂停执行的程序的下一条指令。

3.将先前由中断向量检索得到的中断处理程序的cs,eip信息装入相应的寄存器,开始执行中断处理程序,这时就转到了内核态的程序执行了。
















参考文章: https://www.cnblogs.com/lirong21/p/4213028.html#:~:text=%E4%BB%8E%E8%80%8C%E8%BF%9B%E7%A8%8B%E4%BB%8E%E7%94%A8%E6%88%B7%E6%80%81,%E4%B8%8B%E6%96%87%E5%88%B0%E5%86%85%E6%A0%B8%E6%A0%88%E4%B8%AD%E3%80%82

标签:fork,中断,特权,用户,切换,Linux,内核
From: https://www.cnblogs.com/Wangzx000/p/17629414.html

相关文章

  • 鸟哥的Linux私房菜服务器架设篇
    第四章:连接到Internet1、主机名十分重要,DNS系统中主机名=ip;如百度服务器主机名为:www.baidu.com2、DHCP(局域网)、DNS(互特网)等都需要服务器来部署,如DHCP服务器可以IP路由器来充当;3、配置ADSL时注意,   a、ppp0拨号成功后,ISP会自动给予ppp0接口一个可以连上internet的defaul......
  • Linux---磁盘空间
       https://www.runoob.com/linux/linux-command-manual.html df dudu-sh/path/to/directory该命令将显示指定目录的磁盘空间使用情况,以人类可读的方式显示目录大小 ......
  • LINUX 命令整理
    LINUX命令整理:touch利⽤bash的花括号{}一次创建连续的文件N个[root@localhostopt]#touch/opt/{1..7}.txt[root@localhostopt]#ls10.txt1.txt2.txt3.txt4.txt5.txt6.txt7.txt2.rm-r递归删除⽂件夹-f强制删除 rmdir删除目录3.cp拷⻉⽂件使⽤-r参数,可以递归......
  • Linux命令系列(3) —— 单会话多shell命令:screen
    目录一.命令简介二.安装三.常用命令1.查看shell2.创建shell3.离开shell4.进入shell5.销毁shell一.命令简介  在使用Linux的时候,有些情况下只能使用单个会话,但是又有多shell的需求;又有一种情况,需要执行一个在会话结束以后依旧需要执行的进程(在Linux系统中,用户通过sh......
  • linux 动态库生成
    命令:g++-Iincludetest.cpp-fPIC-shared-Wall-m64-std=c++11-O0-g-obin/test.so-g++:编译器的名称-Iinclude:添加了一个头文件搜索路径,包含名为"include"的目录test.cpp:被编译的源文件-fPIC:生成位置无关代码(PositionIndependentCode)-shared:生成共享库-W......
  • Linux的Nginx安装部署
    简介Nginx(enginex)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。同Tomcat一样,Nginx可以托管用户编写的WEB应用程序成为可访问的网页服务,同时也可以作为流量代理服务器,控制流量的中转。Nginx在WEB开发领域,基本上也是必备组件之一了。安装Nginx......
  • 9.2 Linux LED 驱动开发实验
    一、Linux下的LED驱动原理  Linux下的任何驱动,最后都是要配置相应的硬件寄存器。1.地址映射  MMU全称叫做MemoryManageUnit,也就是内存管理单元。现在的Linux支持无MMU处理器。MMU主要完成的功能为:  1、完成虚拟空间到物理空间的映射。  2、内存保护,设......
  • 【专题】2022年·母婴行业用户洞察报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=33430我国出生人口数量在2022年为956万人,比去年减少了10%。多种因素影响了这一趋势,包括育龄人口减少、生育观念改变以及婚育年龄推迟。然而,与此同时,由于母婴人群消费水平不断提高,以及精细化喂养逐渐成为育儿的主流方式,我国母婴市场产业规模持续增长......
  • 【专题】2022互联网母婴行业用户洞察报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=33430我国出生人口数量在2022年为956万人,比去年减少了10%。多种因素影响了这一趋势,包括育龄人口减少、生育观念改变以及婚育年龄推迟。然而,与此同时,由于母婴人群消费水平不断提高,以及精细化喂养逐渐成为育儿的主流方式,我国母婴市场产业规模持续增长......
  • Linux的Tomcat安装部署
    简介Tomcat是由Apache开发的一个Servlet容器,实现了对Servlet和JSP的支持,并提供了作为web服务器的一些特有功能,如Tomcat管理和控制平台,安全域管理和Tomcat阀等。简单说,Tomcat是一个WEB应用程序的托管平台,可以让用户编写的WEB应用程序,被Tomcat所托管,并提供网站服务。即让用......