免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1057 | 回复: 0
打印 上一主题 下一主题

2.3. Kernel Services [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-09 19:32 |只看该作者 |倒序浏览

用户级代码和系统级代码的界限是被由硬件提供的硬件保护工具强制划分的。内核操作是在单独的地址空间进行,这个空间是用户进程不能访问的。有些有特权的操作(如开始I/O、中断CPU)只能被内核使用。应用程序使用系统调用想操作系统请求服务。系统调用是用来让内核执行一些复杂操作(如将数据写入二级缓存)和一些简单操作(如返回当前时间)。所有系统调用都是同步的:当内核执行一个与系统调用相关的动作时应用程序不能发生动作。在系统调用返回后,内核仍可以执行一些与系统调用相关的动作。例如write这个系统调用,它将从用户进程的内存中拷贝数据到内核的缓冲,此时用户进程必须等待;但是它通常在数据真正写到磁盘之前就返回。
一个系统调用通常作为一个硬件闸来执行,它改变CPU的运行模式和当前的内存地址空间映像。在系统调用执行之前,内核会验证用户在为系统调用提供的参数。这种验证确保系统的完整性。传递到内核的参数会被拷贝到内核的地址空间,这样确保验证的参数不会被改变。系统调用的执行结果被返回到硬件寄存器中或拷贝到用户指定的内存地址。与传递到内核的参数一样,存放返回结构的地址也要被验证,以确保它是应用程序地址空间的一部分。如果内核在执行系统调用时遇到错误,它将返回一个错误码给用户。对于C语言来说,这个错误码存储在全局变量errno中,被用来执行系统调用的函数会返回-1。
用户程序与内核操作彼此独立。FreeBSD不会在用户应用程序的地址空间中存储I/O控制块和其他与操作系统相关的数据结构。每个用户级应用程序在执行时都会有一个独立的地址空间。内核会产生很多无形中与进程有关的状态,比如当一个进程运行时就会把另外一个进程挂起。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/38079/showart_296194.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP