[OS] 운영체제 개요 및 컴퓨터 시스템 구조

Cherry·2024년 4월 8일
0
post-thumbnail

반효경 교수님의 KOWC 강의를 듣고 정리하는 요약본이다

1. Introduction to Operating Systems

운영체제(Operating System, OS)란

컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층으로 모든 컴퓨터 시스템의 필수적인 부분이다.

운영체제의 목적

  • 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공 (하드웨어 사용을 운영체제가 대행)
  • 컴퓨터 시스템의 최대 성능을 내며 형평성있게 자원(프로세서, 기억장치, 입출력 장치)을 효율적으로 관리

운영체제의 분류

동시 작업 가능 여부

  • 단일 작업(single tasking): 한 번에 하나의 작업만 수행
    ex) MS-DOS 프롬프트 상에서는 한 명령의 수행을 끝내기 전에 다른 명령을 수행시킬 수 없음, 과거의 엘리베이터나 전화기에서 사용

  • 다중 작업(multi tasking): 동시에 두 개 이상의 작업 처리
    ex) UNIX, MS Windows 등에서는 한 명령의 수행을 끝내기 전에 다른 명령을 수행할 수 있음, 현대의 스마트폰 운영체제

사용자 수

  • 단일 사용자(single user)
    ex) MS-DOS, MS Windows

  • 다중 사용자(multi user) - 동시에 여러명이 접근할 수 있는지
    ex) UNIX, NT server 보안관리나 사용자간의 형평성을 추가로 고려

처리 방식

  • 일괄 처리(batch processing)

    • 작업 요청의 일정량 모아서 한꺼번에 처리
    • 작업이 완전히 종료될 때까지 기다려야 함
      ex) 초기 Punch Card 처리 시스템, 현대 운영제체에 사용되지 않음
  • 시분할(time sharing) 일반적인 범용 컴퓨터, 현대 OS

    • 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
    • 일괄 처리 시스템에 비해 짧은 응답 시간을 가짐
      ex) UNIX
    • interactive한 방식(사용자는 입력에 따라 바로바로 응답한다고 느낌)
  • 실시간(Realtime OS)

    • 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS
      ex) 원자로/공장 제어, 미사일 제어, 반도체 장비, 로보트 제어 등에 사용
    • Hard Realtime system: 데드라인을 지키지 못하면 치명적
    • Soft Realtime system: 데드라인이 있지만 지키지 않아도 문제 X

2. System Structure & Program Execution

컴퓨터 시스템 구조

큰 흐름을 살펴보면 컴퓨터 시스템의 구조는 컴퓨터 내부 장치인 CPU, 메모리와 컴퓨터 외부 장치(입출력 장치)인 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등으로 구분된다. 컴퓨터는 외부 장치에서 내부 장치로 데이터를 읽어와 (input) 각종 연산을 수행한 후, 그 결과를 외부 장치로 내보내는(output) 방식으로 업무를 처리한다.

CPU

CPU는 메모리에서 명령(Instruction)을 하나씩 읽어서 실행하는 역할을 한다. IO가 일어나면 CPU가 직접 접근하지 않고 Device Controller에게 시킨다.

  • CPU는 메인 메모리와 Local Buffer에 접근이 가능하다.
  • CPU가 자신의 작업을 하던 중간에 인터럽트 라인에 신호가 들어오면 하던 일을 멈추고 인터럽트와 관련된 일을 먼저 처리한다.

레지스터 (Register)

CPU 내부에 메모리보다 더 빠르면서 정보를 저장할 수 있는 작은 공간이다. 레지스터 중에 메모리 주소를 가리키는 레지스터인 PC (Program Counter) 레지스터가 있다. CPU는 PC 레지스터가 가리키는 메모리 위치에서 인스트럭션을 읽어서 수행한다.

Mode bit

CPU에서 작업중인 데이터가 운영체제가 사용하는 것인지 사용자 프로그램에서 사용하는 것인지 구분하고 사용자 프로그램의 잘못된 수행으로 다른 프로그램이나 운영체제에 피해가 가지 않도록 하기 위한 보호 장치 역할을 한다. 만약 Mode bit가 없다면 사용자 프로그램에서 하드웨어를 직접 접근하여 보안에 취약해 질 수 있다.

  • 1 (사용자 모드) - 사용자 프로그램 수행
    사용자 프로그램이 CPU 가질 때는 제한된 instruction만 실행시킬 수 있다.

  • 0 (모니터 모드/커널 모드/시스템 모드) - OS 코드 수행(I/O 작업)
    운영 체제가 CPU에서 실행 중일 때는 모든 instruction을 실행할 수 있다.

Timer

Timer는 특정 프로그램이 CPU를 독점하는 것을 막기 위한 하드웨어다.

컴퓨터를 시작하면 처음에 운영 체제가 CPU를 가지고 있다가 사용자 프로그램에게 CPU를 넘겨준다. 하지만 그냥 넘겨 주지 않고 Timer에 값을 세팅하고 넘겨 주게 된다. 타이머는 매 클럭 틱 때마다 1씩 감소한다. 시간이 지나서 Timer의 값이 0이 되면 타이머 인터럽트가 발생하여 다른 프로그램에게 CPU를 넘겨준다.

