Home [ostep] 운영체제 개요(Introduction)
Post
Cancel

[ostep] 운영체제 개요(Introduction)

운영체제 개요

  • 프로그램 실행될 때 일어나는 일

    • 명령어를 fetch, decode, execute
  • 운영체제: 시스템을 사용하기 편리하면서 정확하고 올바르게 동작시킬 책임이 있는 소프트웨어

    • 프로그램 실행 (동시 여러개)
    • 프로그램 간의 메모리 공유
    • 장치와 상호작용
    • 등등
  • Virtuallization

    • 운영체제는 가상머신: 물리적인 자원을 이용 -> 일반적, 강력, 편리한 가상 형태의 자원 생성
    • 운영체제는 자원 관리자: 많은 프로그램들이 CPU를 공유하여, 동시에 실행될 수 있게 함
      • Resource: CPU, Memory, Disk
  • API

    • OS와 사용자가 상호작용할 수 있는 주된 방법

CPU 가상화

  • CPU 가상화: 하나 또는 소수의 CPU 집합을 무한개의 CPU가 존재하는 것 처럼 변환하여 동시에 많은 수의 프로그램을 실행시키는 것
  • Policy: 누가 실행되어야 하는지?

메모리 가상화

  • 물리 메모리 모델: 바이트 배열

    • 메모리 읽기: 데이터에 주소를 명시해야함
    • 메모리 쓰기: 주소와 데이터를 명시
  • OS 메모리 가상화 => 각 프로세스는 자신만의 가상 주소 공간을 가짐

    • OS는 이 가상 주소 공간을 컴퓨터의 물리 메모리로 매핑
    • 하나의 프로그램의 메모리 연산은 다른 프로그램의 주소 공간에 영향 x

병행성(Concurrency)

  • 여러 프로세스를 실행시켜 한 번에 많은 일을 시킬 때 일어나는 문제들

  • 멀티 쓰레드 프로그램도 동일한 문제를 가짐

    • 원자적(atomically) 으로 실행되지 않기 때문에 발생하는 문제

영속성(Persistence)

  • RAM: 휘발성
  • HW.. 입출력 I/O 장치 형태로 제공

    • SSD HDD
  • 파일시스템: 디스크를 (영속적으로) 관리하는 OS 소프트웨어

    • 파일을 시스템의 디스크에 안전하고 효율적인 방식으로 저장할 책임
  • CPU, 메모리 와 달리 가상 디스크는 없음

    • 파일 정보를 공유하기 원한다고 가정
    • 파일이 여러 다른 프로세스 사이에서 공유
  • OS system call : open(), write(), close()

    • => file system 으로 전달
  • 쓰기 중에 시스템의 갑작스러운 고장에 대비하는 기법

    • 저널링(Journalling)
    • 쓰기-시-복사(Copy on Write)
  • 효율적인 디스크 작업 자료구조: 단순 리스트 ~ 복잡한 B 트리

  • filesystem

    • 새 데이터가 디스크 어디에 저장될지 결정
    • 다양한 자료구조를 통하여 데이터 상태 추적
      • 저장장치로부터, 기존 자료구조 읽거나 갱신
    • 성능 향상을 위해 대부분의 파일 시스템은 쓰기 요청을 지연시켜 취합된 요청들을 한 번에 처리
  • 디스크, RAID, 파일시스템

설계 목표

  • OS: 물리자원을 가상화, 병행성과 관련된 복잡한 문제 처리, 파일을 영속적으로 저장하여 안전하게
    • OS 구현하기위한 목표 => 설계와 구현에 집중
  • 기본적인 목표
    • 필요한 개념(abstraction)들을 정의
    • 추상화 => 큰 프로그램을 작은 부분들로 나누어 구현
  • 중요한 목표
    • 성능: 오버헤드 최소화(절충)
    • 오버헤드
      • 공간: 메모리, 디스크
      • 시간: 더 많은 명령어
  • 또 다른 목표
    • app 간의 보호, OS와 app 간의 보호
    • 보호: 고립(Isolation) 원칙의 핵심
    • 운영체제의 종속성 (프로그램은 OS위에서 실행됨)
      • 신뢰성 제공의 필요성
  • 다른 중요한 목표
    • 에너지 효율성
    • 악의적인 응용 프로그램에 대한 보안
    • 이동성(mobility)

OS 역사

  • 초창기 운영체제: 단순 라이브러리

핵심 질문들

  • 자원을 어떻게 가상화시키는가?

    • 가상화시키는 이유? : 시스템을 사용하기 편리하게 해줌
    • 방법? 어떻게 구현? 기법과 정책? 어떻게 효율적으로 구현? 어떤 하드웨어 자원 필요?
  • 올바르게 동작하는 병행 프로그램은 어떻게 작성해야하는가?

    • OS로부터 어떤 기본 기법들을 제공 받?
    • 하드웨어는 어떤 기능을 제공해야하는가?
    • 기본 기법과 hw 기능을 어떻게 이용?
  • 데이터를 영속적으로 저장하는 방법은 무엇인가

    • 어떤 기법?
    • 성능을 위해 어떤 기법과 정책?
    • HW, SW 가 실패해도 올바르게 동작하려면 어떻게?

출처

ostep

This post is licensed under CC BY 4.0 by the author.

[Markdown] Mermaid class diagram

[ostep] Virtualization: 프로세스 개념