운영 체제 개요

강정환·2021년 6월 22일
0
  • OS 탄생 배경

    • 1940~50 년대 초반의 컴퓨터는 한 번에 한 개의 프로그램만 실행했다.

      프로그래머는 책상에서 펀치 카드에 코드를 작성했다. 그 다음 펀치카드를 모아서 컴퓨터 운영자에게 건네주었다. 그 사람이 컴퓨터에 프로그램을 공급해주는 방식이었다. 사람이 컴퓨터에게 프로그램을 떠먹여 주는 수동적인 프로세스 였다.

    • 시간이 흐르면서 컴퓨터는 빨라졌다.

      사람이 뛰어다니면서 프로그램을 공급해 주는 속도가 실제 프로그램를 실행하고 출력하는 시간보다오래 걸리게 되었다. 컴퓨터 스스로 작동할 수 있는 방법이 필요했고 그래서 OS가 만들어 졌다.

  • 배치 프로세싱, 일괄 처리 시스템

    • 다음 프로그램을 바로 실행 하도록 개선함.

      한 번에 하나의 프로그램을 받는 대신 컴퓨터가 프로그램을 한꺼번에 받아서 일괄적으로 배치한다. 하나의 프로그램을 완료하면 자동으로 다음 프로그램을 실행한다. 누군가가 사무실에서 다음 프로그램을 찾느라 고생하는 시간이 없어졌다.

  • OS는 하드웨어 중개자, 장치구동기(device driver)

    • 시간이 지나면서 컴퓨터의 가격은 내려갔다. 컴퓨터의 시스템도 변해 갔지만, 프로세서, 펀치카드 판독기, 프린터는 변하지 않았다. 프로그래머들은 프로그램을 개발에 고민할 뿐만 아니라 모든 모델의 프린터, 주변 장치들과 접속하는 방법 또한 고민해야 했다.
    • 이를 위해서 장치 구동기(device driver)라고 불리는 API를 통해서 소프트웨어와 하드웨어가 쉽게 상호 작용 하게 만들었다. 이를 통해 프로그래머는 표준화된 메커니즘을 사용해서 입출력(I/O) 하드웨어와 대화할 수 있게 되었다.

  • 멀티 태스킹

    • 50년대 말 컴퓨터는 너무 빨라졌다. 프린터와 펀치카드 리더기 같은 느린 기계들을 기다리는 경우가 많았다. 프로그램이 I/O 때문에 차단되는 동안 비싼 프로세서는 놀고 있었다.(idle 상태)
    • Atlas Supervisor 라는 운영체제가 개발되었다. 이 운영체제는 자동으로 프로그램을 로드 하면서 동시에 여러 개의 프로그램을 단일 CPU에서 실행 할 수 있었다. 원리는 I/O 하드웨어 작업이 시작되면 그 하드웨어 작업이 끝나기를 기다리지 않고 해당 프로그램을 절전모드로 바꾼 다음 다음 대기 중인 프로그램을 실행하는 방식이다. I/O 작업이 끝나게 되면 절전모드를 종료하고 다음 명령문을 실행한다.
  • 가상 메모리, 동적 메모리 할당, 메모리 보호

    • 멀티태스킹에도 걸림돌이 있었다. 각각의 프로그램은 메모리가 필요한 데 다른 프로그램으로 전환할 때 메모리 안에 있는 이전 프로그램의 데이터를 잃을 수 없기 때문이었다. 해결책은 메모리 블록을 만들어서 프로그램마다 블록을 할당하는 것이다. 예를 들어 컴퓨터가 100개의 메모리 주소를 가지고 있다면 프로그램 a가 0에서 9까지 b는 10에서 19까지 메모리 주소를 할당해서 각 프로그램마다 메모리를 분리해서 관리하도록 했다. 만약에 프로그램 하나가 10개 이상의 메모리를 요구한다면 다른 메모리 블록에 할당해야 했다. 이 방법 은 유연했지만, 단점이 있었다. 메모리 블록 전체에 하나의 프로그램이 흩어져 있을 수 있었다.(연속되지 않고) 그래서 프로그래머가 메모리를 추적하기가 혼란스러었다. 이런 복잡성을 숨기기 위해서 운영체제는 메모리 위치를 가상화 한다.

    • 가상메모리를 사용하면 프로그램은 메모리가 항상 주소가 0부터 시작해서 단순하게 생각할 수 있다. 실제 메모리의 물리적 위치는 운영체제에 의해서 추상화되고 숨겨져 있다. 예를 들어서 프로그램 b의 실제 물리적 메모리 주소는 10 ~19이지만 가상 메모리에 의해 0~9로 나타난다. OS과 CPU 는 가상-실제 메모리를 다시 자동으로 매핑하여 처리한다. 그래서 프로그램 b가 메모리 위치 2를 요청하면 실제 주소 12를 읽어온다. 이 가상화는 a에서 더욱 유용하다 a는 분리된 두 개의 메모리 블록이 할당되어 있다. a는 가상 메모리에서 연속적인 20개의 블록 주소가 할당되어 있다. 메모리 10을 요청하면 20으로 매핑된다.

    • 이 메커니즘은 프로그램 메모리 크기를 유연하게 할 수 있다. 이를 동적 메모리 할당 이라고 한다. 동적 메모리 할당은 동시에 여러 프로그램을 실행하는 운영체제에 엄청난 유연성을 제공한다.

    • 또 다른 장점은 프로그램 서로가 더 잘 격리 된다는 것, 어떤 프로그램에 버그가 생겨서 잘못 된다면 다른 프로그램의 메모리가 아닌 자신의 메모리만 버리면 된다. 다른 프로그램에 영향이 가지 않는다. 이것을 메모리 보호라고 한다. 또한 바이러스나 악의적인 소프트웨어로 부터 보호하는데 유용하다.

    • Atlas Supervisor는 가상메모리와 보호 메모리 둘 다 가지고 있다. 이런 기능을 지원하는 최초의 OS였다.

  • 시분할 시스템, Multics

    • 멀티 태스킹을 좀 더 적극적으로 활용해서 프로그램을 아주 짧은 주기로 CPU에 할당하였다. 그래서 여러명의 사용자가 하나의 컴퓨터를 공유 할 수 있게 되었다.
    • 초기의 가장 영향력 있는 시간 공유 운영체제는 1969에 나온 Multics 이다. Multics는 처음부터 리소스의 안전을 위해 설계된 최초의 운영체제였다. 이런 안전함 때문에 OS만을 실행하기 위해서 많은 양의 메모리를 사용해야 했다.
  • 유닉스

    • Multics 프로젝트에 참여했던 캔 톰슨과 데니스 리치 등이 Multics의 일부 아이디어를 가져와서 유닉스라는 새로운 운영 체제를 만들었다. 유닉스는 OS를 두 부분으로 분리하였다. 첫번째는 커널이라고 부르는 I/O를 다루는 기능, 메모리 관리, 멀티태스킹 같은 OS의 핵심기능 두 번째는 커널이 아닌 프로그램과 라이브러리 같은 유용한 도구들이었다.
    • 커널을 만들 때 의도적으로 일부 기능만 남겨두었다. Multics에서 작성한 코드의 절반은 오류 복구 코드였고 그래서 무거웠다. 유닉스에서 그것들을 모두 빼버렸다. 오류가 발생하면 패닉이라는 루틴을 갖게 하고 재부팅하라는 메시지만 띄웠다.
    • 이런 단순함 때문에 저렴 할 수 있었고 다양한 하드웨어에 적용할 수 있었다. 그래서 유닉스의 인기가 많았다. 유닉스를 사용해 자신의 프로그램을 만들고 실행하는 개발자가 많아지게 되었고 그러면서 자연스럽게 유닉스에 기여되는 도구들의 수도 증가했다.
  • 현재

    • 현재 사용되고 있는 모든 OS 모두 멀티태스킹 가상, 보호 메모리를 갖추고 있다. 유튜브 보면서 글을 쓰면서 동시에 메시지를 주고 받고 있다. 이런 것들은 운영체제에 대한 십수년간의 연구, 그리고 프로그램들을 저장할 만한 충분한 크기의 메모리 없이는 불가능한 일이다.

0개의 댓글