Study 2주차 정리_Operating System

Park Jae Hong·2022년 6월 10일
0

DMA (Direct Memory Access)


: 메모리는 CPU에 의해서만 접근할 수 있는 장치다 따라서 CPU 외의 장치가 메모리의 데이터에 접근하기 위해서는 CPU에게 인터럽트를 발생시켜 CPU가 이를 대행하는 식으로만 가능하다. 앞서 살펴본 것처럼 컨트롤러가 CPU에게 인터럽트를 발생시키면 CPU는 컨트롤러의 로컬버퍼와 메모리 사이에서 데이터를 옮기는 일을 하기 된다. 한편 모든 메모리 접근 연산이 CPU에 의해서만 이루어질 경우 입출력 장치가 메모리 접근을 원할 때마다 인터럽트에 의해 CPU의 업무가 방해를 받게 되어 CPU 사용의 효율성이 떨어지는 문제점이 발생한다. 이러한 비효율성을 극복하기 위해 CPU 이외에 메모리 접근이 가능한 장치를 하나 더 두는 경우가 많은데, 이를 DMA 라고 부른다. DMA는 일종의 컨트롤러로서, CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아주는 역할을 한다. 로컬 버퍼에서 메모리를 읽어올때 CPU가 아니라 DMA 가 대행함으로써 CPU가 인터럽트 처리를 할 필요가 없어진다.


저장장치의 구조



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

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

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

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

  • 두번째는 메모리의 연장 공간인 스왑 영역용이다. 메모리는 크기가 한정되고, 가격도 상대적으로 비싼데다가 용량이 적은 경우가 대부분이다. 그러므로 다수의 프로그램이 메모리에 올라가 동시에 수행되는 현대의 컴퓨터 환경에서는 메모리 공간이 부족한 경우가 흔히 발생한다. 이 경우 운영체제는 프로그램 수행에 당장 필요한 부분만 메모리에 올려놓고 그렇지 않은 부분은 디스크의 스왑 영역에 내려 놓게 된다. 이를 스왑 아웃(swap out) 이라 한다.


저장 장치의 계층 구조

: 컴퓨터 시스템을 구성하는 저장장치는 빠른 저장장치 부터 느린 저장장치까지 단계적인 계층 구조로 이루어진다. 빠른 저장장치는 단위 공간당 가격이 높기 때문에 적은 용량을 사용하며, 느린 저장장치는 가격이 저렴해 대용량을 사용하는 반면 접근 속도가 느리다는 약점이 있다.

  • 계층 구조 : CPU 내부에 존재하는 레지스터, 캐시 메모리, 메인 메모리 부터 저장장치 계층에 전원이 나가도 지워지지 않는 비휘발성 저장 장치인 마그네틱 디스크, 광디스크, 마그네틱 테이프가 있다.


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


하드웨어 보안

: 보통 사용하는 운영체제는 다중 프로그래밍 환경에서 작동하는데, 그럼 프로그램 간에 충돌을 일으킬 수 있어 이를 막기 위해 각종 보안 기법들이 필요하다. 
하드웨어적인 보안을 유지하기 위해서 운영체제는 기본적으로 커널모드(kernel mode) 와 사용자 모드 (user mode) 로 나누어 진다.

  1. 커널모드는 위험한 상황을 초래할 수 있는 연산에서만 실행된다. 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드로서, 이 모드에서는 모든 종류의 명령을 다 실행할수 있다.
  2. 사용자 모드는 그렇지 않은 일반적인 상황에서는 사용자 모드를 수행하도록 통제하여 보안성을 확보한다. 일반 사용자 프로그램이 실행되며 제한적인 명령만 수행할 수 있다.

메모리 보안

: 여러 프로그램이 메모리에 동시에 올라가서 실행되기 때문에 하나의 사용자 프로그램이 다른 사용자 프로그램이나 운영체제가 위치한 메모리 영역을 침범할 수 있기 때문에 필요하다. 이러한 문제를 해결하기 위해 2개의 레지스터를 사용해서 프로그램이 접근하려는 메모리 부분이 합법적인지 체크함으로써 메모리를 보호할 수 있다. 이 때 사용되는 것이 기준 레지스터 (base register) 와 한계 레지스터(limit register) 이다.


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

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



CPU 보호

: 일반적으로 CPU는 컴퓨터 시스템 내에 하나밖에 존재하지 않기 때문에 특정 프로그램이 CPU를 독점해 무한반복문을 수행하는 등 부적절한 방법으로 CPU의 사용 권한을 독점하고 있다면 다른 프로그램 및 운영 체제가 CPU를 빼앗을 방법이 없게 된다. 이와 같이 CPU가 하나의 프로그램에 의해 독점되는 것을 막기 위해 운영체제는 타이머 라는 하드웨어를 사용한다.

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

  • 작동 원리 - 타이머에 의해 발생되는 인터럽트 처리루틴의 역할은 지금 CPU를 점유하고 명령을 실행 중인 프로그램으로부터 CPU를 빼앗아 다른 프로그램에게 CPU를 이양하는 것이다. 타이머는 일정한 시간 단위로 세팅될 수 있으며 매 클릭 틱 (clock tick) 때 마다 1씩 감소한다. 그리고 타이머가 0이 되는 순간 인터럽트가 발생하게 된다. 여기서 타이머의 값을 세팅하는 명령을 로드 타이머(load timer)라고 하고 이는 특권명령이 속한다.



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

: 사용자 프로그램이 디스크의 파일에 데이터를 쓰거나 디스크의 파일로부터 데이터를 읽어오는 행위, 키보드로부터 입력을 받거나 수행결과를 화면에 출력하는 행위등은 모두 특권 명령인 입출력 명령에 해당하므로 사용자 프로그램이 직접 수행할 수 없다. 이러한 입출력 명령은 운영체제 코드에 구현되어 있으며, 사용자 프로그램은 직접 입출력을 수행하는 대신 운영체제에게 시스템 콜 이라는 서비스 대행 요청을 하여 입출력을 수행한다.
시스템 콜 : 소프트웨어적인 인터럽트로서 사용자 프로그램이 시스테 콜을 할 경우 트랩이 발생해 CPU의 제어권이 운영체제로 넘어가게 된다. 그러면 운영체제는 해당 시스템 콜을 처리하기 위한 루틴으로 가서 디스크 컨트롤러에게 입출력 요청을 수행하도록 명령하고, 추후에 디스크 컨트롤러가 입출력 수행을 마치면 CPU에게 인터럽트를 발생시켜 입출력이 완료되었음을 알려줌으로써 해당 프로그램이 다시 CPU를 할당 받을수 있도록 한다.

profile
The people who are crazy enough to think they can change the world are the ones who do. -Steve Jobs-

0개의 댓글

관련 채용 정보