当前位置: 首页 > news >正文

正规品牌网站设计推荐网站提交链接入口

正规品牌网站设计推荐,网站提交链接入口,游戏币网站建设,全国信用企业公示系统目录 信号的处理时机 引入 思考 -- 什么时候才能算合适的时候呢? 用户态转为内核态 引入 内核地址空间 引入 思考 -- 进程为什么能切换成内核态呢? 虚拟地址空间 注意点 原理 (总结一下) 为什么如何进入内核态 引入 介绍 底层原理(int 80) cpu的寄存器 用…

目录

信号的处理时机

引入

思考 -- 什么时候才能算合适的时候呢?

用户态转为内核态

引入

内核地址空间 

引入

思考 -- 进程为什么能切换成内核态呢?

虚拟地址空间

注意点

原理 (总结一下)

为什么+如何进入内核态 

引入

介绍

底层原理(int 80) 

cpu的寄存器

用户级

内核级

如何知道进入了内核态

硬件上

软件上

用户态和内核态的来回切换 

为什么

如何切换

信号的处理流程 

介绍

详细图解

描述 

默认操作

忽略操作

自定义操作

抽象图解 

交叉点处

方向

横线


信号的处理时机

引入

  • 之前我们说过,信号被os发送到进程,实际上是修改了pending信号集
  • 然后进程会在合适的时候处理
  • 那究竟什么时候才能算合适的时候呢?

思考 -- 什么时候才能算合适的时候呢?

  • 处理信号必然不是我们做的,而是os,因为信号是内核数据
  • 那么处理信号时,就得处于内核的范畴,不然怎么访问os的数据
  • 也就是处于内核态
  • 那么肯定也会存在用户态,和内核态对应,也就存在内核态和用户态的切换
  • 那么内核态就拥有三种阶段 -- 刚进入内核态,在内核态执行任务时,准备转为用户态时

那么是哪个阶段开始处理信号的呢?

  • 一般是在执行完任务后,内核态准备转为用户态时,会进行信号的处理
  • (因为任务肯定第一位嘛,信号的处理又不急于这一时)

用户态转为内核态

引入

  • 虽然我们是这样说的 -- 由内核态转为用户态时,就会处理信号
  • 但是这个操作我们看不到,怎么知道到底有没有转换呢?
  • 说到底,究竟是怎么转换的呢?未免有点太抽象了

内核地址空间 

引入
  • 其实并不抽象,所有看起来复杂的行为都是将[底层一些简单的操作]封装而成的
  • 比如,可以首先来思考这个问题 -- 进程为什么能切换成内核态呢?
思考 -- 进程为什么能切换成内核态呢?
  • 内核态,也就是可以使用os内部的数据/接口

那为什么一个进程,它可以有这样的行为呢?

  • 肯定是它此时的权限修改成了os的权限

如何使用os内部的数据/接口呢?

  • 要使用这些,必然是和使用普通数据/接口一样,访问实际的内存
  • 毕竟他们本质没有区别,只是权限不一样
  • 而访问内存必须通过虚拟地址空间+页表+MMU实现
  • 我们无法直接操作物理内存!!
  • 既然可以访问内核数据,那内核肯定也有自己的进程空间+页表

那到底有没有呢?

  • 有的!
虚拟地址空间
  • 之前学习的地址空间中本身就有1G的空间,是存放内核空间的: 
  • 也就是说,我们切换为内核态,依赖的是 -- 进程地址空间有内核空间
注意点

既然有内核空间,自然也有内核级的页表用来映射

但是要注意!!!

每个进程的用户空间,对应的是独立的内存块

难道每个进程拥有的内核空间,它对应的内存也是独立的吗?

  • 不会的!
  • 内核资源是所有进程共用的,不会让每个进程去瓜分一部分
  • [进程的独立性]要求用户空间对应的内存都是独立的,但每个进程可以使用相同的os资源
  • 所以,内核级的页表只需要一份(因为对应的物理内存是同一块),它可以被所有进程看到
  • 所以,无论进程如何切换,我们看到的都是同一份os资源
原理 (总结一下)
  • 进程可以切换为内核态的原因就在于,每个进程中都有内核地址空间
  • 只要切换访问位置和访问权限,自然可以通过内核地址空间访问内核数据噜

为什么+如何进入内核态 

引入

知道了进程是可以切换的

那么究竟为什么要切换成内核态,底层又是如何切换的呢?

介绍
  • 当我们需要访问内核数据时,就需要进入内核态

  • 我们大多都是通过系统调用接口,来使用内核数据的
  • 所以,调用系统调用,自动就可以进入内核态(因为之前在使用的时候,并没有什么特殊行为)

  • 并且,我们不用把系统调用想的那么神秘,他也只是一个函数而已(只不过非常接近底层)
  • 系统调用和使用库函数本质上没有区别,都是在进程自己的地址空间内进行跳转

 

底层原理(int 80) 
  • 在每个系统调用函数开始前,都需要先切换成内核态
  • 它通过int(interrupt 的缩写) 80 这个汇编指令,来切换成内核态
  • 汇编的底层是通过cpu的寄存器实现的
cpu的寄存器

实际上存在两套寄存器,用户级的和内核级的

用户级
  • 实际上,我们将[平时写的简单代码]转换为汇编指令,里面用到的eax等等,就是用户级的寄存器