Device Controller

Device Controller는 일종의 작은 CPU로서, 각 하드웨어 장치를 제어하는 역할을 수행한다.

  • 제어 정보를 위해 control register, status register를 가짐
  • local buffer를 가짐(일종의 data register)

Local Buffer

메인 CPU의 작업 공간인 메인 메모리가 있듯이 디바이스 컨트롤러도 데이터를 임시로 저장하기 위한 작업 공간이 필요한데, 이를 Local Buffer가 그 역할을 한다.

입출력(I/O) 수행

모든 입출력 명령은 운영 체제만 사용할 수 있는 특권 명령으로만 가능하다.
그렇다면 사용자 프로그램은 어떻게 I/O를 할 수 있을까? 바로, 시스템 콜을 활용한다.

시스템 콜은 운영 체제에게 I/O를 요청하는 것을 말한다. 운영 체제의 서비스를 받기 위해 커널 함수를 호출하는 것이라고 생각하면 된다.

mode bit가 1인 상태로 사용자 프로그램이 실행되고 있다가 I/O를 해야 하는 상황이 오면 바로 OS의 주소로 점프를 할 수가 없다. 그래서 프로그램이 직접 인터럽트 라인을 세팅 한 후, CPU에게 인터럽트를 보내면, CPU는 다음 인스트럭션을 수행하는 대신 mode bit를 0으로 바꾸고 CPU 제어권을 OS로 넘기게 된다. 이러한 방식으로 사용자 프로그램이 OS에게 I/O 요청을 보낼 수 있다.

인터럽트

CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외 상황이 발생하여 처리가 필요한 경우에 CPU에게 알리는 일종의 이벤트를 뜻한다. 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.

하드웨어 인터럽트 vs 소프트웨어 인터럽트

  • 하드웨어 인터럽트: 하드웨어가 발생시킨 인터럽트로 컨트롤러 등 하드웨어 장치가 CPU의 인터럽트 라인을 세팅한다
  • 소프트웨어 인터럽트: 소프트웨어가 CPU의 인터럽트 라인을 세팅한다
    • Exception: 프로그램이 오류를 범한 경우
    • System call: 프로그램이 커널 함수를 호출하는 경우

인터럽트 벡터 : 인터럽트 종류마다 번호를 정해서 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키고 있는 자료 구조
인터럽트 처리 루틴(ISR) : 해당 인터럽트를 처리하는 커널 함수

동기식 입출력과 비동기식 입출력


동기식 입출력 (syncronous I/O)

  • I/O요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
    • 방법1 : I/O가 끝날 때 까지 CPU를 낭비시키고 매시점 하나의 I/O만 일어날 수 있음
    • 방법2 : I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗고 처리를 기다리는 동안 다른 프로그램에게 CPU를 줬다가 I/O가 완료되면 인터럭트를 걸어서 알리고 CPU를 다시 줌으로서 처리

비동기식 입출력 (asyncronous I/O)

  • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

둘 다 I/O완료는 인터럽트로 알려줌

DMA Controller

: 직접 메모리에 접근할 수 있는 컨트롤러
문제: i/o device로 인한 cpu로의 interrupt가 너무 많아진다면 => cpu가 효율적으로 동작을 할 수 없다.
⇒ DMA도 메모리에 접근할 수 있게 해서 IO 작업들을 메모리에 쌓고, 어느 정도 쌓였으면 cpu에 interrupt를 걸어 작업을 하도록 한다.

저장 장치 계층 구조

위로 갈수록 속도가 빠르지만, 단위 공간 당 가격이 비싸고 용량이 적다. 반면 아래로 갈수록 단위 공간 당 가격이 싸고 용량이 많지만, 속도가 느려진다.

프로그램 실행

  • 프로그램은 disk 상에서 file system 용도로 자신만의 독자적인 주소 공간을 virtual memory라고 하며, code(기계어 코드), data(전역 변수), stack(함수 호출, 리턴 시 스택으로 쌓는 영역)으로 구성되어 있다.
  • 프로그램이 실행되면, 이를 물리적인 메모리에 필요한 부분만 올려고 나머지는 디스크의 swap에 내려놓아 실행하여 메모리의 낭비를 줄일 수 있다.
  • virtual memory에서 physical memory로 갈 때 주소가 변환되어야 하는데, 이는 하드웨어의 도움을 받아야 한다. (logical memory address → physical memory address)

커널 주소 공간의 내용

code : 인터럽트가 들어오면 CPU를 얻는데, 각각의 인터럽트마다 무슨 일을 처리해야 하는지
data : 운영체제가 사용하는 자료구조가 위치 / 프로세스 관리(PCB), 하드웨어 관리
stack : 사용자 프로그램마다 커널 스택이 따로 존재

0개의 댓글