博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用户空间和内核空间
阅读量:4125 次
发布时间:2019-05-25

本文共 864 字,大约阅读时间需要 2 分钟。

内核模块和应用程序的对比

应用程序是从头到尾执行单个任务。 模块只是预先注册自己以便服务于将来的某个请求,,模块初始化函数的任务就是为以后调用模块函数预先做准备,就像模块说:“我在这,并且我能做这些工作。”模块的退出函数将在模块被卸载前调用,他告诉内核:“我要离开了,不要再让我做任何事了。”

应用程序在退出时,可以不管资源的释放或其他清除工作,但模块的退出函数必须仔细撤销初始化函数所做的一切。

应用程序可以调用它并未定义的函数,这是因为连接过程能够解析外部引用从而使用适当的函数库。而模块仅仅被链接到内核,因此它能调用的函数仅仅是由内核导出的那些函数,不存在任何可链接的函数库。

应用程序开发过程的段错误是无害的,并且总是可以使用调试器跟踪到源码中的问题所在,而一个内核错误即使不影响整个系统,也至少会杀死当前进程。

内核空间和用户空间

内核运行在最高级别,应用程序运行在最低级别(即用户态),在用户态,处理器控制着对硬件的直接访问以及对内存的非授权访问。

每个模式都有自己的内存映射,也即自己的地址空间。
每当应用程序执行系统调用或被硬件中断挂起,unix将执行模式从用户空间切换到内核空间。执行系统调用的内核代码运行在进程上下文中,它代表调用进程执行操作,因此能够访问进程地址空间的所有数据。

在用户空间编写驱动程序

用户空间驱动程序的优点:

  1. 可以和整个C库链接。
  2. 可以使用通常的调试器调试驱动程序代码,不用费力的调试正在运行的内核。
  3. 用户空间驱动程序被挂起,简单的杀掉就行了。
  4. 和内核内存不同,用户内存可以换出,驱动程序很大但不经常使用,不会占用太多内存。
  5. 良好的驱动程序仍支持对设备的并发访问。

用户空间驱动程序的缺点:

  1. 中断在用户空间不可用。
  2. 只有用过mmap映射/dev/mem才能直接访问内存。
  3. 只有在调用ioperm过iopl后才能访问I/O端口
  4. 响应时间慢。在客户端和硬件直接传递数据需要上下文的切换。
  5. 如果驱动程序被换出到磁盘,响应时间会难以忍受。
  6. 用户空间不能处理非常重要的设备,包括网络接口和块设备。

转载地址:http://okhpi.baihongyu.com/

你可能感兴趣的文章
服务器端技术----Http请求的处理过程
查看>>
C语言-预处理指令2-条件编译
查看>>
C语言-预处理指令3-文件包含
查看>>
C语言-变量类型
查看>>
C语言-static和extern关键字1-对函数的作用
查看>>
C 语言-static和extern关键字2-对变量的作用
查看>>
【JavaScript 教程】浏览器—History 对象
查看>>
还不会正则表达式?看这篇!
查看>>
100道+ JavaScript 面试题,助你查漏补缺
查看>>
JavaScript深入理解之闭包
查看>>
这才是学习Vite2的正确姿势!
查看>>
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
25个构建Web项目的HTML建议,你需要了解一下!
查看>>
【web素材】02-10款大气的购物商城网站模板
查看>>
6种方式实现JavaScript数组扁平化(flat)方法的总结
查看>>
如何实现a===1 && a===2 && a===3返回true?
查看>>
49个在工作中常用且容易遗忘的CSS样式清单整理
查看>>
20种在学习编程的同时也可以在线赚钱的方法
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
12 个JavaScript 特性技巧你可能从未使用过
查看>>