• 운영체제 OS는 뭘까?

    • OS : 컴퓨터 하드웨어 바로 위에 설치되어, 사용자와 다른 모든 소프트웨어 or 하드웨어를 연결하는 소프트웨어 계층

      • 하드웨어를 앱에 유용한 형태로 바꿔주는 소프트웨어

      image.png

    • 프로그램을 쉽게 실행할 수 있도록해주고, 프로그램이 메모리를 공유하는 것을 허락해주고, 여러 장치들이 상호작용할 수 있도록 도와준다.

    • OS와 App사이의 관계

    image.png

  • 프로그램 실행시 무슨일이 발생할까?

    • 실행중인 프로그램은 Instruction(명령어)를 실행한다.
      • Processor 프로세서는 메모리에서 Instruction을 가져와서 해독하고 수행한다.
  • Three Pieces

    • Virtualization 가상화
      • OS는 물리적인 자원(프로세서, 메모리, 디스크 등)을 가상의 형태로 변환한다.
        • 가상의 형태가 조금 더 일반적이고 강력하고 사용하기 쉽다.
      • application(앱)이 직접 하드웨어를 접근하거나 볼 수 없다.
        • 앱이 가상화된 하드웨어(물리적인 자원)을 보고 사용할 수 있다.
        • 운영체제가 앱과 하드웨어 사이에서 매개자처럼 행동함
      • OS는 자원을 할당해주는 역할이자, 프로그램을 컨트롤하는 역할을 한다. → 이러한 기능을 할 수 있게 해주는 주된 역할이 커널 kernel 이다!
        • User mode / Kernel mode

          • user mode 사용자 모드 : 간단한 지시 ok, 사용자가 접근할 수 있는 영역을 제한적으로 두고, 프로그램 자원에 함부로 침범하지 못하도록 하는 모드

            • 간단한 유저 어플리케이션 코드 (우리가 작성하는 코드)가 유저모드에서 실행된다.
          • kernel mode 커널 모드 : 모든 자원(드라이버, 메모리, CPU 등)에 접근, 명령을 할 수 있다.

          • 모드 변경 명령어 → “sys_enter, exit”

            image.png

        • System Calls 시스템콜

          • 시스템콜은 프로그램이 OS에게 자신이 하고 싶은 것을 요청하는 과정이다.
            • 시스템은 OS와 application 사이의 인터페이스
            • 시스템콜의 예시 → 메모리 접근, 장치 접근, 프로그램 실행 등등
            • 운영체제가 커널모드로 시스템콜을 작성함
        • CPU를 가상화하기

          • 시스템은 많은 수의 가상cpu가 있다.
            • 하나의 cpu를 무한개의 cpu처럼 보이게 할 수 있고, 많은 프로그램이 한번에 실행되는 것처럼 보이게 할 수 있다.
        • 메모리를 가상화하기

          • 물리적인 주소는 byte의 배열이다.
          • 실제 물리적인 메모리는 OS가 관리하고, OS가 프로세스가 접근하는 가상의 주소를 실제 물리적인 메모리에 매핑시킨다.
    • Concurrency 동시성
      • 쓰레드 : 같은 메모리 공간에서 실행되는 함수
      • synchronization 동기화
      • 운영체제는 하나의 프로세스를 실행하고 다른 프로세스를 실행하는 등의 다양한 일을 한번에 한다.
      • 멀티 쓰레드 프로그램도 동시성 문제를 나타낸다.
        • 동시성 문제 : 같은 프로그램의 쓰레드이지만 2개가 다른 값으로 나온다.
          • 왜 이런일이 발생하는가?
            1. 메모리로부터 얻은 카운터 값을 레지스토로 load
            2. 그것을 증가시킴
            3. 메모리로 다시 가져와 저장
            • 이 3개의 일련의 과정이 원자적으로(atomically, 동시에 수행됨) 일어나지 않음 → 연산이 꼬이게 됨 → 동시성의 문제
    • Persistence 영속성
      • 시스템 메모리는 휘발성(volatile)의 메인 메모리인 DRAM에 저장되기 때문에 데이터를 쉽게 잃어버린다. → 데이터를 지속적으로 저장할 수 있는 것이 뭐가 있을까?
        • 하드웨어 : 입출력 장치 즉, HDD, SSD같은 장치가 있을 것이다.
        • 이러한 디스크를 관리하는 OS의 소프트웨어를 파일 시스템이라고함
    • OS디자인의 목적
      • 추상화
      • overhead(어떤일 처리하는 데 소요되는 간접적인 시간)를 최소화하여 성능을 늘림
      • isolation을 통한 어플리케이션간의 Protection