1

我很好奇,因为我正在阅读这本操作系统书籍,其中提到

“用户程序始终在用户模式下运行,它只允许指令的子集 [...]。通常,所有涉及 I/O 和内存保护的指令都不允许在用户模式下运行。为了从操作系统获取服务,用户程序必须进行系统调用,它会陷入内核并调用操作系统。”

如果在用户模式下通常不允许 I/O,但假设我有一个 C++ 或 Java 程序要求输入,或者让我们说任何程序中的搜索栏之类的其他东西。每当我选择搜索栏(意味着我会写一些东西)时,就会调用一条 TRAP 指令来调用操作系统(因为操作系统在内核中运行)以便能够访问 I/O,即键盘?我不确定我是否正确遵循或我做错了什么。

用户模式下不允许 I/O,但您在操作系统中为应用程序使用输入,甚至操作系统本身也有键盘命令。如果您可以使用键盘命令,则意味着操作系统随时准备好进行 I/O。然后是关于 I/O 指令在用户模式下被禁止的原始声明。

我很抱歉我的无知,但我对这些术语以及用户和内核之间的区别有点困惑。我知道操作系统在内核模式下运行,应用程序在操作系统中运行,所以最终应用程序确实可以访问 I/O。

4

3 回答 3

0

了解“用户模式”和“内核模式”的含义很重要。根据内存布局,进程被映射到用户特权的内存区域。
内核模式基本上是位于主管特权内存区域中的例程,由您的程序调用以完成所需的工作(I/O)。

于 2017-12-05T23:14:19.703 回答
0

应用程序不需要让操作系统为他们处理 I/O 吗?意思是,只有操作系统有权做这些事情......

我错了吗?

于 2017-12-05T21:38:07.050 回答
0

把你的书扔进垃圾箱或用它来排列猫箱。

你明显的悖论是你认为你必须在内核模式下进行 I/O,但你的书说:

“用户程序总是在用户模式下运行,它只允许一部分指令”

你的悖论的解决方案是你的书在胡说八道。

使用程序并不总是在用户模式下运行。它们经常在内核模式下运行。操作系统的基本功能之一是提供一组内核模式系统服务,这些服务提供对内核模式的受控访问。

换句话说,你在这里的直觉比你令人困惑的书的文字要好。

于 2017-12-05T22:04:58.173 回答