我正在从 Maurice J Bach 的《Unix Architecture》一书中学习 Unix。
我的困惑在于内核的概念。什么是内核?我理解这是操作系统,它是一个进程。
但是当我的老师教他说系统调用()时,会导致进程从用户模式进入内核模式。
系统调用中实际发生了什么?用户进程进入睡眠状态,操作系统代表用户进程执行并将值返回给用户进程,还是用户进程在内核模式下执行?如果后者是正确的,这意味着什么?
答案1
什么是内核?
从您的问题的意义上来说,它是一个在处理器上以特殊权限级别运行的单个大型程序。它提供所有核心操作系统设施:多任务处理,工控机,文件系统等等。它也是运行的进程设备驱动程序,它又代表内核控制计算机的硬件。
我明白这是操作系统
即使在莫里斯·巴赫(Maurice Bach)写书的时候,操作系统也包括贝壳,编译器,公用事业,文本编辑器, ETC。
随着时间的推移,操作系统一词已经包含了更多的内容,例如图形用户界面子系统。
在操作系统和普通用户程序之间划清界限是个人决定。大多数人都会同意 GUI 文字处理器不是操作系统的一部分,即使它是与操作系统一起安装的。但是,许多人也同意操作系统附带的纯文本编辑器是操作系统的一部分。该阵营中的许多人也同意标记处理器操作系统附带的工具(troff、TeX 等)如今也被视为操作系统工具。但是,将文本编辑器和标记处理器结合起来,您就会得到在某些方面与文字处理器没有区别的东西。
划一条大家都能同意的明确界限是不可能的。
这是一个过程。
不完全是,不。
A微内核架构是您能够尽可能接近地实现这一说法的。即便如此,内核仍然是一个收藏进程,其中一个进程很特殊,因为它可以运行所有进程其他流程。所以即使在这种情况下,仍然有一个核心——一个微小的内核——它本身不能说是一个正常的进程。
如果是整体内核,内核处于一个特殊的位置,它运行所有的过程。
系统调用中实际发生了什么?
阅读巴赫书的其余部分。
您会注意到这个答案有许多维基百科链接,并且我链接到的大多数文章都很长且复杂,还有更多链接。这是因为您基本上要求我们将一个非常复杂的主题提炼成一个简单的答案。没有一个简单的答案,所以我试图提供一个指导答案,复数。
用户进程是否进入睡眠状态,操作系统代表用户进程执行它并将值返回给用户进程......?
在巴赫讨论的经典整体内核中,是的。
然而,现代系统模糊了这个简单的图景。
首先,“操作系统”不执行系统调用,而是内核执行。我不只是迂腐。由于现代操作系统的大部分是由各种用户空间程序组成的,并且现代操作系统是多任务的,因此您不能说操作系统只是停止并运行系统调用。操作系统可能同时做很多事情,一其中处理单个用户程序的系统调用。
但其次,也是更重要的一点是,现代操作系统内核不再是一次处理一个系统调用的单任务程序。操作系统可能处于中间许多立即进行系统调用。进行系统调用的单任务用户空间程序可能感知在系统调用完成之前世界都会停止,但是在系统调用继续进行时内核可能正在做许多其他事情。
即使在旧式单任务内核的情况下,你也有像驱动程序这样的东西上半部和下半部,它允许内核关闭并处理磁盘 I/O 等事务,以便为相对高级的系统调用(如open(2)
.
或者用户进程在内核模式下执行?
你可以这样看,但只有我的网络浏览器和 Stack Exchange 是同一个程序,这才是正确的,因为它们通过互操作来提供单一的凝聚力体验。