User space(用户空间)和 Kernel space(内核空间)

学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel space(内核空间)。

简单说,Kernel space 是 Linux 内核的运行空间,User space 是用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。

Kernel space 可以执行任意命令,调用系统的一切资源;User space 只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(又称 system call),才能向内核发出指令。

= "my string" // 用户空间
x = x + 2
file.write(str) // 切换到内核空间

y = x + 4 // 切换回用户空间

上面代码中,第一行和第二行都是简单的赋值运算,在 User space 执行。第三行需要写入文件,就要切换到 Kernel space,因为用户不能直接写文件,必须通过内核安排。第四行又是赋值运算,就切换回 User space。

查看 CPU 时间在 User space 与 Kernel Space 之间的分配情况,可以使用top命令。它的第三行输出就是 CPU 时间分配统计。

这一行有 8 项统计指标。

其中,第一项24.8 us(user 的缩写)就是 CPU 消耗在 User space 的时间百分比,第二项0.5 sy(system 的缩写)是消耗在 Kernel space 的时间百分比。

随便也说一下其他 6 个指标的含义。

  • ni:niceness 的缩写,CPU 消耗在 nice 进程(低优先级)的时间百分比
  • id:idle 的缩写,CPU 消耗在闲置进程的时间百分比,这个值越低,表示 CPU 越忙
  • wa:wait 的缩写,CPU 等待外部 I/O 的时间百分比,这段时间 CPU 不能干其他事,但是也没有执行运算,这个值太高就说明外部设备有问题
  • hi:hardware interrupt 的缩写,CPU 响应硬件中断请求的时间百分比
  • si:software interrupt 的缩写,CPU 响应软件中断请求的时间百分比
  • st:stole time 的缩写,该项指标只对虚拟机有效,表示分配给当前虚拟机的 CPU 时间之中,被同一台物理机上的其他虚拟机偷走的时间百分比

如果想查看单个程序的耗时,一般使用time命令。

程序名之前加上time命令,会在程序执行完毕以后,默认显示三行统计。

  • real:程序从开始运行到结束的全部时间,这是用户能感知到的时间,包括 CPU 切换去执行其他任务的时间。
  • user:程序在 User space 执行的时间
  • sys:程序在 Kernel space 执行的时间

user和sys之和,一般情况下,应该小于real。但如果是多核 CPU,这两个指标反映的是所有 CPU 的总耗时,所以它们之和可能大于real。

[参考链接]

(完)

时间: 2024-10-01 14:40:28

User space(用户空间)和 Kernel space(内核空间)的相关文章

Linux架构简介:内核空间,用户空间和虚拟文件系统

首先有两个概念,内核空间和用户空间: 内核空间是指当kernel 执行时会占据一段系统的内存空间,这段空间就是内核空间,用户是无法和内核空间直接交互的.操作系统最主要的核心就是在这段空间里面运行. 内核空间的地址分配可以在 /proc/iomem文件中看到: 用户空间是指当用户执行程序时所占用的内存部分,这些用户程序无法直接使用内核空间的资源,必须通过虚拟文件系统才可以使用内核的资源. 所以,虚拟文件系统就是用来让用户和内核交互用的,它分为以下部分: 设备文件目录 /dev 程序信息与系统设置目

用户空间与内核空间,进程上下文与中断上下文[总结]

1.前言 最近在学习linux内核方面的知识,经常会看到用户空间与内核空间及进程上下文与中断上下文.看着很熟悉,半天又说不出到底是怎么回事,有什么区别.看书过程经常被感觉欺骗,似懂非懂的感觉,很是不爽,今天好好结合书和网上的资料总结一下,加深理解. 2.用户空间与内核空间 我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操心系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限.为了保

Linux用户空间与内核空间(理解高端内存)

Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中.   Linux内核地址映射模型 x86 CPU采用了段页式地址映射模型.进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存. 段页式机制如下图.   Linux内核地址空间划分 通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间.注意这里

Linux Malloc分析-从用户空间到内核空间【转】

转自:http://blog.csdn.net/ordeder/article/details/41654509 版权声明:本文为博主(http://blog.csdn.net/ordeder)原创文章,未经博主允许不得转载.   目录(?)[-] 1背景知识 1 进程的用户空间  12 地址映射 malloc 和free 1 用户层 2 内核层 3 虚拟地址与物理地址 总结 参考 附录   本文介绍malloc的实现及其malloc在进行堆扩展操作,并分析了虚拟地址到物理地址是如何实现映射关系

linux内核空间与用户空间信息交互方法

     摘要:在进行设备驱动程序,内核功能模块等系统级开发时,通常需要在内核和用户程序之间交换信息.Linux提供了多种方法可以用来完成这些任务.本文总结了各种常用的信息交换方法,并用简单的例子演示这些方法各自的特点及用法.其中有大家非常熟悉的方法,也有特殊条件下方可使用的手段.通过对比明确这些方法,可以加深我们对Linux内核的认识,更重要的是,可以让我们更熟练驾御linux内核级的应用开发技术. 内核空间(kernel-space) VS 用户空间(user-space) 作为一个Linu

linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间

转载 - linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间 作者 digoal 日期 2016-11-20 标签 Linux , 用户空间 , 内核空间 , 用户态 , 内核态 , 进程上下文 , 中断上下文 背景 原文 http://blog.csdn.net/bingqingsuimeng/article/details/7924756 原文 linux驱动程序一般工作在内核空间,但也可以工作在用户空间.下面我们将详细解析,什么是内核空间,什么是用户空间,以及

如何看待Linux操作系统的用户空间和内核空间

作为中央核心处理单元的CPU,除了生产工艺的不断革新进步外,在处理数据和响应速度方面也需要有权衡.稍有微机原理基础的人都知道Intel X86体系的CPU提供了四种特权模式ring0~ring3,其中ring0特权最高,ring3的特权最低,之所以要做这样的区分一个主要目的是保护资源,通俗来讲要保护的资源无非就是"内存.I/O端口以及执行特殊机器指令的能力".任何一个时刻,x86 CPU都是在一定的特权模式下运行.同样,对于ARM体系的CPU 一共有七种运行模式,分别是:用户模式(us

unix-如何将linux用户空间的一段已分配内存映射到内核空间

问题描述 如何将linux用户空间的一段已分配内存映射到内核空间 如何将linux用户空间的一段内存(已分配)映射到内核空间,使得在内核访问用户时不用复制数据而直接访问数据 请问能不能给出具体的代码演示功能的实现呢? 万分感谢大家!!!! 解决方案 mmap 你可以百度一下 Linux mmap. http://blog.csdn.net/angelbosj/article/details/8272887

内核空间与用户空间可以有同名的函数吗?

 内核空间与用户空间可以有同名的函数吗?   笔者最近在调试一款加密芯片DS28E01时,发现在内核中的加密芯片驱动里有一个READROMID的函数,此函数是用于读取芯片内部的ROM ID,为了验证调试的方便,故将此函数接口留在内核的驱动模块中,但是在应用的加密芯片代码里,也是要读ROM ID,并且读取的接口函数一模一样,参数都一样,这造成在机器启动时验证软件有效性时不成功.发现在读ROM ID时,首先执行了内核的那个函数接口内容,接着又执行了应用层的接口.这种问题很难发现,幸好函数内部都有打印