3장-컴퓨터 시스템의 동작 원리(6~12)

Jimin·2022년 9월 28일
0

운영체제

목록 보기
5/9
post-thumbnail

6. DMA

원칙적으로 메모리는 CPU에 의해서만 접근할 수 있는 장치이다.
따라서, CPU 외의 장치가 메모리의 데이터에 접근하기 위해서는 CPU에게 인터럽트를 발생시켜 CPU 가 이를 대행하는 식으로만 가능하다.

컨트롤러가 CPU에게 인터럽트를 발생시키면 CPU는 컨트롤러의 로컬버퍼와 메모리 사이에서 데이터를 옮기는 일을 하게 된다. (로컬 버퍼 ↔ CPU ↔ 메모리)

메모리 접근 연산이 CPU에 의해서만 이루어질 경우,
입출력 장치가 메모리 접근을 원할 때마다 인터럽트에 의해 CPU의 업무가 방해를 받게 되어 CPU의 사용의 효율성이 떨어지는 문제점을 해결하기 위하여 DMA를 사용한다.

DMA(Direct Memory Access)

DMA는 일종의 컨트롤러로, CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아주는 역할을 한다.

CPU 사용의 효율성을 극복하기 위해 CPU 이외의 메모리 접근이 가능한 장치이다.

→ DMA를 사용하게 되면 로컬 버퍼에서 메모리로 읽어오는 작업을 CPU가 담당하는 것이 아니라 DMA가 대행함으로써 CPU는 원래 하던 작업을 멈추고 인터럽트를 처리할 필요가 없어지게 된다.

이때 DMA는 바이트(byte) 단위가 아니라 블록(block)이라는 큰 단위로 정보를 읽어온 후에 CPU에게 인터럽트를 발생시켜서 해당 작업의 완료를 알려준다.

⇒ 이러한 방식으로 인터럽트의 빈도를 줄여 CPU를 좀 더 효율적으로 관리하고 입출력 연산을 빠르게 수행할 수 있게 된다.


7. 저장장치의 구조

컴퓨터 시스템을 구성하는 저장장치는 주기억장치와 보조기억장치로 나누어 볼 수 있다.

  • 주기억장치
  • 보조기억장치

주기억장치

주기억장치는 보통 메모리라고 부르며 전원이 나가면 저장되었던 내용이 모두 사라져 버리는 휘발성(volatile)의 RAM을 매체로 사용하는 경우가 대부분이다.

보조기억장치

보조기억장치는 전원이 나가도 저장된 내용을 기억할 수 있는 비휘발성(nonvolatile)의 마그네틱 디스크를 주로 사용한다.

보조기억 장치로는 플래시 메모리, CD, 마그네틱 테이프 등이 사용된다.

보조기억 장치의 용도는 크게 두 가지로 구분된다.

  • 파일시스템(file system)용
  • 스왑영역(swap area)용

1. 파일시스템(file system)용

전원이 나가도 유지해야할 정보가 있으면 그것을 파일 형태로 보조기억장치에 저장하게 된다.
매모리는 휘발성 매체이기 때문에 비휘발성 매체인 디스크를 파일 시스템용으로 사용한다.

2. 스왑영역(swap area)용

스왑영역은 메모리의 연장 공간이다.
메모리는 크기가 한정되고, 가격이 상대적으로 비싼데다가 용량이 적은 경우가 대부분이다.

운영체제는 메모리 공간 부족을 해결하기 위해 프로그램 수행에 당장 필요한 부분만 메모리에 올려놓고 그렇지 않은 부분은 디스크의 스왑 영역에 내려 놓게 된다.

스왑 아웃(swap out)

디스크에 내려 놓는 일

스왑 아웃된 부분이 필요할 때에는 다시 메모리 영역으로 올리게 된다.

스왑 영역으로는 하드디스크 가 가장 널리 사용된다.

보조기억장치 중 가장 대표적인 저장매체인 하드디스크 에는 여러 개의 마그네틱 원판들이 있고, 암(arm)이 이동하며 원판에 저장된 데이터를 읽고 쓰는 방식으로 동작한다.
디스크 원판의 표면은 트랙(track) 으로 나뉘고, 각 트랙은 섹터(sector) 로 나뉜다.

