Compiler construction 编程语言与操作系统的交互

Compiler construction 编程语言与操作系统的交互,compiler-construction,programming-languages,operating-system,Compiler Construction,Programming Languages,Operating System,这是一个关于编程语言和操作系统的计算机科学问题 我的问题是,编程语言和操作系统之间的基本交互是什么?我确实对操作系统的生命周期有一个想法,但不确定编程语言如何适应 我读过这篇文章,但没有任何帮助 编辑: 通过编程语言,我的意思是包括它们各自的编译器/VM编程语言不与操作系统交互,因为它是一种语言,一种抽象概念,它不是任何类型的(交互)参与者。它只是一个系统,可以使用它的词汇元素来表达程序和算法,符合它的语法和规则等等 可以与操作系统交互的是程序。编程语言的解释器和编译器(即程序)与操作系统交互

这是一个关于编程语言和操作系统的计算机科学问题

我的问题是,编程语言和操作系统之间的基本交互是什么?我确实对操作系统的生命周期有一个想法,但不确定编程语言如何适应

我读过这篇文章,但没有任何帮助

编辑:


通过编程语言,我的意思是包括它们各自的编译器/VM

编程语言不与操作系统交互,因为它是一种语言,一种抽象概念,它不是任何类型的(交互)参与者。它只是一个系统,可以使用它的词汇元素来表达程序和算法,符合它的语法和规则等等


可以与操作系统交互的是程序。编程语言的解释器和编译器(即程序)与操作系统交互。编译后的程序与操作系统交互。语言不是。它们不是程序。

在机器代码级别,程序必须进行系统调用

不同的处理器有不同的方法来进行系统调用。每个操作系统必须为给定的处理器体系结构选择一个系统调用约定。例如,对于x86处理器,Linux过去使用软件中断指令
int0x80
来执行其系统调用,但(根据下面的注释)现在它使用了
syscenter
指令,该指令是专门为此目的引入到体系结构中的


系统调用约定实际上并不特定于编程语言本身,但它们必须写入给定语言和操作系统的最基本标准库。

谢谢Alex,我指的是底层编译器本身或解释器本身。当我提到编程语言时,我假设编译器/解释器是它的一部分。编译器和解释器在代码中体现了各自的语言、抽象思想。在最基本的层面上,所有程序都需要I/O。否则它们就没用了。操作系统允许程序进行I/O。这是最基本的。你可以用编程语言表达与操作系统的交互——从这个意义上说,编程语言确实与操作系统交互。这主要是语义学,OP的意图在这里非常清楚。@zespri如果你问错了问题,你就不会得到你真正想要的正确答案。虽然你的答案总体上是合理的,但我要说两点:1)系统调用的概念在很多(大多数?)上都有主流内核,但我不会发誓,因为时髦的内核和古怪的硬件平台都存在;2) Linux和Windows自古以来就在x86/amd64上使用
SYSENTER
/
SYSEXIT
——Linux为此使用了a,Windows在其
ntdll.dll
中有一个非常相似的基础结构,它映射到任何进程的地址空间。感谢链接——我已经有一段时间没有看过这种东西了,我将相应地编辑我的答案。无论如何,任何类型的操作系统都会有某种系统调用约定——即使这只是一种约定,因为它位于没有硬件保护的嵌入式平台上……comingstorm和@kostix是否意味着编译器/vm作为特权应用程序运行(类似于虚拟机的运行方式)?@hld619,当然不是!具体来说,系统调用(在实现特权分离的硬件体系结构中)提供了一种“门”,允许非特权进程代表控制这些进程的内核执行某些(否则是特权的)操作。当一个进程“在”一个系统调用中时,它在内核上下文中执行内核代码;当系统调用退出时,控件被传递回进程自己的代码。@hld619,顺便说一句,内核内编译器和相关运行时的一个有趣的例子是,它至少在Linux和FreeBSD内核中可以找到。.谢谢kostix,这解释了很多东西