打印到屏幕会导致切换到内核模式并在Unix中运行操作系统代码吗?

Ash*_*ban 4 unix operating-system

我正在研究测试OS(unix是我们的模型).我有以下问题:

以下哪两项不会导致用户程序停止并切换到操作系统代码?

答:程序发现错误并将其打印到屏幕上.

B.程序分配了内存,稍后将从磁盘中读取.

好吧,我有答案,但是,我不确定它们有多好.他们说答案是B.但是,B是用户使用malloc哪个是系统调用没有?分配内存不通过操作系统?为什么打印到屏幕应该需要操作系统呢?

谢谢你的帮助

cni*_*tar 5

malloc不是系统调用.这只是一个功能.

当你调用malloc它时检查它是否(内部)有足够的内存给你.如果是,它只返回地址 - 不需要陷入内核模式.如果它没有它,它会询问操作系统(实际上是系统调用).

根据打印的方式,也可能会或可能不会引发系统调用.例如,如果您使用stdio,则打印是用户缓冲的.这意味着,printf意味着复制到某个stdio缓冲区而没有任何实际的I/O. 但是,如果printf决定刷新,那么确实必须执行系统调用.