본문 바로가기

OS의 의의

1. OS의 기능

 

OS가 없던 초기의 컴퓨터에서 프로그램을 만들려면, 아무 프로그램도 없는 상태에서 프로그래머가  모든 기능을 처리하는 프로그램을 처음부터 끝까지 작성해야 했다.

기계어로 프로그램을 작성한 후 스위치라는 것을 사용해 완성된 코드를 입력해야 했는데, 이는 상당히 까다로운 작업이었다. 그래서 프로그램을 적재(load)하고 실행하는 기능만 갖춘 모니터 프로그램이라는 것이 개발되었다.

 

미리 모니터 프로그램을 실행시켜 둔 후, 여러가지 프로그램을 메모리에 적재해 실행할 수 있게 되어, 이제 프로그래머는 모든 기능을 처리할 필요는 없어졌다.

 

그런데 사실 많은 프로그램이 갖는 공통점이 있다. 키보드로부터 데이터를 입력받고, 모니터로 데이터를 출력하는 것이 대표적인 예다. 최종적으로 완성되는 프로그램을 다를 지라도 이 부분은 공통적이므로 새로운 프로그램을 만들 때마다 이 부분을 작성하는 것은 시간 낭비였다. 때문에 기본적인 입출력을 담당하는 부분이 모니터 프로그램에 추가되었는데, 이것이 초기의 OS의 형태다.

 

시간이 지나 기술은 더 발전했고, 프로그래머의 편의를 위한 하드웨어 제어 프로그램과 ⒜언어

프로세서, 여러 유틸리티 기능이 추가되었고, 현재의 OS와 유사한 형태까지 발전한 OS가 등장했다. 이처럼 OS란 하나의 프로그램이 아니라 여러 프로그램의 집합체라고 할 수 있다.

 

 

 

 

 

 

2. 하드웨어는 OS가 책임진다

 

애플리케이션 개발 프로그래머는 OS의 기능을 사용하는 애플리케이션을 개발하는 것이다. OS덕분에 프로그래머는 하드웨어를 신경쓸 필요가 없게 되었기 때문이다. 물론 하드웨어에 대한 기본 지식은 갖추어야 하지만, OS가 있는 한 하드웨어를 직접 제어하는 코드를 작성하지는 않는다.  OS가 하드웨어에 대한 까다로운 작업들을 대신 해주기 때문에, 더 효율적으로 프로그램을 작성할 수 있게 되었다. 

 

하지만 이러한 사실을 늘 염두에 두고 있어야 한다. 그렇지 않으면 어떤 문제가 발생했을 때, 그 문제의 해결 방안을 찾을 수 없게 될 수 있다. OS 덕분에 편해졌지만, 왜 이렇게 편해졌는 지 알아야 한다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <time.h>
 
int main()
{
    time_t t;
 
    time(&t);
    printf("%s\n", ctime(&t));
 
    return 0;
}
cs

 

 

위 프로그램은 다음과 같이 하드웨어를 제어하는 과정을 거쳐 현재 시간이 출력된다.

 

①  time_t t; 에  의해  time_t 형 변수를 위한 메모리 영역이 확보된다.

②  time(&t); 에 의해 현재 시각을 나타내는 데이터가  t 의 메모리 영역에 저장된다.

③  printf("%s\n", ctime(&t)); 에 의해  t 의 메모리 영역에 저장된 데이터가 

    모니터에 출력된다.

 

애플리케이션의 실행 파일은 컴퓨터 내부의 CPU가 직접 해석해 실행할 수 있는 코드로 이루어져있다. 하지만 컴퓨터의 메인보드에 부착된 ⒝실시간 클록을 제어하거나 모니터의 I/O를 직접 제어하는 네이티브 코드는 없다. 그렇다면 어떻게 애플리케이션이 하드웨어를 제어한 것일까?

 

OS가 작동하고 있는 환경에서 실행되는 애플리케이션은 OS를 통해 간접적으로 하드웨어를 제어할 수 있다.  time  함수나  printf  함수의 실행 대상은 OS다. 애플리케이션의 명령어를 OS가 해석하고, OS가 실시간 클록이나 입출력 장치 등을 제어하는 것이다.

 

 

 

 

 

 

⒜언어 프로세서(言語 processor): ⒝원시 프로그램을 기계어로 번역하기 위한 소프트웨어. 

  ⒞어셈블러, 컴파일러, 인터프리터가 있다.

⒝실시간 클록(real-time clock): 날짜와 시각을 유지하는 메인보드에 위치한 IC.

⒞원시 프로그램: 어셈블리어나 고급 언어로 작성된 프로그램.

  소스 프로그램이라고도 부르며, 목적 프로그램과 반대되는 개념이다.

⒟어셈블러(assembler): 어셈블리어를 기계어로 번역해 주는 컴퓨터 언어 번역 프로그램.

⒟인터프리터(interpreter): 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램. 또는 그런 환경.

 

 

 

 

 

 

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

EXE 파일의 실행  (0) 2019.05.13
EXE 파일의 생성  (0) 2019.04.15
부트 스트랩  (0) 2019.04.08
프로그램의 이식  (0) 2019.04.08
Ports  (0) 2019.04.04