소프트웨어가 기본적으로 실행된다는 것은 무엇을 의미합니까?


27

소프트웨어가 기본적으로 실행되는 것이 무엇을 의미하는지 궁금합니다. 그러한 소프트웨어는 정확히 무엇이며 기본적으로 실행되지 않는 소프트웨어와 어떻게 다릅니 까? 특정 소프트웨어 조각이 내 컴퓨터에서 기본적으로 실행되는지 어떻게 알 수 있습니까? 내 컴퓨터에 기본적으로 실행되는 소프트웨어가있을 가능성이 있습니까?


2
"네이티브 (native)"는 그것이 어떤 플랫폼 / OS에서든 실행되도록 설계
되었음을

나도 ... 중재자가 질문을 읽는 데 어려움을 겪고있는 것 같습니다.

5
@faB 질문을 닫는 데 중재자가 없음을 알고 있습니까?
slhck

질문 제목은 "운영 체제"또는 프로세서 자체 (예 : 직접 하드웨어 액세스)에서 "프로그램"을 실행하는 것의 차이점을 생각하게했습니다.
획기적인

질문 자체 가 나쁜 것은 아니지만이 사이트에는 좋지 않습니다. 답변에서 알 수 있듯이 깨끗하게 대답 할 수있는 것이 아니며 주변에 여러 가지 주장이 있으므로 FAQ에 따라 종결이 완전히 적절합니다.
afrazier

답변:


43

소프트웨어는 해당 플랫폼에서 실행되도록 설계된 경우 기본 플랫폼입니다.

플랫폼은 일반적으로 운영 체제를 나타내지 만 Nintendo Game Boy와 같은 장치에도 적용될 수 있습니다.

예를 들어 Game Boy를 사용하면 카트리지에서 소프트웨어를 가져옵니다. 이 카트리지에는 Game Boy에서 기본적으로 실행되는 코드가 포함되어 있습니다 .

에뮬레이터 는 한 플랫폼 용으로 설계된 소프트웨어가 다른 플랫폼에서 실행될 수 있도록하는 계층입니다. 예를 들어 게임 보이 카트리지 이미지를 실행하고 컴퓨터 나 휴대 전화에서 게임 보이 게임을 할 수있는 에뮬레이터가 있습니다.

호환성 계층은 어떤 에뮬레이터 등이다. 64 비트 컴퓨터와 운영 체제가 주류가되었을 때 기존 32 비트 기술과 호환되어야했습니다. 64 비트 및 32 비트 아키텍처는 매우 다르기 때문에 64 비트 컴퓨터에서 32 비트 소프트웨어를 실행하려면 호환성 계층이 필요한 경우가 많습니다. 64 비트 버전의 Microsoft Windows의 경우 Microsoft는 32 비트 프로그램이 새 64 비트 시스템에서 계속 작동 할 수 있도록 호환성 계층을 작성해야했습니다. 이런 이유로 일부 프로그램은 종종라는 폴더에 설치됩니다 Program Files (x86).x86 수단 "32 비트".

호환성 계층은 에뮬레이터보다 기본 시스템에 더 친밀한 경향이 있습니다. 버추얼 에뮬레이트 운영 체제에 대한 하드웨어는 * ,하고 호스트 시스템에 매우 직접적인 상호 작용이없는 에뮬레이트하는 시스템. WoW64 는 32 비트 프로그램이 64 비트 Windows에서보다 통합 된 방식으로 실행될 수 있도록 하는 호환성 계층 입니다. WoW64를 사용하면 격리 된 환경에서 프로그램을 에뮬레이션 하지 않고 호환 가능 합니다.

번역 라이브러리 호환성 레이어의 구성 요소입니다. 이진 코드가 비 원시적으로 실행될 때마다 변환 라이브러리는 비원시 외래 호출을 시스템이 이해할 수있는 기본 호출로 리디렉션합니다. TI-83의 아키텍처에서 이해되는 일부 호출은 더 이상 TI-83 / 84 +에서 유효하지 않을 수 있으므로 원래 TI-83 용으로 작성된 어셈블리 프로그램은 최신 TI-83 / 84 Plus 계산기와 호환되지 않을 수 있습니다. 번역 라이브러리 ( MirageOS 와 같은 쉘에 포함되어 있음 )는 TI-83에 대한 호출이 TI-83 / 84 + 계산기의 새로운 업데이트 된 장소로 이동하도록합니다.

