본문 바로가기

프로그램의 작동 환경

1. OS와 하드웨어가 프로그램의 작동 환경을 결정한다.


LOL(League Of Legends)의 작동 환경(시스템의 요구 사항)은 다음과 같다.


 OS 

 Windows XP SP3 이상, Windows Vista, Windows 7, Windows 8 또는 Windows 10 정품

 CPU

 CPU 3GHz

 램 

 4GB

 하드 

 12GB

 그래픽 

 GeForce 8800 또는 동급 그래픽 카드 이상(512MB 이상 비디오 메모리, 전용 GPU가 적용된)


여러가지 OS를 설치할 수 있는 하드웨어도 있고 여러 종류의 하드웨어에서 작동하는 OS도 있다.

때문에 소프트웨어의 작동 환경에는 OS와 하드웨어가 모두 명시되어 있어야 한다.

윈도우처럼 OS에 여러가지 버전이 있을 경우 특정 버전의 OS를 요구하는 경우도 있다.


프로그램의 작동 환경을 하드웨어적인 측면에서 보면 CPU가 가장 중요하다. 

CPU는 그 CPU 전용으로 개발된 기계어만 해석할 수 있다. ⒜x86, ⒝MIPS, ⒞PowerPC 등 CPU의 종류에 따라 사용되는 기계어는 완전히 달라진다. 

프로그램은 소스코드가 컴파일을 거쳐 ⒟네이티브 코드가 되고, CPU가 이를 해석함으로써 실행되는 것이다. 따라서 프로그램의 작동 환경에는 CPU가 가장 중요하다.



⒜x86: 80x86. 초기 Intel 사의 CPU는 8086, 80186, ... 80486 순서로 출시되었는데, 이 CPU들 또는 이 CPU들과

  호환되는 명령어 집합을 말한다.

⒝MIPS(Microprocessor without interlocked pipeline stage): MIPS Technology 사에서 개발한 ⒠ISA.

PowerPC:(Performance Optimization With Enhanced RISC - Performance Computing):  ⒡AIM 연합에서 개발한                                                                                                                    ⒢RISC 방식의 ISA.

⒟네이티브 코드(native code): 원시 코드라고도 한다. 기계어로 구성된 프로그램을 말한다.

⒠ISA(Instruction Set Architecture): 명령어 집합. CPU가 기능을 이해하고 실행할 수 있는 기계어 명령어.

⒡AIM 연합(Apple IBM Motorola): Apple 사, IBM 사, Motorola 사가 ⒣Wintel에 대항하기 위해 결성한 조직. 

⒢RISC(Reduced Instruction Set Computer): 명령어 수를 줄여 하드웨어 구조를 간단하게 만드는 방식.

⒣WinTel(Windows + Intel):  Microsoft와 Intel 사의 연합.





2. 윈도우는 하드웨어의 차이를 극복했다.


윈도우의 전신인 MS-DOS가 주로 사용되던 1980년대에는 대우 사의 IQ 2000, 삼성의 SPC 시리즈 등 다양한 기종의 PC가 쓰였다. 그러다 윈도우 3.0과 3.1이 발표된 후 IBM PC 호환 기종이 부급되었다.


이 기종들은 x86, Z80 등 서로 다른 종류의 CPU를 탑재하고 있었으며 메모리나 입출력 주소의 구성 등도 달랐다. 따라서 기능이 같은 소프트웨어라도 기종마다 다른 것을 사용해야 했다. 서로 비슷한 x86 계열의 CPU를 내장한 컴퓨터도 많았지만, 겉으로 보기에는 달랐다. x86의 경우 주변 기기와의 입출력을 위해 전용 입출력 주소 할당 공간을 갖추고 있다. 따라서 같은 x86 CPU라도 주변 기기에 할당되는 주소가 달라, 겉으로 보기에는 달랐던 것이다.


예를 들어 워드프로세서 소프트웨어를 사용하려면 각 기종마다 전용 소프트웨어를 구입해야 했다.  애플리케이션의 기능에 하드웨어를 직접 조작하는 부분이 있었기 때문이다. 이런 방법은 MS-DOS의 기능이 충분하지 않거나 프로그램의 실행 속도를 향상시킬 때 주로 선택되었다.


이런 상황은 윈도우의 사용으로 개선되었다. 윈도우가 설치되어 있다면, 기종에 관계 없이 같은 애플리케이션(네이티브 코드)이 작동할 수 있기 때문이다. 


윈도우용 애플리케이션에서는 키 입력이나 화면 출력 등의 작업을 하드웨어가 아닌 윈도우에 명령함으로써 간접적으로 구현한다. 때문에 프로그래머는 메모리나 입출력 주소 구성의 차이를 고려할 필요가 없게 되었다. 기종마다 다르게 구성된 하드웨어를 애플리케이션이 아닌 윈도우가 알아서 조작해주기 때문이다. 단, 이를 위해서는 기종에 맞는 윈도우를 설치해야 한다.





3. API는 OS마다 다르다.


대부분의 PC에는 다양한 OS를 설치할 수 있다. 예를 들어 IBM PC 호환 기종의 경우 윈도우 뿐 아니라 UNIX 계통의 Linux도 설치할 수 있다. 물론 OS에 따라 전용 소프트웨어를 설치해야 한다.

CPU마다 기계어가 다르듯이, OS마다 애플리케이션에 OS에 내리는 명령이 달라지기 때문이다.


윈도우나 UNIX의 ⒤API는 프로그램에서 호출할 수 있는 함수의 집합으로 제공된다.

OS에 따라 API가 달라지므로 어떤 애플리케이션을 다른 OS용으로 만들려면 그 애플리케이션의 소스 코드에서 API 호출 부분을 그 OS에 맞게 수정해야 한다. 다만 일반적으로 API는 키보드, 마우스의 입력이나 화면 출력, 파일 입출력 등 주변 기기와의 입출력을 제어하는 기능을 하기 때문에 어떤 수의 합을 구하는 등의 내부 연산 처리는 수정할 필요가 없다. 이런 연산은 API와 무관하기 때문이다.


반대로 OS는 같은데 하드웨어가 달라진다면 API를 수정할 필요는 없다. 특정 OS의 API에 맞게 만들어진 프로그램은 모든 하드웨어에서 작동할 수 있기 때문이다. 그러나 CPU의 종류가 다르다면 기계어가 달라지기 때문에 네이티브 코드까지 같다고 할 수는 없다. 따라서 각 CPU에 맞는 컴파일러를 사용해 소스 코드를 다시 컴파일할 필요는 있다.



⒤API(Application Programming Interface): 운영체제가 애플리케이션을 위해 제공하는, 시스템의 기능을 호출할 

  수 있는 함수의 집합.


'Programming > Basis' 카테고리의 다른 글

프로그램의 이식  (0) 2019.04.08
Ports  (0) 2019.04.04
파일 압축  (0) 2019.03.18
디스크의 구조  (0) 2019.03.18
메모리를 절약하는 방법  (0) 2019.03.12