一、进程理解

进程:资源分配的最小单元,程序在操作系统中运行的实例

线程:最小调度单元

一个进程至少有一个线程或多个线程,一个线程只能属于一个进程,因为进程是最小的资源分配单元,所以线程不存在独立的地址空间,而是多个线程共享进程的独立运行空间,但是线程有自己的栈空间

二、进程空间理解

32位linux的虚拟空间有4G,分为内核空间和用户空间,其中最开始的(3G)0x00000000-0xBFFFFFFF为各个进程使用,也叫用户空间,最高处的(1G)0xC0000000-0xFFFFFFFF作为内核空间供内核使用,Linux内核空间由系统内的所有进程共享。

用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。只有用户进程进行系统调用(代表用户进程在内核态执行)等时刻可以访问到内核空间。

用户空间对应进程,所以每当进程切换,用户空间就会跟着变化

内核空间是由内核负责映射,它并不会跟着进程变化,是固定的

内核空间地址有自己对应的页表,用户进程各自有不同的页表

从用户态进入到内核态有三种方式:系统调用、软中断和硬件中断

三、用户态内核态的由来

在 CPU 的所有指令中,有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果允许所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加。
所以,CPU 将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通应用程序只能使用那些不会造成灾难的指令。比如 Intel 的 CPU 将特权等级分为 4 个级别:Ring0~Ring3。

其实 Linux 系统只使用了 Ring0 和 Ring3 两个运行级别(Windows 系统也是一样的)。当进程运行在 Ring3 级别时被称为运行在用户态,而运行在 Ring0 级别时被称为运行在内核态。

当进程运行在内核空间时就处于内核态,而进程运行在用户空间时则处于用户态。
在内核态下,进程运行在内核地址空间中,此时 CPU 可以执行任何指令。运行的代码也不受任何的限制,可以自由地访问任何有效地址,也可以直接进行端口的访问。
在用户态下,进程运行在用户地址空间中,被执行的代码要受到 CPU 的诸多检查,它们只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址,且只能对任务状态段(TSS)中 I/O 许可位图(I/O Permission Bitmap)中规定的可访问端口进行直接访问。

通过区分内核空间和用户空间的设计,隔离了操作系统代码与应用程序代码,即便是单个应用程序出现错误也不会影响到操作系统的稳定性,这样其它的程序还可以正常的运行。区分内核空间和用户空间本质上是要提高操作系统的稳定性及可用性。

linux用户空间、内核空间相关推荐

  1. Linux用户与内核空间交互—sysfs

    目录 简介 一.sysfs 1./sys 目录 2.API 3.platform  API 4.创建platform总线设备文件 二.程序源码 简介 用户空间与内核的交互方式,使用copy_from_ ...

  2. Linux用户与内核空间交互—netlink

    目录 简介 一.netlink soket 优点 二.用户空间 1.API 2.编程流程 3.源码 三.内核编程 1.API 2.内核空间编程流程 3.内核源码 简介 用户空间与内核的交互方式,使用c ...

  3. 【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

    文章目录 一.内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 ) 二.Linux 内核架构层次 三.Linux 系统调用接口 一.内存管理架构组成 ( 用户空间 | 内核空间 | MM ...

  4. Linux预备知识(二):进程空间地划分-用户空间/内核空间

    查看机器上栈大小命令 ulimit -a 或者 ulimit -s 大小不固定,可以用 ulimit -s 进行调整,默认一般为 8M ** 栈区(stack sagment)**:由操作系统自动分配 ...

  5. 跟踪 linux 内核调用_Linux用户和内核空间中的动态跟踪

    跟踪 linux 内核调用 您是否曾经遇到过这样的情况,即您意识到没有在代码中的某些点插入调试打印 ,所以现在您将不知道您的CPU是否命中了特定的代码行来执行,直到您重新编译该代码为止.调试语句? 不 ...

  6. linux内核dma内存分配,Linux 4.x 内核空间 DMA 虚拟内存地址

    Architecture: i386 32bit Machine Ubuntu 16.04 Linux version: 4.15.0-39-generic 目录 DMA 虚拟内存区 在 IA32 体 ...

  7. Linux 用户进程内存空间详解

    经常使用top命令了解进程信息,其中包括内存方面的信息.命令top帮助文档是这么解释各个字段的. VIRT , Virtual Image (kb) RES, Resident size (kb) S ...

  8. linux内存非线性映射到文件,Linux 4.x 内核空间 FIXUP 固定映射和临时映射虚拟内存...

    Architecture: i386 32bit Machine Ubuntu 16.04 Linux version: 4.15.0-39-generic 目录 FIXUP 虚拟内存区 在 IA32 ...

  9. linux 用户态 内核态 通信,procfs(从0开始,内核态和用户态通信charpter2)

    这篇博文将针对linux内核态与用户态通信方式中的procfs进行详细的学习. /proc主要存放内核的一些控制信息,所以这些信息大部分的逻辑位置位于内核控制的内存,在/proc下使用ls -l你会发 ...

  10. Linux内核空间和用户空间

    在Linux系统中存在进程的概念: 进程的分类: 用户进程:运行在用户空间的进程被称为用户进程 内核进程:运行在内核空间的进程被称为内核进程 进程的空间: 系统会为每一个进程分0-4G的虚拟寻址空间, ...

最新文章

  1. Centos下安装mysql 总结
  2. Spring 容器的启动过程
  3. 工信部:中国4G基站规模超200万个 4G用户数破5亿
  4. rpm安装mysql图文
  5. wiki----为用户设置管理员权限
  6. C语言函数调用过程的汇编分析(停更)
  7. ctags对部分目录生成tags
  8. 上海交大计算机学院奖学金,上海交通大学-电子信息与电气工程学院-学生工作办公室...
  9. C/C++ 常见编程技巧!你学会了吗?
  10. python解码函数_Python字符串中的两个解码与解码函数详解
  11. 记录HttpWebRequest辅助类
  12. 破解Visio时office失效,激活失败
  13. JSON 的几种简单格式和转换
  14. 你理解大话西游片尾那句“他好像一条狗”吗?
  15. 关于 red bend
  16. Sisvel和RPX签署Wi-Fi标准必要专利许可协议
  17. stm32 驱动ADXL345传感器例程(IIC驱动,可自行改SPI方式)
  18. cad动态块制作翻转_CAD创建动态块实例教程:旋转参数和动作的应用 - CAD自学网...
  19. Altium Designer 导入PCB库
  20. Oracle 公司 OCP认证价位上涨

热门文章

  1. android canvas光晕绘制_Android 绘制发光效果
  2. eclipse汉化出错问题
  3. python回测a股_第20节 A股全市场回测
  4. 投屏为什么显示无法连接服务器,乐播投屏为什么连不上? 乐播投屏无法连接如何解决?...
  5. ios开发有关远程推送的测试版和正式发布版的区别
  6. 虹软-视觉算法-面经(2020届)
  7. 新媒体运营面试如何一开口就让HR给你满分
  8. Stendhal的简单理解
  9. 基于python的微信公众号开发
  10. JavaScript基本概念