플랫폼 독립적 인 코드 는 일반적으로 기본적으로 실행되는 언어로 해석 되는 언어로 작성 됩니다. 예를 들어, PHP는 Windows, Mac 및 Unix 기반 운영 체제 용 으로 이미 컴파일 된 설치된 PHP 바이너리에 의해 해석되고 실행되는 프로그래밍 언어입니다 . 웹 스크립터가 작성하는 PHP 코드는 플랫폼과 독립적이므로 해당 운영 체제에 PHP가 설치되어있는 한 여러 운영 체제에서 코드가 작동 할 수 있습니다.


여러 가지 잡다한

수정

* 감사합니다, 마이클 Kjörling을 위해, 몇 가지 문제를 잡기이 답변 .

다른

"네이티브"와 "네이티브"의 차이는 흑백아닙니다 . (아 프라자 크레딧 )


3
사소한 nitpick : (VirualBox가 아닌 VirtualBox이며) VirtualBox는 운영 체제를 에뮬레이션하지 않고 하드웨어를 에뮬레이션합니다 . 따라서 VirtualBox에 원하는 운영 체제를 설치하거나 (가상화 제한 사항에 따라) 처음부터 직접 작성할 수도 있습니다.
CVn

1
Native 는 종종 기본 플랫폼에 기본 라이브러리 세트와 API를 사용하고 있다는 것을 암시하며, 이는 구별을 다소 모호하게 만들 수 있습니다. Win32 API 응용 프로그램이 "네이티브"인 것처럼 .NET 응용 프로그램을 "네이티브"로 간주하지 않는 사람들이 꽤 있으며 Gnome 데스크톱 "네이티브"에서 실행되는 KDE 프로그램을 고려하지 않는 사람들도 있습니다.
afrazier

@afrazier : .NET 응용 프로그램은 "공용 언어 런타임"에서 실행되도록 설계되었으므로 Windows에서 실행하려면 호환성 계층이 필요합니다. 또는 Linux에서 실행할 다른 호환성 계층.
벤 Voigt

@Ben Voigt : 여전히 퍼스트 파티 API이며 바이너리는 네이티브 x86 / amd64 코드 (CLR에 의해 런타임에 또는 ngen과 사전에 상관없이)로 컴파일되며 프레임 워크는 최신 버전의 Windows와 함께 제공됩니다. 이것은 더 큰 논쟁의 일부이며 실제로는 적합하지 않습니다.
afrazier

Virtual Box는 기술적으로 에뮬레이터가 아니라 Virtualizer입니다. 통과 한 시간 에뮬레이터는 항상 완전히 다른 하드웨어를 에뮬레이션했습니다. 가상화에서 OS 및 소프트웨어는 실제로 호스트 CPU에서 기본적으로 실행됩니다. 차이점은 장치가 가상이거나 에뮬레이션된다는 것입니다. Virtual Box 웹 사이트에서도 지적하는 것은 약간의 기술적 차이입니다. virtualbox.org/wiki/Virtualization
Matt H

4

네이티브 코드는 일반적으로 플랫폼 독립적 인 코드와 반대로 사용됩니다. 기본 소프트웨어를 실행하는 경우, Javascript 또는 Java 바이트 코드와 같은 플랫폼 독립 스크립트가 아닌 컴파일 된 바이너리를 실행하고 있습니다. 컴파일 된 C 또는 컴파일 된 C ++는 네이티브 코드의 좋은 예입니다.


3

놀랍게도 몇 가지 가능한 답변이 있지만 표준은 일반적으로 CPU의 opcode로 컴파일 된 코드와 컴퓨터를 부팅 한 OS의 프로그래밍 라이브러리에서 실행되는 것입니다. 이 경우 실행하는 대부분의 코드는 기본 코드입니다. 어쩌면 일부 반례는 문제를 해결해 줄 것입니다.

자바는 네이티브 코드가 아니다. 중간 바이트 코드로 컴파일 된 다음 특정 칩셋에서 실행됩니다. Java는 기본 코드 를 호출 할 수 있습니다 . Eclipse는 훌륭한 예입니다. Java는 일부 플랫폼 기본 그래픽 호출을 신속하게 호출합니다.

MS Windows API 에뮬레이터 WINE 을 실행하면 기본 코드가 아닙니다. 해당 칩셋 (x86) 용으로 설계된 코드를 실행하고 있지만 부팅 한 OS에 대한 코드는 실행하지 않고 대체 라이브러리입니다. MAME 는 다른 CPU 및 운영 체제에 대해 이진을 실행합니다.

스크립트는 기본 코드가 아닙니다. 그것들은 더 높은 수준의 언어로 작성되며 런타임에 CPU에서 실행되는 코드로 변환되어야합니다.

