写点什么

工程师们在“摔倒”后如何不尴尬

  • 2019-11-28
  • 本文字数:2272 字

    阅读完需:约 7 分钟

工程师们在“摔倒”后如何不尴尬

这两天被上海维密秀的奚梦瑶摔倒事件刷屏,其实可怕的不是模特界资深的她在众目睽睽之下摔倒,而是在技术界高级的你对专业知识体系的匮乏,和面对疑问而回答不上来时的尴尬。今天就为大家补习一下关于 linux 系统内核方面的基础知识,巩固知识体系。

介绍

在我们平时和 linux 的日常工作中,经常会看到用户空间与内核空间及进程上下文与中断上下文。看着很熟悉,半天又说不出到底是怎么回事,有什么区别。看书过程经常感觉到被欺骗,似懂非懂的感觉,很是不爽,今天就来为大家加深一下对它的理解,从此摆脱对它的“尴尬症”。

用户空间与内核空间

操作系统都是采用虚拟存储器,那么对 32 位操作系统而言,它的寻址空间(虚拟存储空间)为 4G(2 的 32 次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核,从而保护内核的安全,操作系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。


内核空间:针对 linux 操作系统而言,将最高的 1G 字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF),供内核使用,称为内核空间。

用户空间:将较低的 3G 字节(从虚拟地址 0x00000000 到 0xBFFFFFFF)供各个进程使用,称为用户空间。


每个进程可以通过系统调用进入内核,因此,Linux 内核与系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有 4G 字节的虚拟空间。空间分配如下图所示:



有了用户空间和内核空间,整个 linux 内部结构可以分为三部分,从最底层到最上层依次是:硬件–>内核空间–>用户空间。如下图所示:



需要注意的细节问题:

1.内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟空间中。

2.Linux 使用两级保护机制:0 级供内核使用,3 级供用户程序使用。