섹터 에 최소한의 단위 정보가 저장된다.


8. 저장장치의 계층 구조

컴퓨터 시스템을 구성하는 저장장치는 빠른 저장장치부터 느린 저장장치까지 단계적인 계층 구조로 이루어진다.

빠른 저장장치

빠른 저장장치는 단위 공간당 가격이 높기 때문에 적은 용량을 사용한다.
저장장치 계층은 최상위의 CPU 내부에 존재하는 레지스터(register) 부터 캐시 메모리(cache memory) , 메인 메모리(main memory) 등의 휘발성 저장장치로 구성되는 부분이 상위에 존재하며 이 부분에 저장되는 정보는 전원이 나가면 그 내용이 사라진다.

느린 저장장치

느린 저장장치는 가격이 저렴해 대용량을 사용하는 반면 접근 속도가 느리다는 약점이 있다.
메인 메모리보다 아랫부분을 구성하는 저장장치 계층은 전원이 나가도 지워지지 않는 비휘발성 저장장치이다.

캐싱 기법

상대적으로 용량이 적은 빠른 저장장치를 이용해 느린 저장장치의 성능을 향상시키는 총체적 기법을 일컫는다.

캐싱 기법은 상대적으로 느린 저장장치에 있는 내용 중 당장 사용되거나, 빈번히 사용될 정보를 빠른 저장장치에 선별적으로 저장함으로써
두 저장장치 사이의 속도를 완충시킨다.


9. 하드웨어의 보안

운영체제는 여러 프로그램이 동시에 실행될 수 있는 다중 프로그래밍(multi-programming) 환경에서 동작한다.

⇒ 각 프로그램이 다른 프로그램의 실행을 방해하거나 프로그램 간의 충동을 일으키는 문제를 막기 위해 하드웨어에 대한 각종 보안 기법이 필요하다.

하드웨어적인 보안을 유지하기 위해서 운영체제는 기본적으로 두가지 모드를 지원한다.

  • 커널모드(kernel mode)
  • 사용자모드(system mode)

커널모드(kernel mode)

운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드로서, 이 모드에서는 모든 종류의 명령을 다 실행할 수 있다.

사용자모드(system mode)

알번 사용자 프로그램이 실행되며 제한적인 명령만을 수행할 수 있다.

시스템에 중요한 영향을 미치는 연산은 커널모드에서만 실행 가능하도록 함으로써 하드웨어의 보안을 유지한다.

하드웨어적인 지원

사용자 프로그램이 CPU를 가지고 있는 동안에는 운영체제가 자신의 코드를 실행하지 못하므로 사용자 프로그램을 감시할 방법이 없다.
⇒ 따라서, 이러한 상황을 방지하기 위해 하드웨어적인 지원이 필요하다.

컴퓨터 시스템은 CPU 내부에 모드비트 를 두어 사용자 프로그램을 감시하게 된다.

모드비트(mode bit)

  • 모드비트가 0으로 세팅 → 커널모드로서 모든 명령을 수행 가능
  • 모드비트가 1로 세팅 → 사용자모드로서 제한된 명령만 수행 가능

CPU는 보안과 관련된 명령을 수행하기 전에는 항상 모드비트를 조사해 그 값이 0으로 세팅된 경우에만 그 명령을 수행한다.

특권명령

시스템의 보안과 관련된 명령들

특권명령은 모드비트가 0일 때에만 수행할 수 있다.
즉, 특권명령은 커널모드에서 운영체제에 의해서만 수행할 수 있다.


10. 메모리 보안

디스크뿐만 아니라 메모리의 경우에도 보안이 필요하다.
→ 여러 프로그램이 메모리에 동시에 올라가서 실행되기 때문에 하나의 사용자 프로그램이 다른 사용자 프로그램이나 운영체제가 위치한 메모리 영역을 침범할 수 있기 때문이다.

적어도 인터럽트 벡터와 인터럽트 처리루틴이 있는 곳은 각별한 보안이 필요하다.

