본문 바로가기
운영체제

서론

by SpearZero 2024. 7. 21.

서론

운영체제(operating system)

  • 컴퓨터 하드웨어를 관리하는 소프트웨어
  • 응용 프로그램을 위한 기반을 제공하며 컴퓨터 사용자와 컴퓨터 하드웨어 사이에 중재자 역할을 한다.

운영체제가 할 일

  • 컴퓨터 시스템의 네 가지 구성 요소
    • 하드웨어
      • 중앙 처리 장치(CPU), 메모리 및 입출력(I/O) 장치로 구성되어, 기본 계산용 자원 제공
    • 운영체제
    • 응용 프로그램
      • 워드 프로세서, 스프레드시트, 컴파일러, 웹 브라우저 등
    • 사용자

사용자 관점

  • 사용자 관점에서 운영체제는 사용의 용이성을 위해 설계된다.
  • 다양한 하드웨어와 소프트웨어 자원이 어떻게 공유되느냐의 자원의 이용에는 전혀 신경을 쓰지 않는다.

시스템 관점

  • 컴퓨터의 관점에서 운영체제는 하드웨어와 가장 밀접하게 연관된 프로그램이다. 따라서 운영체제를 자원 할당자(resource allocator)로 볼 수 있다.
  • 컴퓨터 시스템은 문제를 해결하기 위해 요구 되는 여러가지 자원들(하드웨어와 소프트웨어), 즉 CPU 시간, 메모리 공간, 저장장치 공간, 입출력 장치 등을 가진다. 운영체제는 이들 자원의 관리자로서 동작한다.

컴퓨터 시스템의 구성

현대의 범용 컴퓨터 시스템은 하나 이상의 CPU와 구성요소와 공유 메모리 사이의 액세스를 제공하는 공통 버스를 통해 연결된 여러 장치 컨트롤러로 구성된다.

  • 각 컨트롤러는 특정 유형의 장치를 담당한다.
    • 장치 컨트롤러는 일부 로컬 버퍼 저장소와 특수 목적 레지스터 집합을 유지 관리한다.
      • 장치 컨트롤러는 제어하는 주변 장치와 로컬 버퍼 저장소간에 데이터를 이동한다.
    • 각 장치 컨트롤러마다 장치 드라이버가 있다.
      • 장치 드라이버는 장치 컨트롤러의 작동을 알고 있고 나머지 운영체제에 장치에 대한 일관된 인터페이스를 제공한다.

인터럽트

  • 하드웨어는 어느 순간이든 시스템 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시킬 수 있다.
  • 인터럽트는 운영체제와 하드웨어의 상호 작용 방식의 핵심 부분이다.
  • CPU가 인터럽트 되면, CPU는 하던 일을 중단하고 즉시 고정된 위치로 실행을 옮긴다.
    • 고정된 위치는 일반적으로 인터럽트를 위한 서비스 루틴이 위치한 시작 주소를 가지고 있다. 그리고 인터럽트 서비스 루틴이 실행된다.
  • 인터럽트 서비스 루틴의 실행이 완료되면 CPU는 인터럽트 되었던 연산을 재개한다.

인터럽트는 매우 빈번하게 발생하기 때문에 빠르게 처리되어야 한다.

  • 필요한 속도를 제공하기 위해 인터럽트 루틴에 대한 포인터들의 테이블을 이용할 수 있다.
  • 테이블을 통하여 간접적으로 인터럽트 루틴이 호출될 수 있다.
  • 인터럽트 벡터는 인터럽트가 발생했을 때, 그 인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가지고 있는 공간이다.

인터럽트의 매커니즘

  • CPU는 인터럽트를 받으면 제어를 인터럽트 핸들러에게 넘긴다.
    • CPU는 명령어 실행을 끝내면 인터럽트 발생 여부를 확인함
    • 입력 준비, 출력 완료 혹은 에러가 발생할 때 인터럽트가 발생한다.
  • 인터럽트 핸들러는 데이터를 처리하고 인터럽트에서 복귀한다.
  • 그 후 CPU는 중단된 작업의 처리를 재개한다.

저장장치 구조

CPU는 메모리에서만 명령을 적재할 수 있으므로 프로그램을 실행하려면 프로그램을 먼저 메모리에 적재해야 한다.

  • 프로그램 대부분은 재기록 가능한 메인 메모리(Random-Access Memory, RAM)에서 가져온다.

