컴퓨터 시스템의 동작 원리 - 2

초보개발·2022년 2월 5일
0

OS

목록 보기
17/38

DMA(Direct Memory Access)

메모리는 CPU에 의해서만 접근할 수 있는 장치인데, CPU말고 다른 장치가 메모리에 접근하기 위해서 CPU에게 인터럽트를 발생시켜서 CPU가 대신 수행해주는 방식으로만 가능하다. 하지만 모든 메모리 접근 연산이 CPU만 통해서 이루어지면 입출력 장치가 메모리 접근을 원할 때마다 인터럽트에 의해 CPU의 업무가 방해를 받게 되어 CPU 사용의 효율성이 떨어지게 된다.
이러한 비효율적인 방식을 개선하기 위해 CPU 말고 메모리 접근이 가능한 장치를 하나 더 추가했는데, 이 장치를 DMA라고 부른다. DMA는 일종의 컨트롤러로서 CPU가 빈번하게 인터럽트 당하는 것을 막아주는 역할을 한다. DMA는 로컬버퍼에서 메모리로 읽어오는 작업을 대행하게 된다. 이때 DMA는 block단위로 정보를 메모리로 읽어온 후 CPU에게 인터럽트를 발생시켜 작업이 완료됨을 알려준다. CPU로 오는 인터럽트의 빈도를 줄여 좀 더 효율적으로 관리하고 입출력 연산을 빠르게 수행할 수 있게 된다.

저장장치 구조

컴퓨터 시스템을 구성하는 저장장치: 주기억장치, 보조기억장치

  • 주기억장치: 휘발성, RAM 메모리
  • 보조기억장치: 비휘발성, 마그네틱 디스크와 CD 등

보조기억장치

보조기억장치의 용도
1. 파일 시스템용: 전원이 나가도 유지해야할 정보가 있으므로 그것을 파일 형태로 보조기억장치에 저장
2. 메모리의 연장 공간인 스왑 영역용: 메모리 부족으로 인해 운영체제는 프로그램 수행에 당장 필요한 부분만 메모리에 올려 놓고 다른 부분들은 디스크의 스왑 영역에 내려 놓음
(swap out: 디스크에 내려놓는 일, swap in: 필요할 때 메모리 영역으로 올림)

보조기억장치 중 하나인 하드디스크(위 사진)는 여러 개의 마그네틱 원팡이 있고 암이 이동하면서 원판에 저장된 데이터를 읽고 쓰는 방식으로 동작한다. 디스크 원판의 표면은 트랙으로 나뉘고 각 트랙은 섹터로 뉘는데 섹터에는 최소한의 단위 정보가 저장된다.

저장장치의 계층 구조


저장장치는 빠른 저장장치부터 느린 저장장치까지 단계적인 계층 구조로 이루어져있다. 빠른 저장장치는 비싸기 때문에 적은 용량만 사용되며 느린 저장장치는 저렴하므로 대용량을 사용하나 접근 속도가 느리다는 단점이 있다.
따라서 필요한 정보는 빠른 저장장치에 두어 수행 속도를 올리고 다른 정보들은 느린 저장장치에 보관하게 된다.
캐시는 캐싱 기법들을 이용해 적은 용량의 캐시 메모리를 사용하더라도 메인 메모리와 같이 큰 용량을 가진 것처럼 효율적으로 동작하도록 관리할 수 있다. 캐싱 기법은 상대적으로 용량이 적은 빠른 저장장치를 이용해 느린 저장장치의 성능을 향상시키는 기법을 일컫는다. 빈번하게 사용되거나 중요한 정보를 캐시에 저장함으로써 두 저장장치 사이의 속도를 완충시킬 수 있다.

하드웨어의 보안

