kimyu0218
  • [OS/공룡책] Part 1. Overview
    2024년 04월 21일 15시 50분 49초에 업로드 된 글입니다.
    작성자: @kimyu0218

     

    운영체제

    An operating system acts as an intermediary between the user of a computer and the computer hardware.

    운영체제는 컴퓨터 시스템을 운영하는 소프트웨어로, 컴퓨터 하드웨어를 관리하고 어플리케이션의 실행 환경을 제공한다. 컴퓨터 시스템은 다음 네 가지 요소로 구성되어 있다. 운영체제의 핵심 역할은 프로그램에 필요한 자원을 할당하는 것이다.

    운영체제는 사용자 프로그램의 실행을 관리하여 시스템 오류를 예방하고, 컴퓨터 시스템을 효율적이고 공정하게 운영하도록 돕는다.

    📝 운영체제
    • 컴퓨터 시스템을 운영하는 소프트웨어
    • 사용자와 HW 사이 중간자 역할 수행
    • 프로그램에 자원을 효율적이고, 공정하게 할당
    ⚙️ 운영체제의 자원 관리 예시
    • 프로세스
      • 프로세스의 생성 및 종료
      • 프로세스 스케줄링, 프로세스 중단 및 재시작
      • 프로세스 동기화 및 의사소통
    • 메모리
      • 메모리 공간 할당 및 해제
      • 어떤 프로세스를 메모리에서 내보내고, 메모리로 올릴 것인지 결정

    컴퓨터 시스템 구조

    컴퓨터 시스템은 하나 이상의 CPU와 다수의 디바이스 컨트롤러가 시스템 버스에 의해 연결되어 있다. 각 디바이스 컨트롤러는 특정 유형의 장치를 담당하며 디바이스 드라이버를 가지고 있다.


    인터럽트

    프로그램에서 입출력이 발생하면 어떤 작업들이 이루어질까?

    1. 드라이버는 컨트롤러의 레지스터들을 가져온다.
    2. 레지스터의 내용을 검사하여 어떤 작업을 수행해야 하는지 결정한다.
    3. 입출력 작업이 끝나면 컨트롤러는 자신의 작업이 끝났음을 드라이버에게 알린다. (by 인터럽트)

    인터럽트는 운영체제와 하드웨어가 상호 작용하는 데 핵심 역할을 한다. 하드웨어가 인터럽트를 발생시키면, CPU는 현재 작업을 멈추고 인터럽트 요청을 처리하기 위해 특정 위치로 이동한다. 인터럽트 서비스 루틴*이 완료되면 중단된 작업을 이어서 진행한다.

    • 인터럽트 서비스 루틴 (ISR) : 인터럽트를 처리하기 위해 실행되는 코드 블록
    • 인터럽트 벡터 : 인터럽트에 대응하는 인터럽트 서비스 루틴의 주소를 갖고 있는 테이블
    ⭐ 인터럽트
    • 인터럽트는 프로그램을 실행하는 도중에 I/O 요청이나 예외 상황을 처리하기 위해 실행중인 프로그램을 멈추고 CPU가 해당 작업을 처리하도록 한다.
    • 인터럽트는 하드웨어와 소프트웨어 인터럽트로 구성된다. 하드웨어 인터럽트는 하드웨어 기기가 발생시킨 인터럽트 요청이며, 소프트웨어 인터럽트는 예외처리나 시스템 콜이 발생하는 상황에서 실행된다.
    ⭐ 시스템 콜
    응용 프로그램이 커널에서 제공하는 기능을 사용하기 위한 인터페이스 (ex. `fork()`, `exec()`, `exit()`, `wait()`)

    I/O 구조

    인터럽트 기반 입출력은 데이터가 준비될 때마다 인터럽트를 발생시킨다. 데이터 전송량이 많은 경우, CPU가 대량의 인터럽트를 처리해야 하므로 효율이 떨어진다. 즉, 인터럽트는 대량의 데이터를 처리하는 경우, 많은 오버헤드가 발생한다.
     
    이 문제를 해결하기 위해 DMA를 사용한다. DMA는 Direct Memory Access로, CPU의 개입 없이 디바이스와 메인 메모리 간 데이터를 전송할 수 있다. 이는 CPU가 다른 중요한 작업에 더 많은 시간을 할애할 수 있도록 도와 시스템의 성능을 향상시킨다.


    컴퓨터 시스템 아키텍처

    컴퓨터 시스템은 목적에 따라 다양한 방법으로 구성될 수 있다. 아키텍처를 살펴보기 앞서 다음 용어들을 짚고 넘어가자.

    • 코어 : CPU의 계산 단위
    • CPU : 기계어를 수행하는 하드웨어
    • 프로세서 : 하나 이상의 CPU를 포함하는 물리적인 칩
    • 멀티코어 : 동일한 CPU 내에 여러 개의 코어들이 포함된 것
    • 멀티프로세서 : 여러 개의 프로세서들이 포함된 것

    싱글프로세스 시스템은 하나의 코어, 하나의 CPU, 하나의 프로세서를 갖는다.
     

    멀티프로세서 시스템

    대부분의 현대 컴퓨터는 두 개 이상의 프로세서(= 멀티프로세서)를 갖고 있다. 각 프로세서는 하나의 프로세스를 실행할수 있으므로 프로세스들이 동시에 실행된다. 즉, 더 적은 시간동안 더 많은 일을 할 수 있다. 대신, 모든 부분이 정상적으로 동작하는지 확인해야 하므로 오버헤드가 발생한다.  멀티프로세서는 멀티코어 시스템과 구분하지 않고 사용된다. 멀티코어는 하나의 칩 안에 여러 개의 컴퓨팅 코어가 들어있다.
     
    프로세서가 많으면 여러 작업을 동시에 처리할 수 있다. 하지만 CPU가 증가할수록 반드시 성능이 향상될까? 예상과 달리 성능이 눈에 띄게 좋아지진 않는다. 다양한 하드웨어들이 시스템 버스를 통해 통신하는데, CPU가 증가하면 버스에 연결된 장치들이 늘어나 병목 현상이 발생하기 때문이다.


    멀티프로그래밍

    대게 사용자는 동시에 여러 개의 프로그램을 실행한다. 따라서 운영체제는 다수의 프로그램을 실행하는 것이 중요하다.

    프로세스는 실행 중인 프로그램을 의미한다. 운영체제는 동시에 다수의 프로세스를 메모리에 유지하여 여러 개의 프로그램을 실행한다. CPU는 해당 프로세스들을 빠르게 전환하여 사용자에게 동시에 여러 개의 프로그램을 실행하는 듯한 경험을 제공한다.

    🌱 앞으로 배울 내용
    • 여러 개의 프로그램을 동시에 메모리에 올려놓기 위해 메모리 관리가 필요하다.
    • 여러 개의 프로세스가 CPU를 대기하고 있을 때, CPU 스케줄링을 통해 어느 것을 다음에 실행할지 결정한다.
    • 물리적인 메모리 공간보다 더 많은 양의 프로그램을 실행하기 위해서는 가상화 기술이 필요하다.
    • 다수의 프로세스들이 올바르게 상호작용하려면 프로세스 동기화 및 의사소통이 필요하고, 데드락이 발생하지 않도록 주의를 기울여야 한다.
    댓글