본문 바로가기
운영체제

[OS] 운영체제와 정보기술의 원리 3장(2/2) - 저장장치

by BeforB 2021. 11. 22.
728x90

 

 

반효경 교수님의 [운영체제와 정보기술의 원리] 3장 컴퓨터 시스템의 동작 원리 중

 

 

 

이전 글 - 운영체제와 정보기술의 원리 3장(1/2) - 인터럽트

 

[OS] 운영체제와 정보기술의 원리 3장(1/2) - 인터럽트

반효경 교수님의 [운영체제와 정보기술의 원리] 3장 컴퓨터 시스템의 동작 원리 중 1. 컴퓨터 시스템의 구조 내부장치 : CPU, 메모리, ... 외부장치 : 디슼, 키보드, 마우스, 모니터, 네트워크 장치

beforb.tistory.com

 

 

 

 

 

5. 입출력 구조

입출력(I/O)란? 컴퓨터 시스템이 컴퓨터 외부의 입출력 장치들(디스크, 키보드, ...)과 데이터를 주고받는 것

 

동기식 입출력(Synchronous I/O)

어떤 프로그램이 입출력 요청을 했을 때 입출력 작업이 완료되어야 다음 작업을 진행 할 수 있음. 예를 들어 프로그램 A에서 디스크 입출력을 요청한 경우 A는 그동안 아무 명령도 수행하지 않고 입출력 작업이 끝났다는 인터럽트가 발생할 때까지 대기함. 

입출력 연산은 CPU 연산에 비해 상대적으로 느리기 때문에 CPU가 입출력 연산이 끝날 때까지 인터럽트를 기다리며 자원을 낭비를 초래.

 

따라서 동기식 입출력에서는 CPU 낭비를 방지하기 위하여 해당 프로그램의 입출력 연산이 끝날 때까지 CPU를 빼앗아 다른 프로그램(B)에게 이양하여 B가 CPU를 사용할 수 있도록 하고, A는 봉쇄상태로 전환시켜 CPU를 받을 수 없도록 한다.

 

동기화 문제와 디바이스 큐(Device Queue)

동기식 입출력에서 CPU를 다른 프로그램에게 할당하지 않고 하나의 프로그램에서만 사용한다면 동기화가 자동적으로 이루어져 문제가 발생하지 않지만 위와 같이 다른 프로그램에게 넘길 경우 동기화 문제가 발생할 수 있다.

만일 서로 다른 프로그램이 동시에 입출력 연산을 요청하는 경우 의도하지 않은 결과가 초래될 수 있기 때문에 입출력 요청의 동기화를 위해 장치별로 큐(Queue)를 두어 요청한 순서대로 처리할 수 있도록 한다.

 

 

비동기식 입출력(Asynchronous I/O)

프로그램 A가 입출력 연산을 요청한 후 연산이 끝나기를 기다리지 않고 CPU 제어권을 다시 받아 입출력 연산과 상관없는 다른 작업을 진행 할 수 있도록 한다.

 

 

 

 

6. DMA(Direct Memory Access)

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

 

풀어보면, 원래 메모리는 CPU에 의해서만 접근이 가능하다. 따라서 그 외의 장치들이 메모리에 접근하기 위해서는 반드시 CPU에게 인터럽트를 발생시키고 CPU가 직접 접근하여 처리한다. 하지만 매번 CPU에 의해서만 이루어질 경우 CPU가 다른 연산을 하고 있더라도 계속 인터럽트가 발생하여 기존 연산을 방해받기 때문에 CPU 이외에 메모리 접근이 가능한 장치를 두고 이를 DMA라고 부른다.

 

즉, CPU가 다른 연산을 하고 있는 동안 입출력 장치들에 의해 자주 인터럽트 되어 연산을 방해받지 않도록 도와주는 역할을 하는 것이다.

 

DMA는 데이터를 바이트(byte) 단위가 아닌 블록(block)이라는 큰 단위로 읽어온 후 메모리에 전달하고 CPU에게 메모리 접근 작업이 완료되었음을 알린다.(데이터를 큰 단위로 읽어옴으로써 CPU에게 발생시키는 인터럽트 빈도를 줄임)

 

 

 

 

7. 저장장치의 구조

주기억장치

- 보통 메모리를 뜻함

- 휘발성(Volatile) 메모리

 

보조기억 장치

- 디스크

- 비휘발성(Nonvolatile) 메모리

 

보조기억 장치의 용도

1) 파일시스템

전원이 나가도 유지해야 할 정보를 파일 형태로 보조기억장치에 저장함.

 

2) 스왑 영역

메모리는 상대적으로 크기가 한정적이고, 비싸고, 용량이 적기 때문에 여러 프로그램이 메모리에 올라가 있으면 공간이 부족해짐. 이 경우 OS는 프로그램이 수행되기 위해 당장 필요한 부분만을 메모리에 올리고 지금 당장 필요하지 않은 부분은 디스크의 '스왑 영역'에 옮기고(==스왑 아웃 시키다) 나중에 필요할 때 다시 메모리에 옮김.

 

보조기억장치가 기본적으로 비휘발성 용도로 사용되는 것과 구분되어 스왑영역은 프로그램이 종료될 때 삭제하는 휘발성 용도로 동작됨(디스크에 존재하지만 메모리의 연장선 느낌)

 

 

 

 

