제이제이
article thumbnail

1️⃣ 컴퓨터 시스템의 구조

  • 컴퓨터 시스템의 구조는 컴퓨터 내부 장치인 CPU와 메모리, 컴퓨터 외부 장치인 I/O 장치로 구분됩니다.
  • 컴퓨터 시스템에서는 프로그램이 실행되려면, 해당 프로그램이 컴퓨터 내부 장치인 메모리에 올라가 있어야 실행됩니다.

해당 작업은 운영체제가 관리하며, 프로그램은 메모리에 로드된 후, CPU에서 작업내용을 실행합니다.

  • 입력(Input) = 컴퓨터 외부장치에서 컴퓨터 내부장치로 데이터가 들어오는 과정을 의미합니다.
  • 출력(Output) = 컴퓨터 내부장치에서 외부장치로 데이터가 나가는 과정을 의미합니다.
  • 컴퓨터 외부 장치인 I/O 장치에서도 마치 컴퓨터의 CPU처럼 해당 작업을 제어하는 디바이스 컨트롤러(Device Controller)가 존재합니다.
  • 또한 I/O 장치에서도 메모리처럼 해당 작업이 완료된 후, 작업 내용을 임시로 저장하는 공간인 로컬 버퍼(Local Buffer) 영역이 존재합니다.

2️⃣ CPU 연산과 I/O 연산

  • 이처럼 컴퓨터 내부에서 연산은 CPU가 처리하며, 컴퓨터 외부에서의 I/O장치의 연산은 디바이스 컨트롤러가 처리합니다.
  • 컴퓨터 내부에서 CPU가 연산중이더라도, 외부에서 디바이스 컨트롤러가 I/O 장치의 연산은 동시에 수행이 가능합니다.
  • 또한, 디바이스 컨트롤러물리적인 I/O 장치에 대한 연산 결과를 로컬 버퍼에 저장한 후 이후 메인 CPU에서 해당 작업 내용을 불러와 실행시키도록 합니다.

디바이스 컨트롤러는 I/O 작업이 끝났다면, 인터럽트를 발생시켜 메인 CPU에게 해당 작업이 끝났음을 알립니다.

  • 메인 CPU옆에는 인터럽트 라인이 있어, 인터럽트가 들어오게 된다면 현재 작업 중인 내용을 잠시 멈추고 인터럽트로 들어온 내용을 먼저 처리하게 됩니다.
  • 인터럽트 라인CPU와 I/O 장치 사이에 인터럽트 신호를 전달하는 경로를 의미합니다.

🏃🏻‍♂️ 인터럽트 처리과정

  1. 디바이스 컨트롤러가 인터럽트를 발생시킵니다.
  2. 현재 작업을 PC에다가 저장한 후, 들어온 인터럽트를 처리합니다.
  • PC(Program Counter) = CPU 내부에 있는 레지스터로, 현재 CPU가 실행하고 있는 명령의 주소를 가리키는 역할을 합니다.
  1. 해당 I/O 장치의 로컬 버퍼에 있는 내용(I/O 작업 처리한 결과)를 메인 메모리에 올립니다.
  2. CPU는 현재 작업을 멈추고, 인터럽트로 들어온 내용을 먼저 처리합니다.

3️⃣ 인터럽트의 일반적 기능

  • 사실, 운영체제의 커널에는 인터럽트가 들어왔을 때 해야 할 일들을 미리 프로그래밍 되어 보관되어 있습니다.
  • 운영체제에서 특정 인터럽트에 대응하여 실행되는 코드를 “인터럽트 처리 루틴”이라고 합니다.

🔎 인터럽트의 종류

  • 인터럽트의 종류로는 하드웨어 인터럽트와 소프트웨어 인터럽트가 존재합니다.

하드웨어 인터럽트(Interrupt)

  • 타이머,디스크 컨트롤러가 발생시키는 인터럽트의 경우를 의미합니다.
  • 즉, 하드웨어가 인터럽트를 발생시키는 경우입니다.

소프트웨어 인터럽트(Trap)

  • 소프트웨어가 인터럽트를 발생시키는 인터럽트의 경우를 의미합니다.
  • 예외 상황(Exception)과 시스템 콜(System Call)이 있습니다.
    • 예외상황 = 사용자가 프로그램을 0으로 나누는 연산을 실행하거나, 권한이 없는 메모리 공간에 접근하려고 할 때 발생됩니다.
    • 시스템 콜 = 사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을 때, 운영체제에게 해당 작업 처리를 부탁하기 위해 실행됩니다.

+) 폴링 방식

  • CPU가 직접 입출력장치에 데이터를 가져오거나 내보내는 방식을 의미합니다.
  • CPU가 입출력장치의 상태를 주기적으로 계속 검사하여 어떠한 조건을 만족할 때 데이터를 처리합니다.
  • 반복적인 모니터링 작업으로 인해 작업의 효율이 떨어지기 때문오늘날의 다양한 프로세스를 처리하기에는 적합하지 않습니다.

🔎 시스템 콜 작동 과정

  1. 실행중인 사용자 프로그램은 인터럽트 라인에 신호를 보냅니다.
  2. 운영체제에게 해당 작업 처리 요청을 하는 시스템 콜을 발생 시킵니다.
  3. 이후, 운영체제에게 부탁한 일이 모두 끝나면, 인터럽트를 발생시켜 CPU에서 해당 내용이 실행되도록 합니다.
  • CPU는 외부 I/O 장치에 직접 접근이 불가능하므로, 이를 운영체제에게 부탁하여 처리합니다.

