Summary

[운영체제와 정보기술의 원리] 03장. 컴퓨터 시스템의 동작 원리

프로그래민 2021. 12. 14. 21:45
반응형

컴퓨터 시스템의 구조

컴퓨터 내부장치와 외부장치 구조

컴퓨터 시스템의 구조는 컴퓨터 내부장치인 CPU, 메모리와 컴퓨터 외부 장치인 디스크, 키보드, 마우스, 모니터, 네트워크 장치등으로 구성된다. 외부장치에서 내부장치로 데이터를 읽어와(입력) 연산을 처리후 그 결과를 외부장치로 내보내는 방식(출력)이다. 이것을 입출력(I/O)이라고 한다. 따라서 외부장치를 입출력 장치라고도 한다. 

메모리 및 입출력장 등의 하드웨어 장치에는 컨트롤러가 있다. 컨트롤러는 일종의 작은 CPU로써 각 하드웨어 장치에서의 제어를 담당한다. 메모리를 제어하는 메모리 컨트롤러, 디스크를 제어하는 디스크 컨트롤러등이 있다.

운영체제 중 항상 메모리에 올라가 있는 운영체제의 핵심 부분을 커널이라고 한다.

 

CPU 연산과 I/O 연산

컴퓨터내에서 수행되는 연산은 메인 CPU가 담당한다. 입출력 장치들의 I/O연산은 입출력 컨트롤러가 담당한다. 이 때 메인 CPU와 입출력 장치는 동시 수행이 가능하다. 각 장치마다 설치된 컨트롤러에는 들어오고 나가는 데이터를 임시로 저장하는 작은 메모리인 로컬버퍼를 가지고 있다.

디스크나 키보드에서 데이터를 읽어오는 경우 로컬버퍼에 데이터가 저장된후 메모리에 전달된다. 이때 로컬버퍼로 읽어 오는 일은 각 장치의 컨트롤러가 담당한다. 로컬버퍼로 읽어오는 작업을 CPU가 체크하는것이 아니라 장치에 있는 컨트롤러가 인터럽트를 발생시켜 CPU에 보고하는 방식이다. 자세히는 CPU는 명령하나를 수행할 때마다 인터럽트가 발생하는지 확인을 하고 인터럽트 처리 루틴을 수행한다.

 

인터럽트의 일반적 기능

운영체제 커널에는 인터럽트가 들어왔을때 해야할 프로그래밍 코드가 보관되어 있다. 이러한 커널안에 있는 코드를 인터럽트 처리 루틴이라고 한다. 예를 들어 디스크 컨트롤러가 인터럽트를 발생시키면 CPU는 커널에 정의된 코드에 의해, 디스크의 로컬버퍼에 있는 내용을 사용자 프로그램의 메모리로 전달하고, 해당 프로그램이 CPU를 할당받을 경우 다음 명령을 수행할 수 있음을 표시해준다.

인터럽트는 하드웨어 인터럽트소프트웨어 인터럽트가 있다. CPU의 서비스가 필요한 경우, CPU 옆에 있는 인터럽트 라인에 신호를 보내서 인터럽트가 발생했음을 알려주는 방식은 동일하지만, 하드웨어 인터럽트는 컨트롤로등 하드웨어 장치가 CPU의 인터럽트 라인을 세팅하고, 소프트웨어 인터럽트는 소프트웨어가 인터럽트를 처리한다. 추가적으로 인터럽트 처리루틴이 끝난 후 돌아갈 위치를 운영체제는 저장해둔다.

 

소프트웨어 인터럽트