内核级
  • 存放与权限/控制相关数据的寄存器,我们看不见
  • 内核级寄存器里面有一个CR3
  • 它用来表示当前cpu的访问权限 -- 内核/用户
  • 所以实际上int 80汇编指令,就是通过修改CR3寄存器的数据,来进入内核态

 

如何知道进入了内核态

硬件上

通过CR3寄存器的数据得知的(寄存器是硬件的一部分)

软件上
  • 其实我们已经在上面介绍了,只要检测执行的位置是否指向内核空间即可
  • 指向内核空间,就说明此时正在执行系统级别的代码,此时也就处于内核态

 

用户态和内核态的来回切换 

为什么

总不能从用户态切到内核态后,我们就不切回来了吧

我们肯定还有很多没有执行的用户级代码呢

如何切换

  • 其实原理我们已经都介绍过了
  • 只要我们可以拿到进程执行相关的数据,我们也就可以按照上面的原理 -- 跳转地址空间,修改寄存器数据,来切换状态
  • (当然这里只是一个大概,实际上非常复杂的)
  • 刚好cpu的寄存器里面,就存放着很多进程执行相关的数据结构的指针(也就是进程的上下文)

信号的处理流程 

知道了原理后,我们就可以明白,os究竟是如何处理信号的

介绍

详细图解

描述 

  • 首先我们要先陷入内核态(可能是系统调用,也可能是异常/中断导致的)
  • 然后在内核态下,os完成一系列的任务
  • 在即将返回用户态,继续向下执行代码前,我们正好处于内核态下,有能力,可以顺手处理收到的信号
  • 所以,os开始处理信号!

  • os先去检查信号在内核中的两种信号集 -- pending,block
  • 如果该信号被阻塞,os可以直接返回到用户态
  • 如果满足条件,我们拿到对应信号的处理函数后
  • 这里就要分情况讨论了:
默认操作
  • 如果需要终止进程,os可以直接进行终止进程的调度
  • 如果该进程中有需要刷新数据/dump到外设,os在内核态下可以直接操作,操作完再退出进程
  • 如果该进程不退出,也是一样的:
  • eg:有个信号用来暂停进程,也可以在内核态下直接实现,直接修改进程状态,然后调度下一个进程
忽略操作
  • 如果是忽略,os只需要将pending信号集由1改为0,即可返回到用户态,执行下面的代码噜
自定义操作
  • 如果是自定义的操作,就有点麻烦了
  • 因为默认和忽略都可以在内核态下直接完成,因为os的权限是最大的,什么资源都可以拿到
  • 但是在执行自定义函数时,需要转换到用户态才行

为什么要转换到用户态呢?内核态下不能执行吗?

  • 内核态当然可以执行进程的代码,它可以拿到所有的资源
  • 但是,万一该函数中有违规操作(用户态下不可以执行的操作)
  • 却没有被内核态下的进程识别到,就可能会导致不好的后果
  • 为了避免这些情况,普通代码还是让用户态进程执行的好

在用户态下执行完成后,也就该返回内核态

  • 不仅是因为,处理完信号后,需要修改pending位图
  • 也在于,进程需要返回到陷入内核态的执行位置,然后继续向下执行
  • 而这些操作都需要访问os资源

抽象图解 

信号处理过程 -- 从信号需要从用户态陷入到内核态 -> 处理完信号,返回原先的执行位置 抽象出来,得到该图:

交叉点处

就是os开始处理信号的时候

方向

图中的箭头,就是os执行流的变化方向

横线
  • 如果用一条横线贯穿该图,那么横线上方就是用户态,下方就是内核态
  • (可以看到信号处理的时候是在内核态中)
  • 横线与图的四个交点就可以代表,进程的状态变化次数
  • 交点所在的方向,就代表了状态的切换方向
http://www.hrbkazy.com/news/48249.html

相关文章:

  • 做美女网站犯法吗2023年新冠疫情最新消息
  • 网站建设哪家有精准防恶意点击软件
  • 购物网站二级页面模板外贸订单怎样去寻找
  • 网站 建设网片
  • 申报湖南创新型省份建设专项网站上海优化seo排名
  • 外贸网站教程网站推广网站
  • 手机手机端网站建设个人网站免费推广
  • 网站后台管理员扫描市场营销策划
  • 浦口做网站价格360竞价推广客服电话
  • 做网站视频教程鹤壁网站推广公司
  • 怎么做网站给国外看见网络广告营销经典案例
  • 自己做网站咋做自媒体seo是什么意思
  • 网页设计的特点有哪些长沙网站优化推广
  • 做西点的网站游戏代理加盟平台
  • 田阳县建设局网站一个具体网站的seo优化方案
  • 如何修改网站域名google关键词搜索量
  • 网站建设设计咨询新乡网络推广外包
  • 办文明网站做文明网民活动方案营销策略有哪些方面
  • 建站网络建立科技开发怎么提高seo关键词排名
  • 萧山工程建设有限公司网站新品推广活动方案
  • php 个人网站建立网站的详细步骤
  • 做别人的网站诈骗视频下载怎么制作seo搜索优化
  • 中国林业建设协会网站关键词汇总
  • 日照住房和城乡建设局网站seo网址大全
  • 用axure怎么做h5网站网站批量收录
  • 美甲网站自适应源码泰安seo网络公司
  • 开锁在百度上做网站要钱吗深圳网站关键词优化公司
  • 七星彩投注网站建设安装百度一下
  • 做网站前产品经理要了解什么什么是优化
  • 久久建筑网会员登陆aso优化分析