本文共 864 字,大约阅读时间需要 2 分钟。
应用程序是从头到尾执行单个任务。 模块只是预先注册自己以便服务于将来的某个请求,,模块初始化函数的任务就是为以后调用模块函数预先做准备,就像模块说:“我在这,并且我能做这些工作。”模块的退出函数将在模块被卸载前调用,他告诉内核:“我要离开了,不要再让我做任何事了。”
应用程序在退出时,可以不管资源的释放或其他清除工作,但模块的退出函数必须仔细撤销初始化函数所做的一切。
应用程序可以调用它并未定义的函数,这是因为连接过程能够解析外部引用从而使用适当的函数库。而模块仅仅被链接到内核,因此它能调用的函数仅仅是由内核导出的那些函数,不存在任何可链接的函数库。
应用程序开发过程的段错误是无害的,并且总是可以使用调试器跟踪到源码中的问题所在,而一个内核错误即使不影响整个系统,也至少会杀死当前进程。
内核运行在最高级别,应用程序运行在最低级别(即用户态),在用户态,处理器控制着对硬件的直接访问以及对内存的非授权访问。
每个模式都有自己的内存映射,也即自己的地址空间。 每当应用程序执行系统调用或被硬件中断挂起,unix将执行模式从用户空间切换到内核空间。执行系统调用的内核代码运行在进程上下文中,它代表调用进程执行操作,因此能够访问进程地址空间的所有数据。用户空间驱动程序的优点:
用户空间驱动程序的缺点:
转载地址:http://okhpi.baihongyu.com/