운영체제가 무엇인지에 대해서는 여기를 통해 알 수 있다. 이번 포스터에서는 과거부터 지금까지 운영체제가 어떻게 변화하였는지에 대해 알아보는 시간을 가져볼 것이다. 이해를 해야하거나 어려운 내용은 없지만, 그래도 배경지식으로 알고 있으면 매우 좋다고 생각한다.


역사로 보는 운영체제


1950년

1950년대에는 처음 컴퓨터가 등장하는 시기이다. 컴퓨터를 공부하는 사람이라면 한 번쯤은 들어봤을 이름인데, 애니악(ENIAC)이 최초의 컴퓨터이다. 이 시기에 나온 컴퓨터는 1개의 응용프로그램도 실행시키기 어려웠기 때문에 운영체제는 존재하지 않았다.


사진1. 최초의 컴퓨터 애니악(ANIAC)
출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ncm_master&logNo=130185399180
  • 정확히는 1946년 2월 14일 미국 펜실베니아 대학 연수고에서 처음 공개되었다.
  • 처음에는 군사적 목적으로 만들어졌다.
  • 사진만 봐도 엄청 복작해보이고, 감전될 것 같다.
  • 이 컴퓨터의 불편함을 느끼고 폰 노이만폰 노이만 구조를 생각해냈다.
  • 운영체제는 없었다.(응용프로그램 1개 돌리기도 힘들었다.)


1960년 초기

1950년대 보다 비교적 프로그램의 수도 많아지고, 사용자들도 많아지는 시기이다. 이로 인해서 문제점도 발생했는데, 다음과 같다.

  • 철수 : 프로그램1 실행 : 예상시간 12시간
  • 영회 : 프로그램2 실행 : 예상시간 1분
  • (경우1) : 프로그램1 실행 -> 프로그램2 실행
  • (경우2) : 프로그램2 실행 -> 프로그램1 실행
  • (경우1)은 영희가 12시간 기다린 후에 프로그램을 실행시킬 수 있다.

위와 같은 문제를 해결하기 위해 배치 처리 시스템(Batch Processing system)이 출현했다.


배치 처리 시스템(Batch Processing System)


여러 사람들이 각자 실행해야하는 프로그램을 순차적으로 배열하면, 하나의 프로그램이 끝났을 때 순차적으로 다음 프로그램을 실행시켜주는 시스템

  • 과거에는 컴퓨터가 희소했고, 여러 사람이 1대의 컴퓨터를 공유하면서 사용했기 때문에 필요한 기술
  • 사용 시간을 예측하기 어렵기 때문에 순차적으로 실행
  • 하지만 등록한 순서대로 실행되기 때문에 다양한 예측시간을 가진 프로그램을 효율적으로 실행시킬 수 없다는 단점이 있다.


1960년 후반대

배치 처리 시스템의 비효율성 덕분에 다양한 개념이 제안되었다.

  • 시분할 시스템(Time Sharing System)
  • 멀티 태스킹(MultiTasking)
  • 멀티 프로그래밍(MultiProgramming)

위 개념들은 기술적으로는 유사하지만, 목적에서 다르다. CPU의 실행시간을 쪼개서 사용한다는 점과 다중 사용자를 지원하고 응용 프로그램을 동시에 실행시키는 특징이 있다. 하지만 아쉽게도 아이디어로는 제안되었지만 운영체제로 구현되지는 않았다.


시분할 시스템과 멀티시스템

CPU를 사용하는 시간을 잘게 쪼개서 여러개의 응용 프로그램을 동시에 실행하는 기법

  1. 시분할 시스템 : 다중 사용자를 지원하고, 컴퓨터의 응답 시간을 최소화하는 시스템
    • 다중 사용자 지원 == 응답 시간 최소화
    • 여러 프로그램을 시간적으로 잘게 쪼개서 한 프로그램이 실행될 때 중간에 다른 프로그램이 실행될 수 있도록 하여 응답 시간을 줄이는 방법
    • 예를 들어 App1이 12시간 소모되는 프로그램이고, App2가 키보드를 누르는 작업이라고 할 때, App1이 실행될 때 App2가 실행되면 12시간이 지난 후에 키보드가 눌리는 문제가 있지만, 시분할 시스템을 이용하면 해당 문제를 해결할 수 있다.
  2. 멀티 태스킹 : 단일 CPU에서, 여러 프로그램의 병렬 실행을 가능하게 하는 시스템
    • 사실 시분할 시스템과 같은 개념이지만, 목적이 다르다.
    • 시간을 잘게 쪼개서 여러 프로그램을 동시에 사용하면 마치 여러 프로그램이 동시에 실행되는 것처럼 보이는 기술
    • 예를 App1(노래 듣기)을 하면서 App2(문서작업)을 실행시키는 경우 인간은 동시에 되는 것처럼 느낌
  3. 멀티 프로그래밍 : 최대한 CPU를 많이 활용하는 시스템(시간대비 CPU활용도 높이기)
    • 이것 또한 시간을 잘게 쪼개서 사용하는 기술
    • CPU에서 App1이 실행되다가 특정 이벤트(ex. 저장소에서 데이터 읽어오기)가 발생했을 때 CPU는 해당 이벤트가 완료될 때까지 기다린 후에 다시 작동한다. 이 시간을 낭비하지 않고 다른 프로그램(App2)을 실행하는 기술이다.


