ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OS - 메인 메모리와 입출력 장치
    CS 2024. 3. 10. 23:01

    저장장치의 구조 - 메인 메모리

    CPU는 프로그램을 실행하기 위해선 먼저 해당 프로그램을 “메모리” 위에 올려놔야 한다.

     

    이럴 때 흔히 얘기하는 “메모리”는 메인 메모리(RAM)을 뜻한다.

    메모리는 바이트 형태의 배열을 띄고 있으며, 각 바이트는 그 자신의 주소를 갖고 있다.

    이러한 메모리에 대한 명시적인 상호 작용은 크게 load 와 store로 나누어져 있다.

     

    먼저 load는 메모리 위의 바이트들을 한 바이트씩 혹은 1 word 씩 CPU내부 레지스터로 옮기는 작업을 의미한다.

     

    store는 위의 반대로 레지스터에서 메모리로 옮기는 작업을 의미한다.

     

    이렇게 메모리에 대한 명시적인 상호작용 외에 프로그램 카운터에 저장된 다음 명령에 대한 시작주소를 자동으로 load한다.

     

    여기서 프로그램 카운터란 CPU 다음 명령어를 실행 할 시작 주소를 저장해두는 레지스터다.

    이 프로그램 카운터는 다음 명령어를 실행 할 시작주소를 저장하고 있다고 알려진 레지스터인데,

    해당 시작주소도 결국 메인 메모리위에 저장되어 있으므로

    실질적으로 프로그램 카운터에 의해 들고오는 다음 명령어의 시작주소는 메인메모리에서 load 하는것이 된다.

     

    저번 시간에 배운 인터럽트에서도 마찬가지로

     

    입출력 장치 드라이버에 의한 인터럽트 요청이 인터럽트 요청 라인을 통해 발생하면

    CPU는 하던 프로세스를 잠깐 중단하게 되는데,

    이 때 다음 명령을 수행할 시작주소를 잠깐 프로그램 카운터에 저장한다.

    이 저장이 결국 메인 메모리 위에 다음 명령을 실행할 시작 주소가 저장되는 것이다.

     

    따라서 해당 인터럽트의 서비스 루틴을 종료한 뒤

    프로그램 카운터로부터 원래 수행하던 명령어의 시작주소를 load시켜서 수행한다.

     

    일반적인 프로그램의 수행은 폰 노이만 시스템에서 명령어를 CPU의 레지스터로 load하고

    CPU가 이 명령을 수행하기 위해서 메인 메모리에 값을 저장하거나 load하기도 한다.

    입출력 구조

    기존의 우리는 인터럽트 방식의 I/O를 학습했다.

    다시 해당 입출력 방식을 복기 해 보자면 아래와 같다.

    1. CPU가 명령수행도중 입출력 장치에 입력 또는 출력 명령을 보낸다.
    2. CPU는 입출력 장치의 수행을 신경쓰지 않고, 다음 명령을 처리한다.
    3. 해당 장치에 명령을 보내기 위한 장치 드라이버를 통해 해당 장치의 컨트롤러의 레지스터에 장치가 처리해야 할 명령를 저장한다.
    4. 장치 컨트롤러는 레지스터 속 명령어를 해독하여 수행하고, 입력의 경우 로컬 버퍼 스토리지에 저장한다.
    5. 장치 컨트롤러가 모든 수행이 끝나면 CPU의 인터럽트 요청라인을 통해 인터럽트를 발생시킨다.
    6. CPU는 현재 명령어를 끝낸 후 인터럽트 요청라인을 읽다가 인터럽트가 발생한 것을 확인하고 인터럽트 벡터에서 서비스 루틴 헨들러 함수로 제어를 넘긴다.
    7. 헨들러 함수에 의해 인터럽트가 종료되고 CPU는 원래 수행하던 다음 명령어를 프로그램 카운터로부터 load시켜 수행한다.

    여기서 인터럽트 입출력 방식은 항상 인터럽트로 인해 CPU의 중간 개입이 이뤄진다는 점을 주목해야 한다.

    소량의 입출력의 경우엔 상관없지만, 대량의 입출력에서는 높은 오버헤드를 발생시킨다.

     

    이러한 상황에서 장치에 대한 버퍼, 및 포인터, 입출력 카운터를 세팅 한 후

    장치 컨트롤러는 CPU의 개입없이 직접 메모리로부터 로컬 버퍼로 혹은 로컬 버퍼에서 메모리로 데이터를 전송한다.

     

    이를 Direct Memory Access (직접 메모리 접근)이라고 한다.

     

    이를 활용하면 위의 인터럽트 입출력 방식에서 인터럽트에 의해 CPU가 직접 로컬 버퍼에 있는 데이터를 메인 메모리로 옮기는 작업을 할 필요 없이

    장치 컨트롤러에 의해 알아서 메인메모리 위로 올라가게 된다.

    'CS' 카테고리의 다른 글

    OS - 다중모드 운용과 타이머  (0) 2024.03.12
    OS - 멀티 프로그래밍과 멀티태스킹  (0) 2024.03.11
    OS - 멀티 프로세서  (0) 2024.03.10
    OS - OS가 할일, 컴퓨터 시스템구성  (1) 2024.03.05
Designed by Tistory.