통상적으로 인터럽트는 하드웨어 인터럽트를 의미하고 소프트웨어 인터럽트는 트랩(Trap)이라고 한다. 소프트웨어 인터럽트는 예외상황(Exception)시스템 콜(System Call)이 있다. 예외상황은 비정상적인 작업을 시도하거나 권한이 없는 작업을 시도할때 발생하는 인터럽트이고, 시스템 콜은 운영체제 내부에 정의된 코드를 수행하는 서비스를 요청하는 방법이다. 예외상황과 시스템 콜 모두 사용자 프로세스로부터 CPU의 제어권이 운영체제에 이양되어 처리되는데, 이 때 프로그램 코드가 직접 인터럽트 라인을 세팅하는 명령을 실행하여 인터럽트를 발생시킨 후 제어권이 넘어가는 방식이다.

 

인터럽트 핸들링

인터럽트 핸들링이란 인터럽트가 발생한 경우에 처리해야 할 일의 절차이다. 인터럽트가 발생하게 되면 CPU 내부에 있는 임시 기억장치인 레지스터의 값이 다 지워지기때문에 이것을 저장해두어야 한다. 

운영체제는 현재 시스템에서 실행되고 있는 프로그램들을 관리하기 위해 프로세스 제어블록(PCB, Process Control Block)이라는 자료구조를 가진다. 각 프로그램마다 PCB를 가지며 어느 부분이 실행되고 있었는지와 코드의 메모리 주소와 레지스터값, 하드웨어 상태등을 저장한다. 이 PCB를 참고하여 인터럽트 처리루틴후 CPU를 복원한다.

오늘날의 운영체제는 인터럽트가 발생했을 때만 실행된다. 즉 CPU는 항상 사용자 프로그램에 의해 사용되고 있고, 운영체제는 인터럽트가 발생했을때만 잠깐 CPU의 제어권을 가지게 된다. 결론적으로 인터럽트가 발생할 때에만 운영체제 코드 부분으로 CPU가 이양되어 인터럽트 처리를 수행하게 된다.

 

입출력 구조

입출력(I/O)란 컴퓨터 시스템이 컴퓨터 외부의 입출력 장치들과 데이터를 주고 받는 것으로써 동기식 입출력과 비동기식 입출력이 있다.

동기식 입출력과 비동기식 입출력

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

동기식 입출력은 어떤 프로그램이 입출력 요청을 했을 때 입출력 작업이 완료된 후에야 그 프로그램이 후속 작업을 수행할 수 있는 방식이다. 입출력이 완료될 때 까지 대기했다가 사용자 프로그램에게 CPU의 제어권을 넘기는 방식이기 때문에 CPU가 인터럽트를 기다리며 자원을 낭비하게 된다. 따라서 낭비하지 않기 위해 프로그램이 입출력이 수행중인 경우 CPU를 다른 프로그램에게 이양해 CPU가 쉬지 않도록 관리한다. 이때 입출력이 수행중인 프로그램을 CPU가 할당 받을 수 없는 봉쇄 상태(Blocked State)라고 한다. 

다만 다른 프로그램에게 CPU를 이양하기에 동기화 문제가 발생할 수 있는데 이때 동기화를 위해 장치별 큐(Queue)를 두어 요청한 순서대로 처리할 수 있도록 한다. 장치마다 큐헤더가 큐를 관리하게 된다. 입출력이 완료 될 때까지 CPU가 입출력과 관련 없는 프로그램을 수행하도록 하고 인터럽트로 입출력 연산완료를 전달하게 된다.

디바이스 큐와 각 큐에 대기중인 프로세스의 모습

 

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

비동기식 입출력은 입출력 연산을 요청한 후에 연산이 끝나기를 기다리는 것이 아니라 CPU의 제어권을 입출력 연산을 호출한 그 프로그램에게 곧바로 다시 부여하는 방식이다. 즉, CPU의 제어권이 입출력을 요청한 프로세스에게 곧바로 다시 주어지며, 입출력 연산이 완료되는 것과 무관하게 처리 가능한 작업(데이터를 필요로 하지 않는 작업)부터 처리를 하게 된다. 다만, 비동기식 입출력에서도 입출력 연산이 완료되면 동기식과 마찬가지로 인터럽트를 통해 CPU에게 알려주게 된다. 이시점부터 데이터를 필요로 하는 명령어들을 수행할 수 있다. 

 

