lv13 内核与用户空间

一、内核空间和用户空间

为了彻底解决一个应用程序出错不影响系统和其它app的运行,操作系统给每个app一个独立的假想的地址空间,这个假想的地址空间被称为虚拟地址空间(也叫逻辑地址),操作系统也占用其中固定的一部分,32位Linux的虚拟地址空间大小为4G,并将其划分两部分:

  1. 0~3G 用户空间 :每个应用程序只能使用自己的这份虚拟地址空间

  2. 3G~4G 内核空间:内核使用的虚拟地址空间,应用程序不能直接使用这份地址空间,但可以通过一些系统调用函数与其中的某些空间进行数据通信

实际内存操作时,需要将虚拟地址映射到实际内存的物理地址,然后才进行实际的内存读写

二、执行流

执行流:有开始有结束总体顺序执行的一段独立代码,又被称为代码上下文

计算机系统中的执行流的分类:

执行流:

  1. 任务流--任务上下文(都参与CPU时间片轮转,都有任务五状态:就绪态 运行态 睡眠态 僵死态 暂停态)

    1. 进程

    2. 线程

      1. 内核线程:内核创建的线程

      2. 应用线程:应用进程创建的线程

  2. 异常流--异常上下文

    1. 中断

    2. 其它异常

应用编程可能涉及到的执行流:

  1. 进程

  2. 线程

内核编程可能涉及到的执行流:

  1. 应用程序自身代码运行在用户空间,处于用户态 ----------------- 用户态app

  2. 应用程序正在调用系统调用函数,运行在内核空间,处于内核态,即代码是内核代码但处于应用执行流(即属于一个应用进程或应用线程) ---- 内核态app

  3. 一直运行于内核空间,处于内核态,属于内核内的任务上下文 --------- 内核线程

  4. 一直运行于内核空间,处于内核态,专门用来处理各种异常 --------- 异常上下文

三、模块编程与应用编程的比较

不同点内核模块应用程序
API来源不能使用任何库函数各种库函数均可以使用
运行空间内核空间(3-4G)用户空间(0-3G)
运行权限特权模式运行非特权模式运行
编译方式静态编译进内核镜像或编译特殊的ko文件elf格式的应用程序可执行文件
运行方式模块中的函数在需要时被动调用从main开始顺序执行
入口函数init_modulemain
退出方式cleanup_modulemain函数返回或调用exit
浮点支持一般不涉及浮点运算,因此printk不支持浮点数据支持浮点运算,printf可以打印浮点数据
并发考虑需要考虑多种执行流并发的竞态情况只需考虑多任务并行的竞态
程序出错可能会导致整个系统崩溃只会让自己崩溃

四、内核接口头文件查询

大部分API函数包含的头文件在include/linux目录下,因此:

  1. 首先在include/linux 查询指定函数:grep 名称 ./ -r -n

  2. 找不到则更大范围的include目录下查询,命令同上

示例:

五、练习

什么是内核空间什么是用户空间 他们之间怎么传递的?

 

0~3G 用户空间 :每个应用程序只能使用自己的这份虚拟地址空间。非特权模式运行
3G~4G 内核空间:内核使用的虚拟地址空间,应用程序不能直接使用这份地址空间。特权模式运行

内核空间和用户空间之间进行数据传递,可以通过一些系统调用函数与其中的某些空间进行数据通信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/310660.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何修改Anaconda的Jupyter notebook的默认启动路径

1.打开Anaconda控制台 2.输入下面的命令 jupyter notebook --generate-config 这个命令的作用是生成 Jupyter notebook 的配置文件。如果你是第一次运行,会直接生成这个文件。如果曾经运行过这个命令,就会像下图一样问你时候要覆盖原来的文件。这个时候…

Python集成开发工具

第二章、IDE(PyCharm) 一、设置py文件模板 设置模版 二、格式化代码设置 三、PyCharm运行python源文件的模式 第一次按照何种模式执行测试用例,后续都会按照这种方式去执行 普通模式,unittest模式,pytest模式介绍 四…

4.31 构建onnx结构模型-Tile

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Tile 结点进行分析 方式 方法一…

可运营的虚拟物品发卡服务的平台,卡密寄售系统,支持自营和商家入驻模式

源码介绍 发卡宝是一个专门为数码卡和虚拟物品发卡服务的平台。我们整合了各种虚拟商品,为卖家提供快捷便利的销售工具,为买家提供可靠安全的购买渠道。卖家可以轻松管理库存、自定义价格和折扣、快速发货,并实时获得销售记录和分析。买家可…

2024主流的免费电脑数据恢复软件EasyRecovery

EasyRecovery绿色版是一款非常专业的电脑数据恢复工具。它可以全面恢复删除丢失数据,能对电脑误删文件恢复、格式化硬盘数据恢复、手机U盘数据恢复等,能恢复包括文档、表格、图片、音视频等各种文件,此版本经过处理,可永久免费使用…

【文生图系列】 Stable Diffusion v1复现教程

文章目录 Stable Diffusion v1环境配置权重下载txt2imgbug超参数 Diffusers 参考 Stable Diffusion v1 stable diffusion是一个潜在的文本到图像的扩散模型,能够在给定任何文本输入的情况下生成照片逼真的图像。 环境配置 https://github.com/CompVis/stable-diff…

阿里云 ACK 云上大规模 Kubernetes 集群高可靠性保障实战

作者:贤维 马建波 古九 五花 刘佳旭 引言 2023 年 7 月,阿里云容器服务 ACK 成为首批通过中国信通院“云服务稳定运行能力-容器集群稳定性”评估的产品, 并荣获“先进级”认证。随着 ACK 在生产环境中的采用率越来越高,稳定性保…

NFS的基本使用

#江南的江 #每日鸡汤:岁月匆匆,时光荏苒,感悟人生路漫漫,不忘初心方得始终。 #初心和目标:和从前的自己博弈。 NFS(存储共享服务) 本文要点摘要: 下面将讨论什么是NFS,如何配置NFS,…

Spring Boot快速搭建一个简易商城项目【完成登录功能且优化】

完成登录且优化: 未优化做简单的判断: 全部异常抓捕 优化:返回的是json的格式 BusinessException:所有的错误放到这个容器中,全局异常从这个类中调用 BusinessException: package com.lya.lyaspshop.exce…

基于metersphere和supper-jacoco 测试覆盖率落地实践

一、背景及目标 背景 1、技术研发流程为测试 提供冒烟用例-开发根据用例自测-提测-开始测试,这一套流程,但是中间开发是否真实执行冒烟,测试并不知晓,而且测试提供冒烟用例是否符合标准也没法进行量化 2、公司产品属于saas产品&…

一.windows2012搭建fpt服务器和常见端口介绍

一.windows2012搭建fpt服务器和常见端口介绍 1.打开防火墙2.创建组2.1打开计算机管理2.2创建组并且设置名称和描述 3.创建用户3.1设置用户密码和名称3.2把用户归属于组3.3把user删除掉3.4点击添加然后点高级3.5点击立即查找选择之前设定的组 4.安装ftp服务器4.1点击添加角色和功…

springBoot2.3-基本介绍及入门案例

本次学习雷丰阳springBoot(2.3版本)。建议先修ssm 一、SpringBoot基本介绍 springBoot是当今最为流行的java开发框架。 1、springBoot的底层是spring, 因此继承了spring的粘合其他框架的能力。 2、本质上还是其他框架包括spring在工作 , springBoot起到一个整合其他…