운영체제가 발전한 과정
운영체제는 크게 고정 프로그래밍 방식, 내장 프로그래밍 방식, 로더 프로그램, 원시 운영체제, 최초의 운영체제(배치 운영체제), 다중 프로그래밍 운영체제, 시분할 다중프로그래밍, 개인용 운영체제로 나뉜다.
그 외, 임베디드 운영체제, 모바일 운영체제, 실시간 운영체제, 서버 운영체제 등이 있다.
고정 프로그래밍 방식 (fixed program computer)
1940년대 컴퓨터로 OS에 대한 개념이 없을 때이다.
이 때는 HW만 존재했고 키보드로 명령을 하는 개념이 없을 때이다.
그럼 어떻게 프로그래밍을 했을까?
종이에 스위치와 전선 연결도를 작성하며 배선판에 전선을 연결하는 방식을 사용했다.
하나의 계산을 위해 한 번의 입력(전선 연결)이 오래 걸리고 연산에도 오래 걸려서 고정 프로그래밍 방식이라고 한다.
대표적인 예로, AI의 시초인 앨런 튜닝의 Colossus, 최초의 전자식 컴퓨터 ENIAC이 존재한다.
Colosuss는 영화 '이미테이션 게임'에서 실화를 바탕으로 제작한 굉장히 유명한 녀석이다.
내장 프로그래밍 방식 (sotred program)
1945년 컴퓨터의 아버지 폰 노이만에 의해 제안된 방식이다.
현재 컴퓨터의 핵심적인 개념을 사용하고 있는 방식인데 1951년 EDVAC이라는 컴퓨터를 만들 때 사용된 방식이다.
내장 프로그래밍이란 CPU와 메모리를 분리하고 소프트웨어와 하드웨어를 분리하여, 실행할 프로그램을 메모리에 담고 CPU가 프로그램을 실행하는 방식이다. 이 때, 입출력 장치를 통해 메모리에 적재하게 되는데 우리가 아는 입출력 장치와 유사하다. 자판기와 같은 장치로 펀치카드에 구멍을 뚫게 되고 카드리더기로 펀치 카드를 읽으면서 프로그램을 메모리에 적재하게 된다.
로더 프로그램
1950년대로 운영체제의 개념이 시작된 시기라고 볼 수 있다.
아직도 유명한 IBM 회사에서 만든 첫 번째 내장 프로그래밍 방식의 컴퓨터가 대표적인 예이다.
IBM 컴퓨터는 범용 컴퓨터로 프로그래머들이 대기해서 사용한다.
IBM 컴퓨터를 사용하는 방법은 아래와 같다.
1. 프로그래밍 내용을 종이에 작성한다.
2. 작성된 프로그래밍 내용을 카드 천공기를 통해 작성한다 - 기계어로 펀칭된 펀치 카드 생성
3. 카드 리더기를 통해 펀치 프로그램들을 읽는다. - IBM 컴퓨터의 LoadButton
4. 입력된 프로그램은 메모리의 0번지부터 적재되면서 실행한다.
그 외에도 스위치에 이진수 명령을 스위치에 설정하고 CPU 레지스터 또는 메모리에 수동으로 저장 후 프로그램을 실행시키는 방법도 있다. 보통, 첫번째 카드는 두 번째 카드에 작성된 프로그램을 메모리에 로드하는 코드만 작성하고 두번째 카드는 실제 수행하는 목적 프로그램을 작성하게 된다. 오늘날 컴퓨터의 동작과 동일하다.
원시 운영체제
1955년 GM(General Mortors)에 의해 개발 된 GM OS가 존재한다.
GM은 자동차 제조 기업으로 IBM701의 고객이었는데 펀치 카드에 담긴 프로그램을 메모리에 로딩하는 로더 프로그램을 테이프에 저장해서 필요할 때마다 실행하는 로더 프로그램을 개발하게 된다.
사용자의 프로그램을 읽어 실행시켜준다는 의미에서 원시적인 운영체제라고 한다.
IBM 701에서 첫 번째 카드 대신 자기 테이프 장치를 메모리에 적재하면서 같은 작업에 대해 여러번 카드를 작성해야하는 반복적인 작업을 피할 수 있게 되었다.
최초의 운영체제, 배치 처리
GM 회사에서 IBM 701의 처리 속도 문제 대문에 IBM 704를 주문하게 되는데 여전히 문제점을 발견한다.
1. 개발자들이 대기해야한다.
2. 컴퓨터의 idle time이 많다. (프로그램 하나가 처리되고 나면 다음 개발자가 프로그램을 작성하는 동안 놀게 됨)
3. 입출력 장치를 제어하는 코드, 하드웨어 서비스 루틴은 개발자가 별도로 작성해야한다.
위와 같은 문제점으로 GM과 NAA에서 IBM704에 대해 I/O 합동 개발을 진행한다.
GM과 NAA에서 합동 개발한 GM-NAA-IO를 최초의 운영체제라고 하는데 그 이유는 아래와 같다.
1. 여러 개발자가 작성한 작업들을 하나씩 자동으로 메모리에 로딩하고 한 번에 하나의 작업을 수행하도록 하는 배치 방식(batch operating system)으로 작동한다.
2. 사용자의 입출력을 다루는 I/O 코드 프로그램은 항상 메모리에 상주하고 있다.
3. 모든 입출력 장치를 제어하는 루틴들을 라이브러리 형식으로 갖추고 공유된다.
GM-NAA I/O OS의 구조는 [어셈블러 코드, 로더 프로그램, 공통 입출력 코드 및 메인 코드]로 구성되어있다. 오늘날의 커널과 유사하다. 아래는 GM-NAA I/O OS를 탑재한 IBM 704의 실행 과정이다.
1. 개발자들이 각 각 어셈블러로 작성도니 펀치 카드를 카드 리더기에 삽입한다.
2. 삽입된 카드 입력 장치는 자기 테이프에서 미리 읽어 놓는다.
3. 입출력 메인 코드가 실행되면 사용자 프로그램을 읽고 어셈블러 코드에서 기계어 목적 코드로 번역한다.
4. 기계어 목적 코드는 로더 프로그램에 의해 메모리에 적재된다.
5. CPU는 메모리에 적재된 목적 프로그램을 실행하고 입출력 코드를 실행한다.
'CS > 운영체제' 카테고리의 다른 글
6. 커널 (Kernal) (0) | 2024.04.21 |
---|---|
5. 운영체제의 역할 (1) | 2024.04.21 |
4. 시분할 다중프로그래밍(Time Sharing Multi-Programming) OS (0) | 2024.04.21 |
3. 다중 프로그래밍 (Multi-Processing) OS (1) | 2024.04.21 |
1. 운영체제(OS, Operating System)란? (1) | 2024.04.20 |