区别

用户态:供应用程序运行的空间,只能受限制地访问内存

内核态:控制计算机的硬件资源,例如协调CPU资源,分配内存资源,并且提供稳定的环境


为什么要划分

1. 安全性
给不同的操作给与不同的“权限”。有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果允许所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加。

2. 稳定性
隔离了操作系统代码与应用程序代码。即便是单个应用程序出现错误也不会影响到操作系统的稳定性,其它的程序还可以正常的运行。


如何从用户态进入内核态

1. 系统调用

系统调用的实现(2种)
1) 中断方式
在 Linux 的实现中,所有的系统调用共用 128 号中断,对应中断处理程序是 system_call。system_call 会根据 EAX (某个寄存器) 传入的系统调用标号跳转并执行相应的系统调用程序。函数执行完成之后,会把结果放到 EAX 中返回给应用程序。
2) SYSENTER 指令
中断方式很多过程都是固定的,如查找中断处理程序入口等,过于冗余。为了省去这些多余的检查,Intel 在 Pentium II CPU 中加入了新的 SYSENTER 指令,专门用来执行系统调用。

系统调用的使用(2种)
1) glibc 
glibc 是 Linux 下使用的开源的标准 C 库。例如C库接口malloc申请动态内存,malloc的实现内部最终还是会调用 brk() 或者 mmap() 系统调用来分配内存。
补充: brk() / mmap()
共同点:分配的都是虚拟内存,在第一次访问分配的虚拟地址空间的时候,发生缺页中断,操作系统分配物理内存,建立映射关系。
不同点:brk是从堆下方连续分配内存(128k以内),mmap是堆和栈中间分配某一块内存(128k以上)

2) syscall 
系统调用函数,包含在#include <unistd.h>下。列一些常用的:
int access(const char *pathname, int mode); // 检查用户对文件的权限
int brk(void *addr); // 更改程序中断的位置,增加程序中断的次数会给进程分配内存;减少中断会释放内存。
int dup(int oldfd); // 复制文件描述符
int execve(const char *pathname, char *const argv[], char *const envp[]); // 替换当前进程的用户空间,从而执行一个新程序的代码
pid_t fork(void); // 创建进程
int ioctl(int fd, unsigned long request, ...); // io设备控制,可以设置io设备的参数
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); // 映射或者解除映射一个文件/设备到内存
int stat(const char *restrict pathname, struct stat *restrict statbuf); // 获取文件信息
long syscall(long number, ...); // 是一个小型库函数,它调用系统调用,系统调用的汇编语言接口具有带有指定参数的指定编号。例如,在调用C库中没有包装器函数的系统调用时,使用syscall()是有用的。

2. 中断

过程:关中断-保存断点-中断服务程序寻址-保存现场-开中断-执行中断服务程序-关中断-恢复现场-开中断-中断返回

中断的时机:每条指令的结束检查是否有中断

感觉中断没啥好写的。。待续吧

Linux | 用户态与内核态详解相关推荐

  1. Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度(二十)

    日期 内核版本 架构 作者 GitHub CSDN 2016-07-01 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 ...

  2. linux用户和组的管理详解

    Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 作者博客:https://www.920vip.net ...

  3. Linux系统编程33:进程信号之详解信号的捕捉过程,用户态和内核态及其切换,sigaction和signal

    文章目录 (1)用户态和内核态 (2)用户态和内核态的切换 (3)内核是如何实现信号的捕捉 (4)sigaction (1)用户态和内核态 我们说过,每个Linux进程有4GB的地址空间 其中0-3G ...

  4. 用户态与内核态之间切换详解

    用户空间和内核空间 用户程序有用户态和内核态两种状态.用户态就是执行在用户空间中,不能直接执行系统调用.必须先切换到内核态,也就是系统调用的相关数据信息必须存储在内核空间中,然后执行系统调用. 操作硬 ...

  5. Linux用户态与内核态通信的几种方式(待完善)

    文章目录 1. 内核启动参数 2.模块参数与sysfs 3.sysctl 4.系统调用 5.netlink 6. procfs(/proc) 7.seq_file 8.debugfs 9.relayf ...

  6. java运行在用户态_理解Linux用户态和内核态

    Linux整体架构图 我们先来看一张Linux整体架构图. 系统调用 ​ 系统调用时操作系统的最小功能单位.根据不同的应用场景,不同的Linux发行版本提供的系统调用数量也不尽相同,大致在240-35 ...

  7. Linux用户态和内核态

    究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子: 1)例 ...

  8. linux 用户态与内核态通信方式简介

    我们平常在写代码时,一般是在用户空间,通过系统调用函数来访问内核空间,这是最常用的一种用户态和内核态通信的方式.(关于 Linux 用户态和内核态可以参考 xx) 除此之外,还有以下四种方式: pro ...

  9. Linux探秘之用户态与内核态

    https://www.cnblogs.com/bakari/p/5520860.html 一. Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核 ...

最新文章

  1. rabbitmq的基本使用
  2. 四位达林顿_ULN2069B - 80 V - 1.5 A四路达林顿开关 - STMicroelectronics
  3. STM32开发 -- CAN总线详解
  4. 设置横坐标刻度_是不是快被Excel的时间刻度逼疯了,教你两招轻松解决
  5. mysql中的if [not] exists
  6. 辽源天气预报软件测试,辽源天气预报15天
  7. ubuntu14.04下 安装matlabR2015b遇到的一些问题及其解决方法
  8. 公司只有1个测试,领导却让我同时操作1000个手机号
  9. httpservletresponse 重定向浏览器不变的原因_JavaWeb——Servlet——请求转发与响应重定向...
  10. 《C》C语言编程实现指定阶“m序列”并通过gnuplot绘图
  11. 无穷级数求和7个公式_Excel Round函数使用方法7个实例,包含保留小数,取整和给公式...
  12. 【python】给excel加密
  13. linux持续测试ip端口延迟,Linux下使用nping测试TCP\UDP延迟
  14. AD19 基础应用技巧(快速定义PCB板框,CAD中DWG转DXF格式导入)
  15. java中play什么意思_Play 框架学习 (二) 介绍Play及基本概念
  16. 1077 互评成绩计算
  17. LCD液晶显示屏工作原理
  18. java 索引数组_Java的数组索引问题
  19. 来自东南亚的极兔被“封杀”,老家还能保住吗?
  20. 深圳云计算培训学习:Apache 访问控制--【千锋】

热门文章

  1. php购物车数量加减代码,购物车商品数量加减效果
  2. android 购物车加减列表,Android 购物车加减功能的实现代码
  3. pid控制入门笔记(1)
  4. 在设计支付系统是应该要注意
  5. CAD下载完成之后想更大限度提高效率?这七个工具组合大有用处
  6. @2023研考生,网上确认时间来啦!
  7. idea git commit之后,想撤销commit,实操
  8. 基于python网络编程实现支持购物、转账、存取钱、定时计算利息的信用卡系统...
  9. Tomcat配置JDK和JRE
  10. Photoshop CS5画笔初学者必读(14)——历史记录艺术画笔