예시

  • 사용자 프로그램에서 디스크의 내용을 불러와 처리하는 작업 중 디스크의 내용이 필요할때
  1. 시스템 콜을 발생 시켜, 운영체제에게 I/O 장치가 해당 디스크의 내용을 가져오도록 부탁합니다.
  2. 이후, 해당 디스크의 내용이 불러와지면 인터럽트를 발생시켜, CPU에서 사용자 프로그램이 작업 처리를 할 수 있도록 실행됩니다.

🔎 인터럽트 관련 용어

  • 운영체제는 인터럽트 종류 마다 처리를 위한 코드의 위치를 가지고 있는데, 해당 부분을 “인터럽트 백터”라고 부릅니다.

  • 또한, 인터럽트 백터에 따라 어떤 일을 해야 하는지 정의되어 있는 코드를 “인터럽트 처리 루틴”이자 “인터럽트 핸들러”라고 부릅니다.

4️⃣ 입출력 구조

  • 모든 입출력(I/O작업)은 “읽기(Read)”와 “쓰기(Write)”과정을 수행합니다.
  • 한걸음 더 나아가, 입출력 방식에는 “동기식 입출력”“비동기식 입출력” 과정이 있습니다.

🔄 동기식 입출력

  • 한 프로그램이 I/O 요청을 했을 때, 입출력 작업이 완료된 후에 해당 프로그램을 다시 수행할 수 있을 때를 의미합니다.

동기식 입출력 방식의 첫번째 예시(CPU를 점유하면서 대기하는 방식)

  • 한 프로그램이 I/O 요청을 했을 때, 해당 입출력이 끝날때까지 대기하는 방식을 의미합니다.

👎🏻 단점

  • 해당 I/O작업이 끝날때까지, CPU를 낭비시킵니다.
  • 매시점 하나의 I/O만 실행할 수 있습니다.

동기식 입출력 방식의 두번째 예시(다른 프로그램에게 양보하고 대기하는 방식)

  • 해당 I/O 작업이 완료될때까지 해당 프로그램에게서 CPU의 주도권을 빼앗습니다.
  • 이후 I/O 처리를 기다리는 큐에 해당 프로그램을 줄 세우고, 다른 프로그램에게 주도권을 줍니다.

👍🏻 장점

  • 다른 I/O 장치를 실행시킬수 있다는 장점이 있습니다.

👎🏻 단점

  • 블로킹(Blocked) 상태 발생: I/O 작업이 완료될 때까지 프로그램은 작업 완료를 기다리는 블로킹 상태에 머물게 됩니다.
  • 컨텍스트 스위칭 오버헤드 발생: 다른 프로그램에게 CPU를 양보할 때, 운영체제는 컨텍스트 스위칭을 수행함으로 오버헤드가 발생될 수 있습니다.

⌛ 비동기식 입출력

  • 한 프로그램이 I/O 요청을 했을 때, 입출력 작업이 완료되기 전 다른 프로그램에게 CPU의 주도권을 넘겨주는 경우를 의미합니다.
  • I/O 작업의 완료 여부와 상관없이 프로그램은 계속 진행되며, 해당 내용이 끝나고 단순히 결과만 받으면 되는 경우를 의미합니다.

👍🏻 장점

  • 논 블로킹(Non-blocking) 상태: I/O 작업이 진행되는 동안에도 블로킹 작업 없이 프로그램은 다른 작업을 계속 진행할 수 있습니다.
  • 효율적인 CPU 사용: 비동기식 입출력 방식에서는 CPU가 블로킹 상태에 빠지지 않으므로, CPU 사용이 보다 효율적입니다.

👎🏻 단점

  • 복잡한 프로그래밍 모델: 비동기식 입출력은 동기식 입출력에 비해 프로그래밍이 복잡합니다.

5️⃣ DMA

  • 컴퓨터 내부의 메모리는 원칙적으로 CPU만 접근할 수 있습니다.
  • 따라서 CPU이외의 장치에서 메모리를 접근하려면 CPU에게 인터럽트를 발생시켜 CPU가 해당 작업을 수행해야 접근이 가능합니다.

❓ 만약 인터럽트가 자주 발생된다면?

  • CPU는 현재 작업 내용을 멈추고, 매번 인터럽트 요청으로 들어오는 내용을 처리하는데 바빠져 비효율적이게 됩니다.
  • 때문에 DMA(Direct Memory Access) Controller를 두어, CPU가 I/O 장치들의 요청에 의해 자주 인터럽트 당하는 것을 막아주는 역할을 하게 됩니다.

🔎 DMA Controller

  • CPU가 I/O 장치들의 요청에 의해 자주 인터럽트 당하는 것을 막아주는 역할을 하기 위해 DMA를 관리하는 컨트롤러를 의미합니다.

🔎 DMA(Direct Memory Access)

  • I/O 장치의 내용을 처리하기 위해 메모리에 가까운 속도로 처리하는 영역을 의미합니다.
  • CPU의 중제 없이 디바이스 컨트롤러가 로컬 버퍼의 내용을 Block 단위로 직접 전송합니다.
  • 인터럽트를 발생시키지 않고, I/O 작업의 내용을 메인 메모리에 올려둡니다.
  • 이후, 해당 작업이 모두 끝나면 CPU인터럽트를 걸어서 한꺼번에 해당 내역을 처리하게 할 수 있습니다.

👉🏻 기존의 방식

🎯 DMA 방식

'CS > 운영체제' 카테고리의 다른 글

컴퓨터 시스템의 동작원리 - Part2  (0) 2024.03.07
운영체제의 개요  (1) 2024.03.07
profile

제이제이

@아사비치즈스틱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!