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

转载 2017年11月23日 00:00:00


女主宣言


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

PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!


介绍

在我们平时和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对处于内核态根据上下文环境进一步细分,因此有了下面三种状态:

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

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

  3. 用户态,运行于用户空间。


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

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


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

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

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

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


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


什么是中断上下文?

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


总结

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

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

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


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


扫描下方
二维码
了解更多内容

Kafka 源码分析之网络层(二)

上一篇介绍了概述和网络层模型实现《Kafka 源码分析之网络层(一)》,本编主要介绍在Processor中使用的nio selector的又一封装,负责具体数据的接收和发送。 PS:丰富的一线技...
  • ZVAyIVqt0UFji
  • ZVAyIVqt0UFji
  • 2017年10月26日 00:00
  • 73

MIMO技术杂谈(二):犹抱琵琶半遮面--MIMO信道中隐藏的秘密

犹抱琵琶半遮面--MIMO信道中隐藏的秘密          http://bbs.c114.net/thread-668750-1-1.html         无线通信中,最让人难以捉...
  • jxwxg
  • jxwxg
  • 2017年08月02日 11:09
  • 686

Google 的运维人员如何进行问题排查?

该文是《Google运维解密》系列的关于问题排查的一篇分享。该文章主要是和大家聊了聊日常运维问题排查时候的一些原则与心得。希望该文章能给大家日常问题的排查能有个更好的启发。前言今天我们来聊聊“问题排查...
  • Mes8Y62b6ogV207
  • Mes8Y62b6ogV207
  • 2018年01月12日 00:00
  • 99

MIMO技术杂谈(三):知己知彼,百战不殆--信道信息的获取和应用

经典MIMO原理介绍,原文地址:http://bbs.c114.net/thread-671320-1-1.html 由于前一阵太忙,隔了这么久才更新第三篇,实在抱歉!之间还不小心还...
  • jxwxg
  • jxwxg
  • 2017年08月02日 11:12
  • 732

[转载]MIMO技术杂谈(四):OFDM那些事(未完待续)

OFDM那些事 在动笔之前,笔者百度了一下OFDM的定义。在百度百科中,找到了如下描述: “OFDM(Orthogonal Frequency Division Multiplexing)...
  • qq_14985223
  • qq_14985223
  • 2015年10月19日 10:05
  • 1212

我的第一款 Drone 插件

女主宣言本文的作者为奇舞团前端工程师怡红公子,他是高人气开源博客平台 Firekylin (over 1.2k Stars) 的作者,今天他分享的是基于 Nodejs 编写一个 Telegram 消息...
  • ZVAyIVqt0UFji
  • ZVAyIVqt0UFji
  • 2018年01月16日 00:00
  • 16

想学好技术,不要做一个浮躁的人,请记住以下几点

浮躁的人容易问:我到底该学什么----别问,学就对了;  浮躁的人容易问:Java有钱途吗;----建议你去抢银行;  浮躁的人容易说:我要中文版!我英文不行!----不行?学呀!  ...
  • hbjae28666
  • hbjae28666
  • 2014年08月25日 22:06
  • 284

《转》MIMO技术杂谈(二):犹抱琵琶半遮面--MIMO信道中隐藏的秘密

转自:http://bbs.c114.net/thread-668750-1-1.html     无线通信中,最让人难以捉摸的,就是那看不见,摸不着的无线信道了。但是,正因为它的变化莫测,才让无线通...
  • fzxy002763
  • fzxy002763
  • 2016年10月29日 23:31
  • 1444
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:工程师们在"摔倒"后如何不尴尬
举报原因:
原因补充:

(最多只允许输入30个字)