linux 系统调用是否是应用程序/用户程序请求操作系统服务以执行特权操作的唯一方式?[已关闭]

cbwuti44  于 12个月前  发布在  Linux
关注(0)|答案(1)|浏览(84)

已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。

20天前关闭。
Improve this question
我在Linux环境中,尽管我知道这个主题的范围要广得多
假设我正在写一个简单的C程序,我想在终端上写“Hello”。最明显的方法是使用C标准库printf,它反过来使用write系统调用( Package 函数而不是系统调用本身),它反过来调用实际的汇编系统调用指令(或int)。不太明显的方法是在我的C源文件中使用一些内联程序集,或者直接创建一个包含syscall指令的程序集文件。

我的问题

1.看起来在一天结束的时候,无论如何,我们都会以系统调用(指令syscall或int)结束。这是唯一的办法吗?
1.在现代PC的上下文中,术语应用程序的含义是否与用户程序的含义相同?
1.是否可以说PowerPoint、Google Chrome、Visual Studio Code、Photoshop或我编写的C程序都是应用程序/用户程序的示例,这些程序需要系统调用来请求操作系统服务以执行特权操作(如编写文件)?

mspsb9vt

mspsb9vt1#

在传统的操作系统上,是的,几乎所有的操作系统服务都是通过系统调用请求的。但是,也有一些例外:

  • 在主要页面错误时,操作系统可能会从后台存储(交换空间)中检索您的进程丢失的页面。这是一个特权操作,您的进程不能自己执行,但它是通过页面错误处理程序触发的。
  • 某些机器指令可能不受CPU支持,或者可能仅对特权代码可用。例如,这会影响MRS指令读取AArch64上的CPU类型和功能。当用户软件执行这样的指令时,就会发生陷阱。一个操作系统(如FreeBSD)可能会模拟丢失的指令,或者在特权上下文中执行它,然后继续执行。
  • 一些操作系统支持邮箱风格的用户空间接口,其中用户进程可以将指令包存款在环形缓冲区中,内核周期性地检查新工作,执行包而无需用户进程显式地触发系统调用。

还有其他的例子,但几乎所有与操作系统的交互都是通过系统调用进行的。

相关问题