初始化变量时模式位会改变吗?

does the mode bit change when initialising a variable?

所以我知道系统调用(例如 open, close, read, write 等)会两次更改模式位 - 从用户模式到内核模式以服务于系统调用请求,然后在完成后返回用户模式。

但是如果我们有例如

int a = open("lol.txt", O_RDONLY);

模式位将再次更改两次以服务于open系统调用,但是当它分配给一个变量时呢?假设它需要将变量存储到内存中,我们是否必须返回内核再次为该请求提供服务?即模式位在上一行中改变了 2 次还是 4 次?

冒着过度简化的风险,进入内核模式的唯一方法是通过异常(陷阱或故障)或中断。

对于系统调用,应用程序需要触发陷阱。系统调用总是有一个包装函数,它可能会进行一些验证,将参数加载到适当的寄存器中(可能会从中设置堆栈)。然后它执行一条导致陷阱的指令

     TRAP   #100 ; call the 100th exception handler

之后,处理器进入内核模式。将验证参数然后执行内核服务。完成后,它将 return 使用如下所示的插入:

   REI ; return from exception or interrupt

处理器返回用户模式。

open() 可能是也可能不是实际的系统服务。即,我刚才描述的包装器之一。这取决于系统。 open() 可能是调用多个系统服务的库函数,在这种情况下处理器将多次进入内核模式并返回。

如果 open() 是系统服务,您可能进入内核模式并返回一次。

open函数不管是不是系统服务,都会return寄存器中的值。存储值是一个简单的移动指令。