프로그래밍/컴퓨터구조 및 운영체제

운영체제 관련 용어

gameObject 2023. 9. 16. 18:56
728x90

시작하세요 C# 10 프로그래밍의 책을 보고 공부한 내용을 정리하였습니다.

 

1. 도스(DOS)

개인용 컴퓨터 시장에서 의미가 있었던 최초의 운영체제는 마이크로소프트에서 만든 MS-DOS(Microsoft Disk Operating System)이다.

문자 방식 사용자 인터페이스(CUI: Character User Interface)로도 유명하다.

현재는 윈도우의 명령프롬프트(Command Prompt)에서 흔적을 만날 수 있다.

 

2. 윈도우 운영체제

마소에서 MS-DOS에 이어 출시한 그래픽 기반 사용자 인터페이스(GUI: Graphic User Interface)를 제공하는 운영체제이다.

컴퓨터에 연결되는 모든 장치를 추상화하여 프로그래머에게 공통된 소프트웨어 개발 방식을 제공하는 것이 주요 목표였다.

 

개발자는 윈도우에서 제공되는 SDK(Software Development Kit)를 이용하면 윈도우 운영체제가 설치된 어떤 컴퓨터에서든 동일한 외형과 기능을 지닌 응용 프로그램을 만들 수 있다.

 

윈도우는 대표적으로 개인용과 서버용으로 두 가지로 나눠서 출시되고 있다. 그러나 사실상 윈도우 비스타 이후부터는 서버와 클라이언트 버전이 완전히 동일한 소스코드를 공유하고 있다.

 

3. 멀티 태스킹/ 다중 프로세스

DOS 운영체제에서는 하나의 실행 프로그램이 화면 전체를 차지했다. 따라서 원칙적으로는 한번에 하나의 프로그램만 실행됐지만, 윈도우 운영체제로 오면서 다중프로세스(Multiple processes)실행이 가능하게끔 바뀌었다.

즉 사용자는 화면에 여러 개의 프로그램을 띄울 수 있었고 그 프로그램들은 "프로세스"라는 개별 단위로 실행됐다.

초기 개인용 컴퓨터에는 CPU가 하나였기때문에 CPU는 윈도우에 실행된 응용 프로그램을 각각 짧은 시간 동안 실행을 전환시키며 마치 여러 개의 프로세스가 동작하는 것처럼 구현했었다.

 

이때 운영체제는 프로세스마다 문맥(Context)라는 정보를 유지한다. 그리고 운영체제내의 스케쥴러가 프로세스를 전환하면서 문맥을 전환시킨다.

다중 프로세스가 가능하다고 해서 반드시 멀티 태스킹이 되는것은 아니다. 다중 프로세스는 단지 여러 개의 프로세스가 동시에 운영체제에 의해 로드됐음을 의미한다. 만약 운영체제에서 그 중 하나만 실행하도록 구현돼 있다면 운영체제는 멀티 태스킹을 지원한다고 볼 수 없다.

 

4. Win32 응용 프로그램 인터페이스(API : Application Programming Interface)

윈도우 운영체제에서 동작하는 모든 프로그램은 운영체제 측에서 제공하는 기능을 이용한다.

그 기능을 API라고 하며 확장자가 DLL인 파일에서 제공된다.

 

윈도우 운영 프로그램 -> WIn32 API -> Device Driver -> 디바이스

 

윈도우는 연결될 장치에 대해 그 장치의 사용법을 가장 잘 아는 제조사가 장치 드라이버를 함께 제공하게 한다.

그리고 API를 통해 장치 드라이버의 기능을 노출한다.

 

C# 응용 프로그램에서는 Win32 API를 직접 호출할 수 있지만 이렇게 만든 프로그램은 리눅스에서 실행할 수 없다.

따라서 특별한 목적이 없다면 사용하지 않는다.

 

5. 윈도우 응용 프로그램

윈도우 운영체제에서 실행되는 프로그램을 말한다.

모든 운영프로그램은 Win32 API를 사용해 운영체제에서 제공하는 기능들과 협력한다.

윈도우에서는 WIn32 API를 동적 링크 라이브러리(DLL: Dynamic Link Library) 파일로 제공한다.