内核态与用户态:


  1. 当一个任务(进程)执行系统调用而陷入内核代码中执行时,称进程处于内核运行态(内核态)。此时处理器处于特权级最高的(0 级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。

  2. 当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。此时处理器在特权级最低的(3 级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈。

进程上下文与中断上下文

什么是进程上下文?


《linux 内核设计与实现》书中进程管理的章节对进程上下文有介绍到,书中说当一个程序执行了系统调用或者触发某个异常(软中断),此时就会陷入内核空间,内核此时代表进程执行,并处于进程上下文中。为了更好的加深理解,总结如下:


程序在执行过程中通常有用户态和内核态两种状态,CPU 对处于内核态根据上下文环境进一步细分,因此有了下面三种状态:


  • 内核态,运行于进程上下文,内核代表进程运行于内核空间。

  • 内核态,运行于中断上下文,内核代表硬件运行于内核空间。

  • 用户态,运行于用户空间。


上下文 context: 上下文简单说来就是一个环境。


用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存 器值、变量等。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。


相对于进程而言,就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。


  1. 用户级上下文: 正文、数据、用户堆栈以及共享存储区;

  2. 寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);

  3. 系统级上下文: 进程控制块 task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。


当发生进程调度时,进行进程切换就是上下文切换(context switch).操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的模式切换(mode switch)。模式切换与进程切换比较起来,容易很多,而且节省时间,因为模式切换最主要的任务只是切换进程寄存器上下文的切换。


什么是中断上下文?


硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。中断时,内核不代表任何进程运行,它一般只访问系统空间,而不会访问进程空间,内核在中断上下文中执行时一般不会阻塞。

总结

当一个进程在执行时,CPU 的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。


当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够得到切换时的状态执行下去。


在 LINUX 中,当前进程上下文均保存在进程的任务数据结构中。在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程的执行。


耐心的品味一下这篇文章,多读几遍,相信你的专业知识体系会有一定的提高!


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/mw_oxmzGz2dK-o8VVwxtCQ


2019-11-28 16:43973

评论

发布
暂无评论
发现更多内容

如何学习ABAQUS有限元仿真分析软件

思茂信息

abaqus abaqus软件 abaqus有限元仿真 有限元分析 有限元仿真

区块链第一代系统——比特币概念及业务流程

TiAmo

比特币 区块链

私有化的即时通讯软件能给企业带来什么好处?

BeeWorks

虚拟平台中的“有意”/“无意”故障注入

DevOps和数字孪生

故障注入 虚拟平台

大语言模型评估全解:评估流程、评估方法及常见问题

Baihai IDP

人工智能 白海科技 LLMOps 大模型评估 企业号 7 月 PK 榜

如何使用openEuler WSL sideload

openEuler

Linux 前端 操作系统 wsl openEuler

龙蜥社区首次突破!高性能存储 SIG 现身 LSF/MM/BPF 2023 分享 EROFS 的演进路线

OpenAnolis小助手

开源 高性能存储 龙蜥社区 sig EROFS

火山引擎DataLeap如何解决SLA治理难题(一):应用场景与核心概念介绍

字节跳动数据平台

数据中台 数据治理 SLA 数据研发 企业号 7 月 PK 榜

联通 Flink 实时计算平台化运维实践

Apache Flink

大数据 flink 实时计算

华为云云原生数据库,让企业离应用更进一步

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

MobPush:Android客户端SDK厂商通道回执配置指南

MobTech袤博科技

程序员 前端 sdk 客户端开发 Andrdoid

Leangoo领歌敏捷工具提供哪些Scrum敏捷培训?

顿顿顿

敏捷开发 敏捷开发管理工具 scrum工具 scrum培训 敏捷培训

Flink 在新能源场站运维的应用

Apache Flink

大数据 flink 实时计算

当代数据库与数据管理技术的先驱者之一 Mohan 教授指导 IoTDB 时序数据库 Timecho 研发团队

Apache IoTDB

IoTDB Apache IoTDB

火山引擎A/B测试“广告投放实验”基础能力重构实践 (DataFunTalk渠道)

字节跳动数据平台

带你掌握利用Terraform不同数据源扩展应用场景

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 7 月 PK 榜

虚拟ECU实践:汽车发动机控制器仿真

DevOps和数字孪生

软件定义汽车 虚拟ECU

常用语言的线程模型(Java、go、C++、python3) | 京东云技术团队

京东科技开发者

Java c++ Go 线程模型 企业号 7 月 PK 榜

基于ClickHouse解决活动海量数据问题 | 京东云技术团队

京东科技开发者

数据库 Clickhouse 数据处理 企业号 7 月 PK 榜

河南理工大学高校专区入驻飞桨AI Studio,优质教育资源等你来学!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

虚拟ECU:助力汽车故障诊断

DevOps和数字孪生

软件定义汽车 虚拟ECU

运输车辆超时停车预警难?TDengine 流式计算助力吉科软轻松解决

爱倒腾的程序员

数据库

WorkPlus AI助理:结合ChatGPT对话能力与企业数据,助力企业级AI构建!

BeeWorks

IPD(集成产品开发)跟敏捷、DevOps一样吗?有什么区别?

禅道项目管理

DevOps 敏捷开发 IPD

Seal AppManager如何基于Terraform简化基础设施管理

SEAL安全

Kubernetes Terraform 平台工程 SealAppManager 企业号 7 月 PK 榜

什么是“软件定义汽车”

DevOps和数字孪生

软件定义汽车 汽车仿真

关于 Elasticsearch 不同分片设置的压测报告

极限实验室

索引 压测 ES

手机直播app源码部署搭建:带货潮流,商城功能!——山东布谷科技创作

山东布谷科技

软件开发 直播 源码搭建 直播APP源码 手机直播源码

工程师们在“摔倒”后如何不尴尬_文化 & 方法_Anker_InfoQ精选文章