1 minute read

운영체제 개요

- 운영체제는 자원을 어떻게 가상화하는가?
- 가상화 효과를 얻기 위하여 운영체제가
  구현하는 기법과 정책은 무엇인가?
- 운영체제는 이들을 어떻게 효율적으로 구현하는가?
- 어떤 하드웨어 지원이 필요한가?

운영체제의 목적

    1. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공한다.
      • 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상(illusion)을 제공한다.
      • 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대신하여 처리한다.
    1. 컴퓨터 시스템의 자원을 효율적으로 관리한다.
      • 효율성: 주어진 자원으로 최대한의 성능을 내도록 한다.
      • 형평성: 특정 사용자/프로그램에게 지나친 불이익이 발생하지 않도록 한다.

프로그램이 실행될 때 어떤 일이 일어날까?

  • 폰 노이만 아키텍처(Von Neumann Architecture)
    • 프로세서는 초당 수십억 개의 명령어를 반입(fetch)하고, 해석(decode)하고 실행(execute)한다.
    • 즉 두 수를 더하고, 메모리에 접근하고, 조건을 검사하고, 함수로 분기하는 등의 정해진 일을 하는 것이다.

CPU 가상화(Virtualizing the CPU)

  • 하나의 CPU 또는 소규모의 CPU 집합을 무한 개의 CPU가 존재하는 것처럼 변환하여 동시에 많은 수의 프로그램을 실행시키는 것을 CPU 가상화라고 한다.

메모리 가상화(Virtualizing memory)

  • 각 프로세스는 자신만의 가상 주소 공간(virtual address space, 가상 주소 공간)을 갖는다.
  • 운영체제는 이 가상 주소 공간을 컴퓨터와 물리 메모리로 매핑(mapping)한다.
  • 실행 중인 프로그램의 입장에서는 자기 자신만의 물리 메모리를 갖지만, 실제로 물리 메모리는 공유 자원이고. 운영체제에 의해 관리된다.

병행성(Concurrency)

- 올바르게 동작하는 병행 프로그램은 어떻게 작성해야 하는가?
- 같은 메모리 공간에 다수의 쓰레드가 동시에 실행한다고 할 때,
  올바르게 동작하는 프로그램은 어떻게 작성할 수 있는가?
- 운영체제로부터 어떤 기본 기법들을 제공받아야 하는가?
- 하드웨어는 어떤 기능을 제공해야 하는가?
- 병행성 문제를 해결하기 위하여 기본 기법들과
  하드웨어 기능을 어떻게 이용할 수 있는가?

영속성(persistence)

- 데이터를 영속적으로 저장하는 방법은 무엇인가?
- 파일 시스템은 데이터를 영속적으로 관리하는 운영체제의 일부분이다.
  올바르게 일하기 위해서는 어떤 기법이 필요할까?
- 이러한 작업의 성능을 높이기 위해서 어떤 기법과 정책이 필요할까?
- 하드웨어와 소프트웨어가 실패하더라도
  올바르게 동작하려면 어떻게 해야 하는가?

설계 목표

  1. 추상화: 시스템을 편리하고 사용하기 쉽게 만들 수 있도록 필요한 개념(abstraction)들을 정의한다.
  2. 성능(performing): 오버헤드를 최소화하는 것이다.
  3. 보호(protection): 응용 프로그램 간의 보호, 운영체제 응용 프로그램 간의 보호이다.
  4. 신뢰성(reliability): 운영 체제는 계속 실행되어야 하기에 높은 수준의 신뢰성을 제공해야 한다.
  5. 기타: 에너지 효율성(energy-efficiency), 보안(security), 이동성(mobility)

인터페이스 관점

  • 운영체제는 사용자(프로그램)가 물리적 하드웨어를 다루기 위한 인터페이스이다.
  • 프로그램 실행, 입출력, 저장장치, 자원 할당 등의 기능을 System Call이라는 API를 제공하여 지원한다.

Screen Shot 2022-12-03 at 8 00 06 PM

참고 자료

  • 운영체제(공룡책)
  • kocw 반효경, 운영체제와 정보기술의 원리
  • 운영체제: 아주 쉬운 세 가지 이야기