참고: 응용 프로그램 개발자가 직접 사용하는 기본 DLL은 kernel32.dll, user32.dll, gdi32.dll정도가 있다. Visual C++ 언어를 사용하는 윈도우 프로그래머는 최소한 그 3개의 DLL에서 제공하는 API의 사용법에 익숙해져야 한다.

 

윈도우에서 사용자가 실행하는 파일은 보통 확장자가 EXE인데, EXE파일은 DLL 파일과 구조가 동일하다. 단, DLL은 내부에 구현된 API를 외부에서 참조할 수 있다. 

이러한 이유로 재사용 가능한 코드는 컴파일해서 DLL파일에 모아두고 서로 다른 EXE파일에서 공유해서 사용하는 방식이 일반적이다.

 

대부분의 윈도우 응용 프로그램은 1개의 EXE파일과 여러개의 DLL파일로 구성된다. 이는 C#으로 프로그램을 만들때도 마찬가지이다.

 

6. 32비트 응용 프로그램

32비트의 CPU의 기계어로 번역된 프로그램을 일컫는다.

32비트의 응용프로그램의 특징은 해당 프로그램이 사용할 수 있는 메모리의 주소가 2의 32제곱(4GB)라는 제약이 있다.

메모리의 용량 뿐 아니라 CPU와 메모리 간의 데이터 이동이 32비트 단위로 발생하며 CPU 내의 레지스터 크기가 32비트이므로 한번에 32비트 데이터만큼의 계산만 할 수 있다.

64비트 윈도우의 경우 32비트 응용프로그램을 그대로 실행할 수 있으나 woW64(Windows 32bit on Windows 64bit)를 중간에 두어 변환을 하는데 32비트 응용프로그램을 64비트 응용프로그램에서 실행할때 속도가 더 느려진다는 단점이 있다.

* 32비트 윈도우 운영체제는 4GB 가상 메모리 중 2GB영역을 운영체제 전용으로 예약하기 때문에 사실상 응용 프로그램에서 사용할 수 있는 메모리 주소는 2GB에 불과하다.

 

7. 64비트 응용 프로그램

64비트 운영체제에서만 실행되는 응용 프로그램이다.

마이크로소프트에서는 서버 운영체제의 경우 Windows 서버 2008 R2 제품 이후로 64비트 운영체제만 출시하고 있으므로 서버용 응용 프로그램에 관심이 있다면 64비트 환경에 익숙해지는 것이 좋다.

64비트는 메모리 주소를 2의 64제곱으로 지정할 수 있는데, 이론상 16EB의 메모리를 다룰 수 있지만 현실적인 이유로 윈도우에서는 커널 모드의 주소공간으로 8TB를, 사용자 모드의 주소 공간으로 8TB를 각각 예약한다.

* 32비트 실행 파일과 64비트 실행파일은 동일한 프로세스에 로드될 수 없다. 예를들어 32비트의 컴파일된 DLL은 64비트로 컴파일된 EXE또는 DLL과 함께 사용할 수 없다. 그 반대도 마찬가지

 

8. 윈도우 이외의 운영체제

1) 유닉스 : 현대 운영체제의 개념을 확립했다는 점에서 의미가 있다.

2) 리눅스 : 유닉스에 뿌리를 두고있지만 개인이 만들어 오픈소스로 공개한 운영체제이다. 무료로 클라이언트 및 서버 운영체제에 걸쳐 폭넓게 사용된다.

3) 맥 OS X : GUI기반이지만 유닉스에 뿌리를 두고있어 터미널 모드에서 사용되는 명령어가 유닉스/리눅스와 호환되는 부분이 많다.

4) IOS : 애플의 휴대전화 태블릿

5) 안드로이드 : 리눅스를 모바일 환경에 최적화 시킨 운영체제이다. 구글에서 개발했다.

6) 윈도우 폰 OS : 핸드폰을 위한 경량화된 운영체제이다. 윈도우 폰 10까지 출시됬다.

 

컴퓨터에 사용되는 운영체제는 대체로 x86 호환 시스템에서 운영되는 반면, 모바일/ 임베디드 기기에 사용되는 운영체제는 대부분 ARM계열의 CPU에서 동작한다.

728x90