컴퓨터는 전원을 켤 때 부트스트랩 프로그램이 가장 먼저 실행된다.

  • 이 때, EEPROM 및 기타 형태의 펌웨어를 사용한다.
  • 메인 메모리는 휘발성이므로 부트스트랩 프로그램을 유지하는 용도로 사용할 수 없다.

보조 저장장치는 대량의 데이터를 영구히 보존할 수 있다.

  • 하드 디스크 드라이브(HDD)와 비휘발성 메모리(NVM)등이 존재한다.
  • 메인 메모리는 전원이 공급되지 않으면 데이터를 잃어버림

저장장치 계층 구조

위로 갈수록 속도가 빠르며 저장 용량이 적다. 또한 휘발성이다.

아래로 갈수록 속도가 느리며 저장 용량이 크다. 비휘발성이다.

입출력 구조

직접 메모리 액세스(DMA, Direct Memoery Access)

  • 장치 컨트롤러가 CPU의 개입 없이 메모리로부터 자신의 버퍼 장치로 또는 버퍼로부터 메모리로 데이터 블록을 전송하게 해줌
    • 장치 컨트롤러가 전송 작업을 수행하고 있는동안 CPU는 다른 작업이 가능하다.
  • 한 바이트마다 인터럽트가 발생하는것이 아니라 블록 단위로 인터럽트가 발생

컴퓨터 시스템 구조

단일 처리기 시스템

  • 단일 처리 코어를 가진 하나의 CPU를 포함하는 단일 프로세서를 가지고 있음

다중 처리기 시스템

  • 단일 코어 CPU가 있는 두 개 이상의 프로세서를 가지고 있다.
    • 프로세서가 N개 이므로 처리량이 증가한다.(속도 향상 비율이 N배는 아님)
  • 다중 처리기는 여러 개의 컴퓨팅 코어가 단일 칩에 상주하는 다중 코어 시스템을 포함한다.
    • 칩 내부 통신은 칩 간의 통신보다 효율적일수 있다.

클러스터형 시스템

  • 둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성한다.

운영체제의 작동

실행할 프로세스, 서비스할 I/O 장치 및 응답할 사용자가 없는 경우 운영체제는 무언가가 발생할 때 까지 기다린다.

  • 이벤트는 거의 인터럽트를 발생시킨다.
  • 하드웨어 인터럽트 외에도 트랩(또는 예외)이 발생한다.
    • 트랩은 오류(0으로 나누거나, 유효하지 않은 메모리 접근) 또는 사용자 프로그램의 특정 요청 때문에 발생하는 소프트웨어 생성 인터럽트이다.
    • 특정 요청은 시스템 콜이라는 특수 연산을 실행하여 요청되고 운영체제가 제공하는 서비스가 수행될 것을 요구한다.

다중 프로그래밍과 멀티 태스킹

다중 프로그래밍은 CPU가 항상 한 개는 실행할 수 있도록 프로그램을 구성하여 CPU 이용률을 높이고 사용자의 만족도를 높인다.

다중 프로그래밍에서는 한 프로세스가 대기해야 하는 경우 CPU는 다른 프로세스로 전환하여 실행한다.

멀티 태스킹(multitasking)은 다중 프로그래밍의 논리적 확장이다.

  • CPU는 여러 프로세스를 전환하며 프로세스를 실행하지만 전환이 자주 발생하여 사용자에게 빠른 응답 시간을 제공하게 된다.

이중-모드와 다중모드 운용

운영체제와 사용자는 컴퓨터 시스템의 하드웨어 및 소프트웨어 자원을 공유하기 때문에 잘못된 프로그램으로 인해 다른 프로그램 또는 운영체제 자체가 잘못 실행될 수 없도록 보장해야 한다.

  • 사용자 모드와 커널 모드를 사용한다.
  • 모드 비트로 사용자 모드와 커널 모드를 나타낸다.
    • 커널 모드(0)
    • 사용자 모드(1)

사용자 프로그램이 사용자 모드로 실행 되다가 운영체제로부터 서비스를 요청하면(시스템 콜) 이 요청을 수행하기 위해서 사용자 모드에서 커널 모드로 전환해야 한다.

 

운영체제는 컴퓨터의 제어를 얻을 때마다 항상 커널 모드로 있게 된다.

 

하드웨어는 특권 명령(privileged instruction)이 커널 모드에서만 수행되도록 허용한다.

타이머

