Han*_*Sun 2 c unix linux operating-system file
据我所知,UNIX函数read()将导致中断(TRAP)并调用系统调用read.我还记得在调用系统调用之前它必须切换到"内核模式" read并且切换很昂贵.
我想知道为什么必须将read操作委托给"内核模式"中的系统调用,而不是完全在"用户模式"中完成.
例如,如果在"用户模式"中可以存在管理文件访问权限的服务,则read操作可以只请求此服务,而不是干扰内核.
对于磁盘驱动程序,在此链接中说
设备驱动程序可以在用户或内核模式下运行
有没有人有这个想法?为什么 read必须处于内核模式?
不是操作系统的设计方式.操作系统的定义是处理计算机的硬件并为用户提供资源.操作系统也具有用户模式和内核模式的概念(正如您所说).
通过具有这些概念,OS定义了用户可能做什么和不做什么的特定行.让他们管理硬件绝对是操作系统不希望用户做的事情.
read通常涉及硬件访问.访问硬件很麻烦且容易出错,并且可能使计算机处于不可用状态.操作系统使用驱动程序来控制计算机的硬件.
发出a read(假设是硬盘IO)通常会使驱动程序向磁盘控制器发送一组命令,读取它的输出,将其传递给主存储器等.这是不应该信任用户模式的危险操作.
如果在用户模式下有服务来处理这个问题.仍然需要完成上下文切换,因为该服务将作为另一个进程运行.
当然可以做一个允许这样做的操作系统.但是现代操作系统并不是为了实现这种行为而设计的.
还有其他方法可以构建依赖于微内核的操作系统.微内核只需最少的工作就可以启动电脑并将其他所有模块留给其他模块.这意味着如果模块崩溃,系统仍然会启动.这是特定驱动程序,文件系统等的情况.我不知道微内核是否允许这些在用户空间中运行.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1710 次 |
| 最近记录: |