흐릿한 선이 있습니다. 웹 브라우저는 기본 코드로 실행되지만 Java (바이트 코드로 컴파일) 또는 Javascript (스크립트 해석 언어)를 실행할 수도 있습니다.


.NET, VBA, XUL , IA-32 (최소한 AMD64 CPU에서), ...
CVn

3

상황에 따라 다릅니다. 나에게 "네이티브"는 애플리케이션이 운영 체제가 제공하는 기능과 메커니즘을 사용하지 않고 사용한다는 것을 의미합니다. 이는 사용자 인터페이스 기능 (버튼, 창, 파일 선택기 대화 상자)뿐만 아니라 후드 아래의 기능 (예 : "Open with ..."과의 통합)에도 적용 할 수 있습니다.

예를 들어, Windows에서 기본 앱은 "WinAPI"를 사용하여 다른 애플리케이션과 동일한 버튼, 스크롤 막대 등을 가져옵니다. 시스템 앱 (메모장)에서 타사의 기본 앱과 똑같이 동작합니다.

Java 응용 프로그램은 종종 "Swing"을 사용하며 시스템을 사용하지 않고 자체적으로 컨트롤을 가져 오기 때문에 완전히 다르게 보입니다. 이점은 프로그램이 모든 OS에서 동일하게 보입니다.

GUI를 빌드하는 또 다른 옵션은 "QT"와 같은 크로스 플랫폼 툴킷입니다. QT는 OS에 대한 컨트롤을 그릴 것을 요청하므로 Windows, OSX 또는 Linux를 실행 중인지 여부에 관계없이 매우 기본적으로 보입니다. QT 텍스트 상자는 Windows 텍스트 상자와 비슷하지만, 기본 텍스트 상자가 아니라 일종의 에뮬레이션입니다. 세부 사항 (예 : 상황에 맞는 메뉴, 입력 방법 등)에 약간의 차이가있을 수 있습니다.

사람들이 "네이티브 (native)"라고 말할 때, 종종 프로그램이 가상 머신 (Java 및 .NET 프로그램과 같은)에서 실행되는 중간 코드가 아닌 머신 코드로 컴파일되는 것을 의미합니다. 위의 예제에서 WinAPI 및 QT 앱은 머신 코드를 사용하는 반면 Java 프로그램은 Java 바이트 코드로 컴파일됩니다. 많은 사용자가 Windows 용으로 잘 작성된 .NET 응용 프로그램을 고려할 것이기 때문에이 사용법은 오늘날 약간 문제가됩니다. .exe 일 뿐이며, 동일한 제어 및 API를 사용하며, 컴파일 된 프로그램과 거의 구별 할 수 없습니다. 기계 코드.

마찬가지로 GTK를 사용하고 Unix 파일 시스템 구조에 대해 알고 Ubuntu 또는 Gnome 용 .deb 패키지로 제공되는 프로그램을 고려할 것입니다. 자바 스크립트로 작성된 자사의 Gnome 앱도 네이티브라고 할 수 있습니다! Windows 8 "Metro"앱에도 동일하게 적용되며, 일부 언어는 컴파일되고 일부는 컴파일되지 않은 다양한 언어로 작성 될 수 있습니다.


2

좀 더 추상적 인 용어로 말하면, 다른 언어로 프로그램을 실행하는 다른 사람의 신뢰를받는 것과 같습니다.

  • Native는 OS가 자신이 알고있는 가장 빠르고 간단한 방언을 바이너리로 사용한다는 의미입니다.

    장점 : 금속에 이르기 때문에 서로 대화 할 수있는 빠르고 광범위한 언어 가용성. 단점 : 보안, 복잡한 API, OS 기능으로 제한되며 컴파일러는 컴파일하기가 어렵습니다. 한 번 컴파일 된 프로그램이 야생으로 출시되기 때문입니다.

  • 네이티브가 아님은 코드가 OS에서 직접 실행되지 않음을 의미합니다. 그는 다양한 방법으로 실행될 수 있으며, 주요 방법은 가상 머신에서 프로그램의 바이트 코드 버전을 해석하고 실행하는 것입니다.

    장점 : API는 거의 항상 변경되므로 프로그래머가 작업하기가 훨씬 쉽습니다 (적어도이 특정 언어를 고수 할 때). 단점 : 성능 (보통 약간 감소하고 문제가되는 경우는 거의 없음), 모든 사람이 실제로이 특정 언어를 사용하는 것은 아니므로이 기술을 채택하는 데 문제가 될 수도 있습니다. 보안도 문제가 될 수 있지만 훨씬 통제력이 떨어집니다. 어쩐지.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.