DMA (Direct Memory Access)

각종 컨트롤러와 인터럽트 라인

원칙적으로 메모리는 CPU에 의해서만 접근이 가능하고, CPU이외의 장치가 CPU에게 접근 하기 위해서 인터럽트를 통해 CPU가 대행하는 식으로 접근하였다. 이렇게 되면 CPU 사용의 효율성이 떨어지게 된다. 따라서 CPU이외에 메모리 접근 이 가능한 DMA를 사용하게 된다. 

DMA는 컨틀롤러로써 CPU가 입출력 장치들의 메모리 접근 요청에 의해 인터럽트 당하는 것을 막아주는 역할을 한다. DMA를 사용하게 되면 로컬 버퍼에서 메모리로 읽어오는 작업을 CPU가 담당하는 것이아니라 DMA가 대행함으로써 CPU는 원래하던 작업을 멈추고 인터럽트를 대응할 필요가 없게 된다. DMA는 블록 단위로 메모리로 읽어온 후 CPU에게 인터럽트를 발생시켜 해당 작업의 완료를 알려준다.

 

저장장치의 구조

컴퓨터 시스템을 구성하는 저장장치는 주기억장치보조기억장치로 나눌 수 있다. 주기억장치는 메모리라고 하며 전원이 나가면 모두 사라져버리는 휘발성(Volatile)을 가지고 있다. RAM이 그 예시이다. 보조기억장치는 전원이 나가도 사라지지 않는 비휘발성(Nonvolatile)이며 마그네틱 디스크를 주로 사용한다. 플래시 메모리, CD, 마그네틱 테이프등이 그 예시이다.

보조기억장치는 크게 두가지 용도이다. 첫번째로 파일 시스템용이다. 전원이 나가도 유지해야할 정보를 위한 용도이다. 두번째 용도는 메모리의 연장 공간인 스왑 용도이다. 메모리는 크기가 작고 비싸기때문에 다수의 프로그램이 올라갔을때 전체가 올라가지 않고 프로그램에 수행에 당장 필요한 부분만 메모리에 올려놓고 나머지 부분은 디스크의 스왑 영역에 내려놓게 된다. 대표적으로 하드디스키가 있다. 이 스왑용도로 사용하게 되면 메모리의 연장 공간이기에 휘발성영역이다. 

 

저장장치의 계층 구조

컴퓨터 저장장치는 빠른 저장장치부터 느린 저장장치까지 단계적인 계층 구조이다. 빠른 저장장치는 단위공간다 가격이 높기에 적은 용량이며, 느린 저장 장치는 가격이 저렴하여 대용량인 반면 접근 속도가 느리다. 계층을 본다면 빠른 순서대로 레지스터, 캐시 메모리, 메인 메모리로 구성되면 이들은 휘발성이다. 그 뒤로는 마그네틱 디스크, 광디스크, 마그네틱 테이프로 구성되면 이들은 비휘발성이다.

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

 

하드웨어의 보안

현대의 운영체제는 다중 프로그래밍 환경에서 동작한다. 그렇기에 프로그램간의 충돌을 막기 위해 하드웨어 대한 각종 보안 기법이 필요하다. 이런 하드웨어적인 보안을 유지하기 위해 운영체제는 커널모드(Kernel Mode, System Mode)사용자 모드(User Mode)를 지원한다.

커널모드는 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드로써 모든 종류의 명령을 실행할 수 있다. 중요한 정보에 접근하는 연산은 커널모드에서만 실행할 수 있도록 통제하여 보안성을 확보한다. 다만 사용자 프로그램이 프로그램 내부에서 CPU의 제어권을 가지고 커널모드에서만 실행할 수 있는 연산을 실행하는 경우를 대비하여 하드웨어적 지원인 CPU 내부에서 모드비트(Mode Bit)를 두어 프로그램을 감시한다. 모드비트 0은 커널모드, 모드비트 1은 사용자 모드이다.