시분할 시스템, 멀티 테스킹, 멀티 프로그래밍은 기술적으로는 같지만 목적이 다르기 때문에 용어를 달리 사용한다. 하지만 보통 혼용해서 쓰는 경우가 많다!


1970년대


이 시기에는 제대로 된 운영체제(OS)가 출현하기 시작했다.


유닉스(UNIX)

  • 미국 A&T사의 벨 연구소에서 개발(켄 톰슨, 데니스 리치)
  • 시분할 시스템, 멀티 태스킹, 멀티 프로그래밍이 포함(다중 사용자 지원)
  • 사용자 입장에서 매우 중요해진 핵심적인 소프트웨어가 되었다.
  • 어셈블리어와 C언어로 개발되었다.
  • 현대 운영체제의 기본 기술을 모두 포함한 최초의 운영체제이다.


운영체제 개발과 C언어


C언어가 개발된 이후에 유닉스가 개발되었는데, 이전에는 어셈블리어로 소프트웨어를 개발했다. 하지만 어셈블리어의 경우 기계어와 1대1 대응되는 매우 low-level의 프로그래밍 언어이기 때문에 컴퓨터마다 CPU와 Memory등의 물리적인 부분을 다 일일히 다르게 지정을 해줘야했다. 즉, 하드웨어마다 다른 코드가 사용되는 것이다. 따라서 컴퓨터다 다시 소프트웨어를 개발해줘야하는 문제가 있었고, 프로그래밍 복잡도가 매우 높았다.


C언어의 등장

C언어와 컴파일러를 이용하면 어셈블리어로 변환해주기 때문에 다양한 컴퓨터에 대해 한 가지 언어(그 당시 C언어)로 작성을 해도 모두가 호환되는 코드로 자동 변환된다. 따라서 여러 컴퓨터에 대해 코드를 다시 작성할 필요가 없었고 상대적으로 프로그래밍 복잡도개 매우 낮아졌다. C언어를 기반으로 운영체제를 개발하게 되었고, 컴퓨터가 조금씩 달라도 모두 동일하게 사용할 수 있게 되엇다.


1980년

개인용 컴퓨터(PC)가 본격적으로 도입되는 시대이다. 1980년대 이전에는 대형 컴퓨터를 여러 사람이 접속해서 사용하는 시대였다. 터미널 환경이었던 CLI(Command Line Interface)에서 사용자가 편히 사용할 수 있는 GUI(Graphical User Interface)로 바뀌었는데, 이때 마우스가 사용되었다.

사진1. 최초 GUI 운영체제
출처 : https://www.youtube.com/watch?v=f_Q0XPher3o


CLI와 GUI 사용자와 컴퓨터를 연결해주는 방법은 크게 2가지가 있다.

  1. CLI(Command Line Interface) : 터미널 환경으로 코드를 직접 작성하여 컴퓨터와 대화하는 방법
    • cmd창을 열면 보이는 검은 화면으로 여러 명령을 실행하는 방법
  2. GUI(Graphical User Interface) : 마우스로 클릭하는 방법(CLI보다 편리한 방법)


1990년

1980년보다 응용 프로그램의 개수가 많아지고 GUI 환경이 발전되었으며 사용자가 증가했다.

  • Windows OS의 대중화
  • 엑셀, 워드 프로세서 등의 응용 프로그램 출현
  • 월드와이드웹(WWW)의 출현으로 네트워크 기술이 발전
  • 오픈소스 운동 활성화 시작
    • 유닉스 계열 OS와 응용 프로그램을 자체 개발하고, 소스를 오픈하겠다고 선언
    • 이 시기에 등장한 것이 리눅스(LINUX)


Killer Application

특정 Application을 이용하기 위해서는 해당 Application을 실행시킬 수 있는 장치를 구입해야하는데, 이러한 Application을 Killer Application이라고 한다.

  • Excel을 사용하기 위해서는 Windows OS를 구입해야 하는데, 이때 Excel이 Killer Application
  • 축구게임(위닝)을 하기 위해서는 플레이스테이션을 구입해야 하는데, 이때 축구게임(위닝)이 Killer Application


2000년

오픈소스가 더욱 활성화되었고 가상머신, 대용량 병렬처리가 활성화되었다.

  • 리눅스(Linux) 운영체제 활성화
  • 웹서버를 위한 아파치(Apache) 출현
  • 대용량 데이터 관리를 위한 프로그램인 MySQL(데이터베이스)
  • 안드로이드, 딥러닝, IoT 등의 기술 발전
  • 가상머신의 출현으로 1대에 여러 OS 설치 가능


운영체제의 역사에 대해 간단히 알아보았다. 사실 컴퓨터를 그냥 소모만 했었지 이런 역사를 공부한 적은 없었다. 하지만 이렇게 변천사를 보니 매우 새롭고 신기했다. 그리고 이해가 안 되던 부분들도 조금씩 해결이 된 느낌이 들었다. 또한 무궁무진하게 발전을 하고 있다는 것도 느꼈고 그 시대에 따라가기 위해 열심히 해야겠다는 생각을 하게 되었다!


읽어주셔서 감사합니다.(댓글과 수정사항은 언제나 환영입니다!)