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 |