内核态与用户态的转换

概念

  • 操作系统 - 管理计算机硬件与软件资源的软件.是用户与系统交互的操作接口.为它上面运行的程序提供服务.
  • 操作系统内核 - 操作系统的核心.负责管理系统的进程.内存.设备驱动程序.文件和网络系统.一个内核不是一套完整的操作系统.如Linux.
  • Linux操作系统 - 基于Linux 内核的操作系统.通常由Linux内核.shell(特殊的应用程序.提供运行其他程序的接口).文件系统和应用程序.

Linux体系结构

在这里插入图片描述

Linux 的运行空间 = 内核空间 + 用户空间

  • 内核空间 - 存放的是整个内核代码和所有内核模块.以及内核所维护的数据.
  • 用户空间 - 用户程序的代码和数据.

由上图可知.用户态的应用程序可以通过三种方式来访问内核态资源:

  1. shell
  2. 系统调用
  3. 公用函数库

Linux系统调用

操作系统提供给用户程序调用系统服务(硬件设备)的一组"特殊"接口.
在这里插入图片描述

为什么要设置系统调用:

  • 把用户从底层的硬件编程中解放出来:
    与具体的硬件完全隔离.用户不需要面向具体的硬件编码.降低了开发的复杂性和难度.
  • 极大的提高了系统的安全性:
    将用户进程隔离实现内核"保护".用户进程不允许访问内核数据.也无法使用内核函数.用户访问内核的路径是事先规定好的.只能从规定位置进入内核.而不准许肆意跳入内核.有了这样的陷入内核的统一访问路径限制才能保证内核安全无误.
  • 使用户程序具有可移植性:
    不同平台不同硬件

系统调用号与系统调用表

系统调用号:
每个系统调用被赋予一个系统调用号.与具体的系统调用相关联.且预先在系统文件中定义.用响应的宏表示.
在这里插入图片描述
系统调用表:
内核维护系统调用表.保存系统调用函数的起始地址.系统调用号对应系统调用在调用表中的偏移量.
在这里插入图片描述

如何切换

从用户态到内核态切换可以通过三种方式:

  1. 系统调用:用户态进程主动切换到内核态的方式.用户态进程通过系统调用申请使用操作系统的提供的程序完成操作.系统调用本身就是中断.
  2. 异常:当CPU在执行运行在用户态下的程序时.发生了某些事先不可知的异常.这时会触发由当前运行进程切换到处理此异常的内核相关程序中.也就转到了内核态.比如缺页异常.
  3. 外设中断:当外设完成用户的请求时.会向CPU发送中断信号.
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值