커널모드와 사용자모드

만일 사용자 프로그램이 CPU의 제어권을 가진 상태에서 하드웨어 접근 등 보안이 필요한 중요한 명령을 수행해야할 경우 시스템 콜을 통해 운영체제가 대신해줄것을 요청하게 된다.

 

메모리 보안

여러 프로그램이 동시에 메모리에 올라가기때문에 서로의 메모리에 침범하지 못하게 해야한다. 예를 들면 커널이 위치한 영역을 참조할 수도 있기에 인터럽트 백터와 인터럽트 처리루틴이 있는 곳은 보안이 필요하다. 이것을 위해 2개의 레지스터, 기준 레지스터(Base Register)한계 레지스터(Limit Register)를 사용해서 프로그램이 접근하려는 메모리 부분이 합법적인지 체크하고 메모리를 보호할 수 있다.

기준 레지스터와 한계 레지스터에 의한 메모리 보호

기준 레지스터는 어떤 프로그램이 수행되는 동안 그 프로그램이 합법적으로 접근할 수 있는 가장 작은 주소를 보관하고, 한계 레지스터는 기준 레지스터값부터 접근할 수 있는 메모리의 범위를 나타내준다. 즉, 사용자 프로그램은 기준 레지스터에 있는 주소로부터 기준 레지스터 + 한계 레지스터 값까지만 접근할 수 있게 된다. 만일 벗어나게 되면 예외상황이라는 소프트웨어 인터럽트를 발생시키게 된다. 소프트웨어 인터럽트가 발생하게 되면 프로그램으로 부터 CPU의 제어권을 운영체제가 가져가게되고 프로그램을 강제 종료시킨다.

다만 페이징 기법에서는 2개의 레지스터뿐만 아니라 다른 하드웨어의 지원도 필요하게 된다.

 

CPU 보호

CPU는 하나기때문에 이를 독점하는 것을 방지할 필요가 있다. CPU가 하나의 프로그램에 의해 독점되는 것을 막기 위해 운영체제는 타이머(Timer)라는 하드웨어를 사용하여 일정시간이 지나면 인터럽트를 발생시켜 운영체제가 CPU의 제어권을 획득할 수 있도록 하게 한다. 한편 타이머는 시분할 시스템에서 현재 시간을 계산하는데도 사용한다.

 

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

입출력 명령은 운영체제 코드에 구현되어 있으며, 사용자 프로그램은 직접 입출력을 수행하는 대신 시스템 콜이라는 서비스 대행 요청을 하여 입출력을 수행한다. 시스템 콜은 일종의 소프트웨어 인터럽트로써 사용자 프로그램이 시스템 콜을 할 경우 트랩이 발생해 CPU의 제어권이 운영체제로 넘어간다. 그 후 운영체제는 해당 시스템 콜을 처리하기 위해 루틴을 수행한다.

 

 

출처
https://one10004.tistory.com/125
https://velog.io/@jehjong/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%99%80-%EC%A0%95%EB%B3%B4%EA%B8%B0%EC%88%A0%EC%9D%98-%EC%9B%90%EB%A6%AC-3%EC%9E%A5.-%EC%BB%B4%ED%93%A8%ED%84%B0-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC
운영체제와 정보기술의 원리 - 이화여자대학교출판문화원 출판, 반효경 저
 

운영체제와 정보기술의 원리 - 교보문고

이 책은 총 10장으로 구성되어 있다.1장 ‘컴퓨터 및 정보기술의 역사’에서는 운영체제를 설명하기에 앞서 정보기술의 원리와 철학에 대해 정의하고, 컴퓨터와 정보기술 분야의 역사를 간략히

www.kyobobook.co.kr

반응형