8. 저장장치의 계층 구조

빠른 저장장치부터 느린 저장장치까지 단계적 계층 구조.

최상위는 CPU 내부에 존재하는 레지스터, 캐시 메모리, 메인 메모리 등 휘발성 저장장치이며 하위는 비휘발성 저장장치인 마그네틱 디스크, 광디스크, 마그네틱 테이프로 구성된다.

 

상위 저장장치로 갈수록 접근 속도가 월등히 발라지지만 가격이 비싸고 용량은 상대적으로 적으며, 하위 저장장치로 갈수록 속도와 가격은 낮아지고 용량이 커진다.

 

컴퓨터 시스템의 저장장치 계층 구조

 

 

캐싱 기법

상대적으로 용량이 적은 빠른 저장장치를 이용하여 느린 저장장치의 성능을 향상시키는 총체적 기법. 상대적으로 느린 저장장치의 내용 중 당장 사용되거나 빈번히 사용될 정보를 빠른 저장장치에 저장함으로써 접근 속도를 빠르게 하고 전체적 성능을 향상시킨다.

 

 

이전에 작성해둔 포스팅에 컴퓨터 메모리 구조에 대해 간단하게 정리해 둔 글이 있는데 참고하면 좋을 것 같다.

 

컴퓨터의 메모리 구조 - 하드디스크, 메인메모리, 캐시의 차이

Redis를 공부하려다가 캐시와 메모리, 하드디스크에 대해 헷갈려서 컴퓨터의 메모리 구조에 대해서 전반적으로 다시 정리해보았다. 메모리는 '기억장치'라는 뜻을 가지고 있다. 일반적으로 메모

beforb.tistory.com

 

 

 

 

9. 하드웨어 보안

OS는 여러 프로그램이 동시에 실행될 수 있는 다중 프로그래밍 환경에서 동작한다.

이 때 각 프로그램 간 충돌이나 보안 이슈를 방지하기 위해 OS는 커널모드(kernel mode, system mode)사용자 모드(user mode) 두 가지 모드를 지원한다.

 

모드 비트

커널모드와 사용자모드를 구분하기 위해 CPU 내부에 모드 비트(mode bit)를 두어 사용한다. 커널모드일 경우 0으로 세팅되어 모든 명령을 수행할 수 있고, 사용자모드일 경우 1로 세팅되어 제한된 명령만이 수행 가능하다. CPU는 모든 보안 관련 연산을 수행하기 전 항상 모드 비트를 조사한다.

 

커널 모드(kernel mode, system mode)

중요한 정보에 접근하여 위험한 상황을 발생시킬 수 있는 연산은 무조건 커널모드에서만 실행.

모든 입출력 명령은 특권명령으로 규정하여 커널 모드에서만 수행된다.(다른 프로그램의 파일에 접근하는 경우를 방지하기 위하여)

시스템 콜이나 인터럽트가 발생할 경우 CPU의 모드비트가 0으로 전환되어 특권명령을 수행한다.

 

사용자 모드(user mode)

사용자 프로그램에서의 일반 연산을 수행.

 

 

 

 

 

10. 메모리 보안

여러 프로그램이 메모리에 동시에 올라가서 실행되기 때문에 다른 사용자 프로그램의 영역에 침범하는 것을 방지하기 위해 2개의 레지스터를 사용하여 접근하고자 하는 메모리 영역이 합법적인지 체크한다.

 

기준 레지스터(Base Register)

어떤 사용자 프로그램이 접근할 수 있는 가장 작은 메모리 주소.

 

한계 레지스터(Limit Register)

어떤 사용자 프로그램이 기준 레지스터부터 접근할 수 있는 메모리의 범위.

 

예를 들어 프로그램 A의 기준 레지스터가 440,000 한계 레지스터가 120,000일 경우 프로그램 A가 접근 가능한 메모리 영역은 440,000 ~ 560,000이다.

 

단 이 방법은 하나의 프로그램이 메모리를 연속적으로 사용할 경우에만 가능한 방법이다. 불연속 메모리 기법을 사용하는 경우는 페이징 기법(7장) 등을 통해 메모리를 안전하게 관리한다.

 

 

 

 

 

11. CPU 보호

CPU가 특정 프로그램에 의해 독점되어 사용되는 것을 막기 위해 OS는 타이머(timer)라는 하드웨어를 사용하여 정해진 시간이 지나면 인터럽트를 발생시켜 CPU를 다른 프로그램이 점유할 수 있도록 세팅한다.

 

타이머는 일정 시간 단위로 세팅될 수 있으며 매 클럭 틱(clock tick) 마다 1씩 감소하여 0이 되면 인터럽트가 발생한다. 타이머의 값을 세팅하는 명령을 로드 타이머(load timer)라고 하며 특권명령에 속한다.

 

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

 

 

 

 

 

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

사용자 프로그램이 특권 명령인 입출력 명령을 하기 위해서는 OS에 시스템 콜을 발생시켜 수행해야 한다. 

시스템 콜을 할 경우 트랩이 발생하여 CPU의 제어권이 OS로 넘어가고 OS는 해당 시스템 콜을 처리하기 위한 루틴을 수행한 후 작업이 완료되면 CPU에게 인터럽트를 발생시켜 다시 해당 프로그램이 CPU를 할당받을 수 있도록 한다.

 

 

 

 

 

 

 

728x90

댓글