운영체제 역사

sun202x·2023년 1월 18일
0

운영체제

목록 보기
8/23
post-thumbnail

해당 게시글은 kocw에서 제공하는 금오공과대학교 최태영 교수님의 무료 강의를 공부하고 정리하기 위해서 만들어졌습니다.

MS-DOS

  • 굉장히 간단한 초기 운영체제
  • 임베디드 시스템을 만들때 아주 간단하게 로우 레벨로 만들기에 적합
  • 메모리가 작은 시스템에 적합

UNIX

  • 2차 세계대전 당시 컴퓨터가 나오고 암호를 해독하기 위한 시스템이 탄생
  • 이후 전쟁이 끝나고 기업들이 이러한 시스템을 가져다 쓰면서 인건비를 절약하려고 함
  • 가능한 모든 기능을 할 수 있는 Multics 라는 것을 개발하기 시작
  • 미국 전역의 IT 연구원들을 모아서 개발하기 시작했고, 몇가지 설계 오류를 발견하여 Multics 프로젝트는 중단
  • 연구원들은 철수했고, 그 중 Bell lab이라는 연구소의 원구원들이 Multics 개발 경험을 살려서 아주 작은 운영체제를 만들게 되는데, 이것이 바로 UNIX이다.
  • 첫 UNIX의 기능은 아주 작은 기능만 포함
    • 아주 간단한 파일 시스템
    • 아주 간단한 터미널 드라이브
    • cpu 스케줄ke
    • 간단한 메모리 관리
  • 이후 뉴스 그룹에 UNIX 개발 소식을 알려서 사람들에게 배포 시작
  • berkely 주립대학교에서 UNIX를 가져와서 기능을 추가하기 시작
    • BSD 라는 이름의 os 탄생
  • Bell lab에서도 사람들이 기능을 추가하는 것을 보고 몇가지 기능을 더 추가하여 SystemV(5)를 탄생시켰다.
  • 그러다 보니 운영체제에 너무나 많은 기능이 들어가게 된다.
    • 크게 계층을 나누면,
      • Hardware
      • Kernel
      • Program
      • User
  • 그러다 보니 크게 두 가지 문제가 생겼다.
    • 기능이 너무 커지다 보니 커널에 에러가 날 가능성이 커졌고,
    • 에러가 생기면 시스템이 뻗어버려서 에러 디버깅이 힘들어 졌다.
  • 이러한 문제들 때문에 UNIX를 변경하려는 시도가 생겼다.

Layerd Approach

  • UNIX를 하나로 두지 말고 여러 계층을 나눠서 감싼 형태로 만들자
  • 제일 안쪽이 하드웨어, 그 위 디바이스 드라이버를 둠으로 안쪽 레이어를 직접 접근하지 못하도록 했다.
  • 레이어를 나눔으로써 유지보수가 쉬워졌다.
    • 오류가 발생하면 레이어를 하나씩 제거하면서 오류를 찾으면서 오류 검출이 쉬워졌다.
    • 또한 성능 개선 시 레이어를 하나씩 제거하면서 성능 개선이 필요한 부분을 찾기가 쉬워졌다.
  • 막상 구현하려다 보니 문제가 발생
    • 파일 시스템은 더 빠른 읽기, 쓰기를 위해 buffer, cache를 사용하여 메모리를 사용한다.
    • 자연스럽게 파일 시스템 아래에 메모리를 관리하는 형태의 구조가 생겨났다.
    • 메모리를 사용하는 것은 비용이 많이 들기 때문에 swap이라는 방식을 사용하여 사용자에게 메모리를 제공
      • swap은 메모리가 다 차서 더 이상 공간이 없게 되는 경우
      • 현재 실행중인 프로세스 하나를 통째로 복사해서 하드디스크에 넣어두고 메모리 공간을 비운다.
      • 그러고 나서 빈 메모리를 사용할 수 있게 하는 기능이다.
    • 이 swap이 메모리에서 하드디스크를 접근해야 하는 상황이 발생하면서
    • 파일시스템->메모리->파일시스템 순으로 순환되는 상황이 발생한다.
  • 이러한 상황들이 한 두가지가 아니라서 현실적으로 레이어를 두는 것이 어려워졌다.

Microkernel

  • kernel에 굳이 없어도 되는 모듈(유저 모드에서 실행해도 되는 것들)
    • 파일 시스템 모듈
    • 디바이스 모듈
    • 네트워크 기능을 하는 모듈
  • 이러한 것들을 분리하여 기능을 줄여나간 것이 Microkernel이다.
  • Microkernel 형태로 만들면 좋은 점이
    • 새로운 기능이 생기면 유저 모드에 추가하면 되므로 확장이 편해졌다.
      • 반대로 커널에 모듈을 추가하는 것은 굉장히 어렵다.
    • 에러가 발생하여 모듈이 중단되도 다른 모듈 들은 정상 동작하기 때문에 해당 모듈만 재가동 시킬 수 있다.
      • 커널 부분은 고장나면 시스템이 뻗어버린다.
    • 유저 모드로 침입이 발생하면 권한 체크를 하기 때문에 침입을 거르기 쉬워진다.
  • 그러나 이러한 구조도 문제가 있는데,
    • 모듈을 분리함 으로써 메세지 캐싱이나 시스템 콜이 세 배로 늘어나게 된다.
    • 따라서 성능이 느리다.
  • 이러한 단점 때문에 Microkernel의 인기가 식어갔다.

Modules

  • 어떤 모듈이 다른 모듈의 리소스를 접근하기 위해서는 공개된 인터페이스를 통해서만 접근해야 한다.
    • Oriented Object Programming(OOP) 개념이 들어갔다.
  • 이러한 개념을 유저 모드 뿐만 아니라 커널에도 적용시킨다.
  • 중앙에 커널을 동작시킬 수 있는 함수들(인터페이스)을 호출하여 동작시키면 이전 Microkernel 보다 더 빠르게 실행이 가능하다.
  • 이것이 Modules라는 개념이다.

Hybrid System

  • 상용화 된 운영체제는 각각의 장점을 취합한 하이브리드 시스템으로 구현되어 있다.
  • 리눅스와 솔라리스는 모듈러 구조와 가깝게 구현되어 있다.
  • 윈도우 같은 경우 monolithic 구조로 되어 있으면서 Microkernel 구조를 많이 따라가고 있다.
  • 맥 같은 경우도 마이크로 커널 형태를 따라가고 있다.
  • 모바일 디바이스에서 구동되는 운영체제 같은 경우
    • ios는 mac os x의 구조를 거의 가져왔다.
      • 그러나 모바일 같은 경우 사용자 인터렉션이 중요하기 때문에
      • 이를 처리하기 위한 멀티 미디어 레이어를 추가하였다.
    • 안드로이드는 아래에 리눅스 커널을 사용하고 있다.
      • 그 위에 자바가 돌아가기 위한 virtual machine을 사용하기 위한 라이브러리가 들어있다.

operating-system debugging

  • 리눅스와 솔라리스에서는 DTrace라는 것을 제공한다.
profile
긍정적으로 살고 싶은 개발자

0개의 댓글