사용자 프로그램이 인터럽트 처리루틴을 접근하거나 변경할 수 있을 경우,
운영체제만 수행할 수 있는 특권명령을 보안성이 침해되는 이상한 명령으로 변형할 수 있기 때문이다.

⇒ 이러한 문제를 해결하기 위해 2개의 레지스터를 사용해서 츠로그램이 접근하려는 메모리 부분이 합법적인지 체크함으로써 메모리를 보호할 수 있다.
이 때 사용되는 2개의 레지스터

  • 기준 레지스터 (base register)
  • 한계 레지스터 (limit register)

기준 레지스터 (base register)

어떤 프로그램이 수행되는 동안 그 프로그램이 합법적으로 접근할 수 있는 메모리 상의 가장 작은 주소를 보관한다.

한계 레지스터 (limit register)

프로그램이 기준 레지스터 값부터 접근할 수 있는 메모리의 범위를 보관한다.

⇒ 즉, 어떤 프로그램이 실제 메모리에 올라가 있는 부분의 시작 주소와 그 프로그램의 길이를 각각 기준 레지스터와 한계 레지스터에 보관해 메모리 접근 연산이 있을 때마다 하드웨어적으로 현재 접근하려는 위치가 합법적인 범위에 있는지 체크한다.

사용자 프로그램은 기준 레지스터에 있는 주소부터 기준 레지스터+한계 레지스터 값 사이의 주소 영역에만 접근할 수 있다.

접근하려는 주소가 이 범위 안에 없으면 불법적인 메모리 접근이므로, 예외 상황이라는 일종의 소프트웨어적인 인터럽트를 발생시켜 CPU의 제어권을 해당 프로그램으로부터 운영체제로 이양시키고, 운영체제는 예외 상황을 강제로 종료시킨다.

사용자모드 인 경우, 기준 레지스터와 한계 레지스터를 사용해서 메모리를 보호하게 되고,
커널모드 에서는 메모리에 무제한으로 접근하는 것이 가능하다.


11. CPU 보호

CPU 독점을 막기 위해 타이머(timer)라는 하드웨어를 사용한다.

타이머(timer)

타이머는 정해진 시간이 지나면 인터럽트를 발생시켜 운영체제가 CPU의 제어권을 획득할 수 있도록 하는 역할을 수행한다.

타이머에 의해 발생되는 인터럽트 처리루틴의 역할은 지금 CPU를 점유하고 명령을 실행 중인 프로그램으로부터 CPU를 빼앗아 다른 프로그램에게 CPU를 이양하는 것이다.

타이머는 일정 시간 단위로 세팅될 수 있으며 매 클럭 틱(clock tick)때 마다 1씩 감소한다.
→ 타이머가 0이 되는 순간 인터럽트가 발생한다.

로드 타이머(load timer)

타이머의 값을 세팅하는 명령으로, 특권 명령에 속한다.

타이머는 시분할 시스템에서 현재 시간을 계산하기 위해서도 사용된다.


12. 시스템 콜을 이용한 입출력 수행

입출력 명령은 모두 특권명령에 해당하여 사용자 프로그램이 직접 수행할 수 없다.
이러한 입출력 명령은 운영체제 코드에 구현되어 있다.
사용자 프로그램은 직접 입출력을 수행하는 대신, 운영체제에게 시스템 콜이라는 서비스 대행 요청을하여 입출력을 수행하게 된다.

시스템 콜

일종의 소프트웨어적인 인터럽트로서 사용자 프로그램이 시스템 콜을 할 경우 트랩이 발생해 CPU의 제어권이 운영체제로 넘어가게 된다.

그러면 운영체제는 해당 시스템 콜을 처리하기 위한 루틴으로 가서 정의된 명령을 수행한다.

예) 시스템 콜이 디스크 입출력 요청일 경우

디스크 컨트롤러에게 입출력 요청을 수행하도록 명령
→ 추후에 디스크 컨트롤러가 입출력 수행을 마침
→ CPU에게 인터럽트를 발생시켜 입출력이 완료되었음을 알려줌
→ 해당 프로그램이 다시 CPU를 할당 받을 수 있음

profile
https://github.com/Dingadung

0개의 댓글