2. Storage 구조와 I/O구조

2025. 3. 12. 19:11Computer Science/OS

반응형

1. Storage 구조

CPU는 연산하는 장치이다. CPU에도 기억장치가 존재하지만 이는 연산에 사용되는 데이터들이고 필요가 없어지면 즉시 빼버린다. 또한 용량에도 한계가 있기 때문에 많은 양의 데이터를 저장해 두지 못한다.

그래서 CPU외부의 저장장치에 접근하여 데이터들을 가져온다. 

컴퓨터를 이루는 저장장치의 구조에 대해서 살펴보자

 

  • 주기억장치(Main Memory)
  • 보조 저장장치(Secondary storage)

주기억장치는 우리가 RAM이라고 부르는 녀석이다. CPU는 주기억장치만 memory address를 사용하여 직접 접근한다.

엄밀히 말하면 '리얼 직접'은 아니지만 CPU에서 필요한 데이터들을 적재하고 CPU는 다른 하부 저장장치가 아닌 RAM에서만 가져온다는 의미에서는 직접이라는 표현이 맞는 것 같다.

실행할, 실행되는 프로그램들은 주기억장치에 적재된다. 그래서 게임이나 여러 프로그램들을 최초 실행하면 로딩이 긴편인데 그 과정이 메인메모리에 열심히 적재를 하고 있는 것이다.

중요한 특징 중 하나로는 휘발성( Volatile )이 있다는 것이다. 휘발성이란 전원이 공급 되는 동안에 일시적으로 저장한다는 의미로 생각하자.

 

보조 저장장치는 메인 메모리와 다르게 CPU가 직접 관여하지 않는다. 데이터를 직접 가져오지 않는다는 뜻이다. 

종류에는 하드디스크(HDD), SSD 등이 있다. 

저장 용량은 크지만 느리다는 단점이 있다. 우리가 실행하지는 않지만 컴퓨터에 저장되어 있는 프로그램이나 데이터는 보조 기억장치에서 불러주기 만을 기다리고 있는 것이다. 메인 메모리와 또 다른 점은 비휘발성(Nonvolatile)이라는 점이다.

컴퓨터 전원을 내려도 우리의 소중한 프로그램과 데이터는 사라지지 않는다.

저장 장치 계층 구조

 

요즘은 HDD,SSD 정도만 사용한다. HDD도 느리다는 이유로 개인용 컴퓨터에선 거의 사용되지 않지만,  많은 저장공간이 필요한 작업 PC나, 초대용량을 저장해야하는 서버같은 컴퓨터에서는 HDD도 많이 사용한다.

보조저장장치에 잠자고 있던 프로그램은 어떻게 CPU 에서 실행되는 걸까 살펴보면. 위에 존재하는 더 빠른 저장장치로 데이터를 보내고 보내서 CPU가 활용할 수 있도록 적재된다. 이 과정을 우리는 캐싱(caching)이라고 한다.

 

 하지만 설명했듯이 속도가 빠른 녀석들은 대신 적은 용량을 가지고 있어서 아래의 모든 데이터를 한번에 적재할 수 없다.

그래서 일부만을 적재하게 된다.

 

보조저장장치 -> 메인메모리 -> 캐시

 

과정 모두에서 이루어진다. 
여기서 "어떤 데이터들을 적재하고 또 다른 데이터를 새로 가져오기 위해 빈공간을 만들 것인가"가 중요해진다. 이 과정을 관장하는 것도 OS에서 이루어지는 일 중 하나이다.

2. I/O 구조

지금까지 CPU와 저장장치, 컴퓨터 내부에서 일어나는 일들에 대해서 간략하게 봤다면 I/O는 우리와 연관이 있는 부분이다. Input 과 Output  줄여서 I/O 다. 말그대로 입력과 출력이다. 

많은 프로그램들은 사람과 상호작용 하도록 만들어진다. 우리가 키보드, 마우스 같은 Input 장치를 통해 입력하고. 모니터 프린터 스피커 같은 여러 Output 장치를 통해 그 결과를 받는다. 컴퓨터에 어떤 방법으로든 데이터를 전달하고 받는 장치, 이것을 I/O Device 라고 한다. (HDD/SSD도 I/O 장치라고 할 수있다.)

 

이 I/O 신호도 결국 CPU까지 가서 처리 되어야 한다. CPU는 정말 할 일이 많다.

이 I/O 장치와 CPU 간의 데이터 전송은 Device Controller를 통하여 이루어 진다.

 

이렇게 I/O 장치들의 관리도 OS에서 Device Driver 라는 프로그램에서 이루어진다.
Device controller에 대한 제어 프로그램을 수행하여 I/O 동작을 제어하게 되는 것이다.

실제로 많은 부분의 OS 코드는 I/O 동작 관리에 할애된다. 

I/O 동작관리가 시스템의 안정성과 성능에 중요하고, 장치의 특성이 종류에 따라서 매우 다양하기 때문이다.

 

그럼 OS는 어떤 방식을 사용해서 I/O 장치들을 관리할까.

  • Programmed I/O (Polling)
  • Interrupt-driven I/O
  • Direct Memory Access (DMA)

Polling은 Busy Waiting 이라고도 하는데 그냥 계속 반복조사하는 프로그램을 실행하는 것이다. I/O 입출력 전송이 완료될때 까지 기다리고, 전송이 완료되면 device controller와 memory간의 데이터 전송을 수행하는프로그램을 실행한다.

프로그램 만 사용하여 수행되기 때문에 Programmed I/O 라고 하는 것이다. 프로그램 이기에 당연히 CPU에서 연산 및 실행이 이루어진다.

단점은 명확히보인다. I/O 동작이 진행되는동안CPU는다른 작업을 수행할 수 없음이다.

 

Interrupt-driven I/O 는 I/O 전송 완료를 interrupt를 통하여 CPU에게 알리는 방식이다. interrupt는 늘상 cpu에서 처리하고 있는 것이기 때문에 여기에 슥 섞여서 I/O 처리를 하게 요청하는 것이다. interrupt 이기 때문에 interrupt handler를 통해 이를 처리하고 CPU는 I/O 전송을 시작한 후에 다른 작업 수행이 가능하다.

하지만 빈번하게 interrupt 요구를 하는 것도 CPU를 방해하는 행위이다. 대량의 블록 단위 IO 전송에는 빈번하게 이루어 지기 때문에 오버헤드가 발생하게 된다.


Direct Memory Access는 CPU 개입 없이 전송이 이루어진다. device controller의 local buffer와 memory 간에 직접 데이터 전송을 수행한다. 메모리 속도에 근접한 속도로 전송 가능해 고속 I/O device전송이 필요한 장치에 사용된다. CPU는DMA I/O 동작의 초기화와 마무리 작업은 수행 하지만 데이터 전송에 참여하지는 않는다. 쉽게 말해 CPU에게 
"우리 시작할게요", "우리 끝났어요" 정도만 알리고 지들끼리 알아서 한다는 것이다.

DMA 과정

좋은거 DMA만 쓰면 되잖아 하고 싶지만 저장장치도 그렇고, 모든 걸 좋은 걸로 바꿀 순 없다. 비용의 문제 등 여러가지 Trade-off가 있기 마련이다.
그래서 현대의 OS는 I/O 장치의 특성에 따라 여러 방식을 채용하여 사용한다.

'Computer Science > OS' 카테고리의 다른 글

3. OS의 구조  (0) 2025.04.13
1. OS가 뭔데  (0) 2025.03.10