지난 포스팅에서 운영체제가 무엇인지 알기 위해 운영체제의 개념에 대해 알아보았다.
그럼 이 운영체제는 어떻게 생겨나게 된 것일까?
1. 고정 프로그램 컴퓨터 시대 - 1940 년대
이 당시 컴퓨터는 현재 우리가 사용하는 컴퓨터와는 상당히 다른 모습을 가지고 있다.
이 시기는 소프트웨어라는 개념 자체가 존재하지 않고 컴퓨터의 모든 기능을 하드웨어로 만들었다.
이때의 컴퓨터는 단지 실행하고자 하는 하나의 작업을 수행하는 기계에 불과했다.
어떤 작업(이제 작업을 프로그램이라 부르겠다)을 기게에 심고 나면, 그 컴퓨터는 그 작업만을 수행할 수 있었다.
즉 하나의 기계는 하나의 기능만을 수행할 수 있었던 것이다. 그렇기에 새로운 기능을 구축하는 일은 매우 어려운 일이었다.
당연히 CPU와 메모리의 개념이 분리되지 않았고, 오늘날처럼 프로그램을 저장 장치에서 메모리에 정재하여 실행한다는 개념도 없었다.
2. 일괄 작업 시스템(내장 프로그램 방식) - 1945년 ~
그런데 폰노이만(von Neumann)이라는 헝가리 출신 천재가. 하드웨어와 소프트웨어를 분리시키는 내장 프로그래밍 컴퓨터 개념을 발표한다.
내장 프로그래밍 방식이란 컴퓨터의 구조를 CPU와 전자식 메모리로 나누고, 프로그램의 명령들을 전자식 메모리에 적재하고, CPU가 메모리에서 명령들을 하나씩 CPU 내부로 가지고 와서 처리하는 방식을 의미한다.
폰노이만이 제안한 컴퓨터 구조는 위와 같다. 제어장치는 메모리에서 명령어를 읽어오고, 명령어를 해석한다. 그리고 연산 장치에게 명령에 지시된 연산을 수행하도록 제어한다. 메모리 내의 명령이나 데이터 주소로 엑세스 된다. 레지스터는 이를 돕는다. 더 자세한 내용은 뒤에서 다루게 될 것이기에 간단히 구조만 파악하고 넘어가자.
그러니까 이제 실행할 로직을 메모리에 담을 수 있고, CPU가 그 로직을 처리하는 구조를 이루게 된다는 것이다.
하지만 아직도 작업을 컴퓨터가 한번에 하나 씩 밖에 처리하지 못했다. 모든 작업을 한번에 처리하기 때문에 프로그램 실행 중간에 사용자가 데이터를 입력하거나 수정하는 것이 불가능했다. 또한 작업을 교체하고 읽어들이는데 긴 시간이 걸려 일을 하지 않는 장치도 존재했다..
이런 문제를 극복하기 위해 IBM에서 GM-NAA I/O라는 운영체제가 만들어진다. GM-NAA I/O는 어셈블러 코드, 로더 프로그램, 공통 입출력 코드 및 메인 코드로 이루어져 있었다. 아직 한번에 한 개의 프로그램만 실행할 수 있었지만 로더 프로그램을 통해 목적 코드를 메모리에 적재하고 실행시킬 수있었다. 또한 데이터를 입력하고, 결과를 출력해주기도 하였다.
이는 오늘날 운영체제와 같이 장치 관리 기능과 프로그램 적재 및 실행 기능을 갖추었고, 대기 중인 작업들을 하나씩 적재하고 실행시키는 로더 프로그램을 가지고 있었기에 최초의 운영체제로 평가 받는다.
배치(batch)란 한 개발자가 작성한 핀치카드의 묶음이며 배치 작업을 줄여 부르는 말이었다. 배치 카드 하나는 작업을 의미하며, 관리자는 입력 컴퓨터를 작동시켜 쌓여 있는 배치를 읽어 장치에 저장했다.
배치 처리의 특징은 한번에 한 개 씩 순차적으로 실행되며, 비대화식이고, 프린터에 결과를 출력하며, 작업을 요청한 작업을 한 참 뒤에나 받을 수 있다는 점이다.
3. 다중 프로그래밍 운영체제 - 1960~
시간이 지날 수록 하드웨어는 발전했고 CPU와 메모리의 성능은 향성되었다.
그런데 배치 방식의 프로그래밍은 발전된 CPU를 완전히 활용하지 못했다.
배치 구조 프로그래밍은
CPU작업 - I/O - CPU작업 - I/O
와 같은 반복 작업을 수행한다. 그런데 I/O 장치가 CPU보다 수백에서 수천배 느렸기 때문에 엄청난 CPU 낭비가 발생한 것이다.
그래서 등장한 것이 다중 프로그램이 기법이다.
다중 프로그래밍은 여러 프로그램을 메모리에 올려 놓고 동시에 실행시키는 기법이다. CPU가 한 프로그램을 실행하다 I/O가 발생하면 입출력이 완료될 때 까지 메모리에 적재된 다른 프로그램을 실행한다.
메모리에 적재된 프로그램들이 CPU가 자유로운 한 모두 실행되기 때문에 CPU가 노는 빈도가 급격히 줄게 되었다.
모든 프로그램이 I/O 중이라면 CPU는 놀수 밖에 없곘지만 말이다.
하나의 CPU로 여러 작업을 동시에 실행할 수 있어 여러 작업이 동시에 실행되는 것처럼 보이게 하며 CPU의 활용률과 처리율이 더 증가되었다. 오늘날 대부분의 시스템이 채택하고 있는 방식이기도 하다.
그런데 당시 다중프로그래밍의 도입과 함께 또 다른 문제가 찾아오게 된다.
이 문제들 또한 뒷부분에서 더 자세히 다룰 것이기에 어떤 문제가 있었는지만 살펴보자.
- 큰 메모리 이슈
- 프로그래밍 할당, 관리 이슈
- 메모리 보호 이슈
- CPU스케쥴링 및 컨텍스트 스위칭
- 인터럽트 개념의 도입
- 동기화
- 교착상태
4. 시분할(Time sharing) 다중 프로그래밍
시분할 다중 프로그래밍은 I/O 작업 시 CPU가 다른 프로그램을 수행하는 다중 프로그래밍과는 달리 적재된 여러 프로그램을 시간 단위로 나누어 번갈아 실행시키는 기법이다.
시분할 다중 프로그래밍 또한 다중 프로그래밍과 비슷한 시기에 연구되었다.
처음에 다중프로그램은 비대화식 처리방식을 채택해 느린 응답시간과 오랜 대기 시간을 가졌었다.
하지만 MIT 대학의 John McCarty 교수로 인해 대화식 운영체제가 제안 되었고 이를 기반으로 시분할 운영체제가 시작된다.
시분할 운영체제는 여러 개의 프로그램을 메모리에 적재하고 시간 할당량(타임슬라이스)를 정해 시간 할당량 만큼 메모리에 적재된 몯느 프로그램에게 돌아가면서 CPU를 할당하고 실행시킨다. 시분할이라는 이름은 CPU 사용 시간을 여러 프로그램에게 나누어 주는데서 붙은 이름이다.
시분할 운영체제는 사용자 개수만큼 사용자와 대화하도록 미리 준비된 프로그램을 실행시킨다. 이 프로그램은 해당 터미널로부터 사용자의 명령을 받아 처리하고 결과를 터미널에 출력한 후 사용자로부터의 다음 명령을 기다리게 된다.
통계 처리와 같이 한 번에 많은 시간이 걸리는 작업은 배치 운영체제가 적합하지만, 한 번에 처리할 작업량이 적고 대화식으로 작업을 처리할 경우 시분할 운영체제가 적합한 것이다. 시분할 프로그래밍 역시 I/O 시에는 다른 프로그램을 실행한다.
5. 기타 프로그래밍
P2P 시스템
- 특정 서버에 집중되는 가부화를 해결하기 위해 만들어진 시스템이다.
- 서버를 거치지 안혹 사용자와 사용자를 직접 연결한다.
가상화 시스템(Virtualization)
- OS는 하드웨어를 추상화한다. 컴퓨터 자체도 추상화시키는 것이 가상화 시스템이다
- 컴퓨터 위에서 컴퓨터를 소프트웨어로 돌리는 것이다.
모바일 운영체제
- 모바일 전화기, 스마트폰 등 다양한 이동용 혹은 휴대용 장치에서 실행되도록 만들어진 운영체제
임베디드 운영체제
- 임베디드 컴퓨터에서 장치들을 제어하고 작동시키는 기능
실시간 운영체제
- 실시간 애플리케이션 혹은 태스크를 각각 정해진 데드라인 시간 이내에 처리하도록 보장하는 것을 목표한다.
'운영체제' 카테고리의 다른 글
[운영체제] 4. 스레드와 멀티 스레딩 (1) | 2025.01.27 |
---|---|
[운영체제] 3. 프로세스와 프로세스 관리 (0) | 2025.01.14 |
[운영체제] 2. 컴퓨터 시스템과 운영체제 (0) | 2025.01.06 |
[운영체제] 1-1 운영체제 개념 (1) | 2024.12.05 |
[운영체제] 0. 운영체제 공부 시작 (2) | 2024.12.05 |