사용자 프로그램이 무한 루프에 빠지거나 시스템 서비스 호출에 실패하여 제어가 운영체제로 복귀하지 않는 경우가 없도록 해야한다. 이러한 목적을 달성하기 위해 타이머(timer)를 사용할 수 있다.

  • 타이머는 지정된 시간 후 컴퓨터를 인터럽트 하도록 설정할 수 있다.

자원 관리

운영체제는 시스템의 CPU, 메모리 공간 파일 저장 공간 및 I/O 장치등의 자원을 관리한다.

프로세스 관리

프로그램은 디스크에 저장된 파일의 내용과 같은 수동적 개체이다.

 

프로세스는 다음 수행할 명령을 지정하는 프로그램 카운터(program counter)를 가진 능동적인 개체이다.

 

운영체제가 프로세스에 대해 관리하는 작업들은 다음과 같다.

  • 사용자 프로세스와 시스템 프로세스의 생성과 제거
  • CPU에 프로세스와 스레드 스케줄하기
  • 프로세스의 일시 중지와 재수행
  • 프로세스 동기화를 위한 기법 제공
  • 프로세스 통신을 위한 기법 제공

메모리 관리

메인 메모리는 CPU와 입출력 장치에 의하여 공유되는 빠른 접근이 가능한 데이터 저장소이다.

 

메인 메모리는 일반적으로 CPU가 직접 주소를 지정할 수 있고, 그리고 직접 접근할 수 있는 유일한 대량 메모리이다.

 

운영체제가 메모리에 대해 관리하는 작업

  • 메모리의 어느 부분이 현재 사용되고 있으며 어느 프로세스에 의해 사용되고 있는지를 추적해야 한다.
  • 메모리 공간을 할당하고 회수해야 한다.
  • 어떤 프로레스들을 메모리에 적재하고 제거할 것인가를 결정해야 한다.

파일 시스템 관리

운영체제는 저장장치의 물리적 특성을 추상화하여 논리적인 저장 단위인 파일을 정의한다. 운영체제는 파일을 물리적 매체로 매핑하며, 저장장치를 통해 이들 파일에 접근한다.

 

운영체제가 파일 관리를 위해 담당하는 작업

  • 파일의 생성 및 제거
  • 디렉터리 생성 및 제거
  • 파일과 디렉터리를 조작하기 위한 프리미티브의 제공
  • 파일을 보조 저장장치로 매핑
  • 안정적인(비휘발성) 저장 매체에 파일을 백업

대용량 저장장치 관리

컴퓨터 시스템은 메인 메모리를 백업하기 위해 보조 저장장치를 제공해야 한다.

 

운영체제는 보조 저장장치를 관리하기 위해 다음과 같은 작업을 수행한다.

  • 마운팅과 언마운팅
  • 사용 가능한 공간의 관리
  • 저장장소 할당
  • 디스크 스케줄링
  • 저장장치 분할
  • 보호

캐시 관리

캐시 크기가 제한되어 있으므로 캐시 관리는 중요한 설계 문제이다. 캐시 크긱와 교체 정책을 신중하게 선택하면 성능이 크게 향상될 수 있다.

 

로컬 캐시를 가진 여러 CPU가 동시에 실행되는 경우 캐시 일관성 문제가 발생할 수도 있다.

입출력 시스템 관리

보안과 보호

  • 보호(protection)
    • 컴퓨터 시스템이 정의한 자원에 대해 프로그램, 프로세스, 또는 사용자들의 접근을 제어하는 기법
  • 보안
    • 외부 또는 내부의 공격을 방어하는 것
      • 바이러스, 웜, 서비스 거부 공격, 식별자 도용, 서비스 도용 등의 공격이 있다.

가상화

가상화는 단일 컴퓨터(CPU, 메모리, 디스크 드라이브, 네트워크 인터페이스 카드 등)의 하드웨어를 여러가지 실행 환경으로 추상화하여 개별 환경이 자신만의 컴퓨터에서 실행되고 있다는 환상을 만들 수 있는 기술이다.

 

가상 머신의 사용자는 단일 운영체제에서 동시에 실행되는 다양한 프로세스 간에 전환할 수 있는 것과 동일한 방식으로 다양한 운영체제 간에 전환할 수 있다.

 

가상화는 운영체제가 다른 운영체제 내에서 하나의 응용처럼 수행될 수 있다.

가상 머신 관리자(VMM, virtual machine manager)는 게스트 운영체제를 수행하고 그들의 자원 이용을 관리하며 각 게스트를 서로로부터 보호한다.