作为中央核心处理单元的CPU,不仅生产工艺的不断革新进步外,在处理数据和响应速率方面也须要有权衡。稍有微机原理基础的人都晓得IntelX86体系的CPU提供了四种特权模式ring0~ring3,其中ring0特权最高,ring3的特权最低,之所以要做这样的分辨一个主要目的是保护资源,浅显来讲要保护的资源无非就是“内存、I/O端口以及执行特殊机器指令的能力”。任何一个时刻,x86CPU都是在一定的特权模式下运行。同样,对于ARM体系的CPU一共有七种运行模式,分别是:用户模式(usr)、快速中断模式(fiq)、中断模式(irq)、管理模式(svc)、系统模式(sys)、数据访问中止模式(abt)和未定义指令中止模式(und)。不仅用户模式外,其他6中工作模式都属于特权模式,而特权模式中不仅系统模式外,其他5种模式又称为异常模式。
这么底层硬件CPU的这些特点node.js安装linux,跟我们即将讨论的用户模式和内核模式又有哪些关系呢?让我们正本追溯来端正一下对操作系统的认识。每个教操作系统课程的老师就会告诉你们:所谓的操作系统呢,就是对硬件资源进行统一管理的系统,并向用户提供业务插口的软件系统。浅显来讲,【操作系统就是要能管理你的CPU和显存,驱动你的硬碟,管理你的网卡和显示器,之后当你点击滑鼠和敲打按键时能作出正确的响应。】够浅显了吧。
这么问题就来了,以CPU为例,假如你是一个操作系统的设计者,你会怎么处理不同CPU体系构架的差别性(如Intel、ARM,甚或AMD、MIPS等)?其实这个问题不是通常人能hold得了的,CU峰会里开发成都操作系统这位大牛高手确实值得让吾辈钦佩和崇拜。继续我们的话题,也就是说不同的操作系统在处理CPU体系构架的差别化方面是不相同的linux内核空间访问用户空间,有些操作系统,就提供了用户模式和内核模式这些机制(比如linux)linux内核空间访问用户空间,而有些操作系统呢,又没有用户态和内核态之分(比如vxWorks)。前者不在我们的讨论范围,感兴趣的童鞋可以自己去google一下。
以Linux系统和Intelx86的CPU为例,Linux使用了ring0模式来运行内核态的代码,ring3来运行用户态的代码,ring1和ring2没有使用。32为操作系统可轮询范围是0~4GB,因此Linux系统将其分为了用户空间和内核空间两部份:
其中用户空间占高位的3GB空间,范围从虚拟地址的0x00000000到0xBFFFFFFFF,内核空间占用了低位的1GB空间,虚拟地址范围从0xCxC0000000到0xFFFFFFFF。
内核空间里储存的是整个内核代码和所有内核模块,以及内核所维护的数据。当用户运行一个程序时,该程序所创建的进程一开始是运行在用户空间的,当它要执行网路发送数据等动作时,必须通过调用write、send等系统函数来完成,这种系统调用会去调用内核中的代码来完成用户的恳求操作,这时CPU必须从ring3切换到ring0,之后步入内核地址空间去执行这种代码完成操作,完成后又切换回ring3,回到用户态。
所以,我们可以看见,提供了用户模式和内核模式的操作系统,用户态的程序就不能随便操作内核地址空间里的数据,具有一定的安全保护作用;于此同时,在实时性方面稍为有所牺牲。也要就是说,只要内核代码没有问题linux软件下载,用户空间程序的错误和BUG通常来说不会造成系统崩溃,增强了系统的强健性。
如此看来,内核确实比较“拽”,而Linux也提供了一些用户空间和内核空间通信的机制,使我们可以开发出更高效的程序。但一定要记住,内核中一点小小的错误都是会造成整个系统崩溃,所以开发内核程序时一定要特别当心慎重。
本文原创地址://gulass.cn/srjxctqmsiya.html编辑:刘遄,审核员:暂无