#2 컴퓨터 시스템의 동작 원리 - 운영체제와 정보기술의 원리
컴퓨터 시스템의 구조
내부장치 : CPU, 메모리
외부장치 : 디스크, 키보드, 마우스 ....
컴퓨터 내의 각 하드웨어 장치에는 컨트롤러(controller : 제어기)라는 일종의 작은 CPU에 의해 관리된다.
CPU와 I/O 연산
입출력 장치들의 I/O연산은 각 장치에 부착된 컨트롤러에서 담당하고, 컴퓨터 내에서 수행되는 연산은 CPU가 담당한다.
이때 입출력 장치와 CPU사이에는 별도의 작업이 가능하다. 또한, 각 장치에는 이를 제어하기 위해 설치된 장치 컨트롤러에 장치로부터 들어오고 나가는 데이터를 임시 저장하기 위한 메모리인 로컬 버퍼(local buffer)를 가지고 있다.
1. 프로세스에서 외부 입출력에 대한 요청 발생
2. 컨트롤러에 의해서 외부 장치로의 입출력을 제어
3. 외부장치와 입출력 발생
4. 로컬 버퍼에 데이터 임시 저장
5. 컨트롤러에 의해 인터럽트 발생
6. CPU는 컨트롤러로 부터 발생한 인터럽트에 대해 인터럽트 라인을 통해 확인
7. 로컬 버퍼의 데이터는 메모리에 상주한 프로세스의 영역에 이동 후 저장
* 인터럽트 처리 루틴 : 운영 체제 커널 내에 존재하는 인터럽트 처리 루틴은 다양한 인터럽트 발생 상황에 대에 적절한 대응을 위한 행위들을 담고 있다. 인터럽트 처리 루틴은 인터럽트 벡터(interrupt vector)와 인터럽트 서비스 루틴(interrupt service routine)을 담고 있다.
* 인터럽트 벡터 : 인터럽트 종류마다 번호를 정해서, 번호에 따라 처리해야할 코드가 위치한 부분을 포인터로 가리키고 있는 자료구조
* 인터럽트 서비스 루틴 : 인터럽트 벡터를 통해 확인한 실제로 작동해야하는 코드 내용
위의 6번 컨트롤러에 의한 인터럽트 발생시 CPU는 인터럽트 라인의 확인을 통해 인터럽트를 확인하고 OS 영역내의 인터럽트 처리 루틴을 통해 그게 알맞은 대응을 하게 된다.
인터럽트 핸들링(Interrupt handling)
인터럽트 핸들링은 인터럽트가 발생한 경우에 처리해야 할 일의 절차를 의미한다.
프로그램 A 수행 -> 인터럽트 발생 -> A의 상태 저장 -> 인터럽트 처리
운영 체제 커널 영역에는 현재 시스템 내에서 수행되는 프로그램들을 관리하기 위한 자료 구조인 프로세스 제어 블록(PCB : Process Controll Block)을 가지고 있다. PCB에는 현재 수행중이던 메모리 주소와 값, 그리고 하드웨어 상태 등이 저장되며, 인터럽트 수행이 끝나면 저장된 값을 다시 CPU 상에 복원해 진행 중이던 명령을 계속 수행한다.
소프트웨어 인터럽트
일반적으로 트랩(Trap)이라는 용어로 사용된다. 프로그램 수행 중 접근해서는 안되는 메모리 영역을 침범하려는 경우, 0으로 나누는 연산 등을 시도한 경우에 발생하는 인터럽트이다.
1. 예외 상황(Exception)
2. 시스템 콜(System Call)
입출력 구조
입출력(I/O)란 컴퓨터 시스템이 컴퓨터 외부의 주변 장치들과 데이터를 주고받는 것을 말한다.
1. 동기식 입출력(Synchrous I/O) : 입출력 작업이 진행되는 동안 CPU 제어권이 다른 프로세스에게 넘어갈 수 있다.
2. 비동기식 입출력(Asynchrous I/O) : 입출력 작업이 진행되는 사이에 CPU 제어권을 기존의 프로세스가 가질 수 있다.
동기식 입출력이 발생한 경우에 다수의 프로세스가 하나의 자원을 이용하는 경우 데이터 동기화에 대한 문제가 발생할 수 있다. 이러한 문제를 방지하기 위해 장치별로 큐를 이용해 요청한 순서대로 처리할 수 있도록 한다.
DMA(Direct Memory Access)
원칙적으로 메모리는 CPU에 의해서만 접근 가능한 장치이다. 주변 장치가 메모리에 접근하기 위해서는 CPU에 인터럽트를 발생시켜 CPU가 일을 대행해야 하는 방식으로 진행된다. 인터럽트 발생시 로컬 버퍼에 저장되어 있던 데이터는 CPU에 의해 메모리로 옮겨지게 되는데 이를 CPU에서 전부 담당하게 되면 CPU의 효율이 떨어지기 때문에 이를 담당할 장치를 하나 더 두게 되는데 이를 DMA(Direct Memory Access)라고 한다. DMA는 블록 단위로 정보를 메모리로 읽어온 후, CPU에 인터럽트를 발생시켜 작업의 완료를 알리게 된다.
저장 장치의 구조
- 저장 장치는 주기억 장치와 보조기억 장치로 구분된다
- 기억 장치는 휘발성인 메모리와, 비휘발성인 디스크로 크게 구분된다.
보조기억 장치의 용도
- 파일 시스템을 저장하는 용도
- 메모리의 공간을 여유롭게 하기 위한 스왑 영역(Swap Area)
하드웨어의 보안
다중 프로그래밍 환경에서 각각의 프로그램은 서로의 프로그램에 대해 침범을 일으키면 안되기 때문에 하드웨어에 대한 각종 보안 기법이 필요하다. 하드웨어에서는 보안을 유지하기 위해 두 가지의 오퍼레이션(Operation) 모드를 지원한다.
1. 커널 모드 (Kernel mode) : 운영체제가 CPU의 제어권을 가지고 운영 체제 코드를 실행하는 모드, 시스템에 중요한 영향을 미치는 연산은 커널모드에서만 이용 가능하다.
2. 사용자 모드 (User mode) : 사용자 모드에서는 일반 사용자 프로그램만 수행이 가능하며 제한적인 명령만 수행 가능 하다.
CPU 내부에는 모드비트(Mode bit)를 두어 사용자 프로그램이 수행 되는 동안 실행될 수 있는 권한을 제한한다.
사용자 모드의 상태에서 커널 모드의 권한을 이용하고 싶은 경우 시스템 콜을 통해 운영 체제에 요청을 하고 운영체제가 CPU의 권한 획득을 통해 프로그램으로 부터 요청 받은 명령을 대신 수행해 준다.
메모리 보안
하드웨어와 마찬가지로 메모리에는 여러 프로그램이 동시에 올라가서 작업을 진행하기 떄문에 각각의 영역에 대한 보안이 필요하다.
메모리는 기준 레지스터와 한계 레지스터를 이용해 각 프로그램이 이용가능한 메모리 영역에 대한 제한을 둔다
* 기준 레지스터 : 프로그램이 합법적으로 접근 가능한 메모리 상의 시작 주소이다.
* 한계 레지스터 : 기준 레지스터의 값부터 접근할 수 있는 메모리의 범위를 보관하고 있다.
즉, 프로그램 A가 접근할 수 있는 메모리의 범위는 "기준 레지스터 주소 + 한계 레지스터 값" 이다. 하지만 위의 방법은 메모리의 한 영역에 연속적으로 위치하는 경우에만 가능하다.