다중 프로그래밍 환경에서 여러 프로그램이 동시에 실행되므로 프로그램들이 다른 프로그램의 실행을 방해하거나 충돌이 나는 것을 방지하기 위해 하드웨어에 대한 각종 보안 기법이 필요하다.
하드웨어적 보안을 유지하기 위해 운영체제는 커널 모드와 유저 모드 두 가지 모드를 지원한다.

  • 한 프로그램이 다른 프로그램의 메모리 영역이나 파일 영역을 침범할 때가 있다. 중요한 정보에 접근해 위험한 상황을 초래할 수 있는 연산은 커널 모드에서만 실행할 수 있게 막아 프로그램이 직접 위험한 명령을 수행할 수 없도록 한다. 이를 제외한 일반적인 연산은 사용자 모드에서 프로그램이 수행하도록 통제하여 보안성을 확보할 수 있다.

  • 커널모드: 운영체제가 CPU 제어권을 갖고 운영체제 코드를 실행하는 모드이다. 커널 모드에서는 모든 종류의 명령을 다 실행시킬 수 있다.

  • 사용자모드: 일반 사용자 프로그램이 실행되며 제한적인 명령만 수행 가능하다.

CPU 내부에 모드 비트(mode bit)를 두어 사용자 프로그램을 감시한다. 모드비트가 0인 경우 커널모드, 모드비트가 1인 경우 사용자모드로 설정된다. CPU는 보안과 관련된 명령을 수행하기 전 먼저 모드 비트를 보고 0인 경우에만 수행하도록 한다. 그러다가 프로그램에게 CPU 제어권을 넘기게 될 때 모드비트를 1로 설정해 넘긴다.

메모리 보안

단순화된 메모리 관리 기법을 사용할 때 한정된 설명임.
여러 프로그램이 메모리에 동시에 올라가서 실행되므로 프로그램이 다른 프로그램이나 운영체제가 위치한 메모리 영역을 침범할 수 있기 때문에 메모리 보안도 필요하다. 2개의 레지스터(base register, limit register)를 사용해 프로그램이 접근하려는 메모리 부분이 합법적인지 체크함으로써 메모리를 보호할 수 있다.

  • base register: 어떤 프로그램이 수행되는 동안 그 프로그램이 합법적으로 접근할 수 있는 메모리상의 가장 작은 주소를 보관
  • limit register: 그 프로그램이 기준 레지스터 값부터 접근할 수 있는 메모리의 범위를 보관

어떤 프로그램이 실제 메모리에 올라가 있는 부분의 시작 주소와 그 프로그램의 길이를 기준 레지스터와 한계 레지스터에 각각 저장해 메모리 접근 연산 발생시 하드웨어적으로 현재 접근하려는 위치가 합법적인 범위 안에 있는지 확인한다. 사용자 프로그램은 기준 레지스터에 있는 주소부터 기준 레지스터 + 한계 레지스터 값 사이의 주소 영역에만 접근 가능하며 범위를 넘어서면 exception 인터럽트를 발생시키게 된다. CPU 제어권을 프로그램부터 운영체제로 넘겨 해당 프로그램을 강제 종료시킨다.

CPU 보호

CPU가 하나의 프로그램에서 독점되는 것을 방지하기 위해 운영체는 timer라는 하드웨어를 사용한다. 타이머는 정해진 시간이 지나면 인터럽트를 발생시켜 운영체제가 CPU 제어권을 가질 수 있도록 수행한다. 여기서 타이머의 값을 세팅하는 명령을 load timer라고 하며 특권명령에 속한다. 타이머는 시분할 시스템에서 현재 시간을 계산하기 위해서 사용되기도 한다.

  • 시분할 시스템은 여러 프로그램이 CPU의 시간을 조금씩 나누어 사용하는 시스템을 의미

시스템 콜을 이요한 입출력 수행

프로그램이 디스크 파일에 데이터를 쓰거나 읽어오는 행위, 키보드로부터 입력을 받거나 수행 결과를 출력하는 행위 등은 모두 특권명령인 입출력 명령에 해당한다. 따라서 사용자 프로그램이 직접 수행할 수 없다. 이러한 입출력 명령은 운영체제 코드에 구혀되어 있으며 시스템 콜이라는 요청으로 입출력을 대신 수행할 수 있다.
프로그램이 시스템 콜을 할 경우 트랩이 발생해 CPU의 제어권이 운영체제로 넘어가게 된다. 운영체제는 해당 시스템 콜을 처리하기 위한 루틴으로 이동해 정의된 명령을 수행한다.

0개의 댓글