[기술면접] 운영체제 : 컴퓨터 시스템 구조와 인터럽트

Alice·2023년 9월 16일
0



장치를 통한 입력작업

각 하드웨어에는 컨트롤러가 존재한다. 컨트롤러는 각 장치를 제어하는 작은 CPU의 역할을 한다. 컨트롤러는 장치에게 명령을 내려 로컬 버퍼에 입력 정보를 담아놓는다. 원칙적으로 메모리에 직접 접근이 가능한 자원은 CPU 밖에 없지만, 그래서 등장한 것이 DMA 컨트롤러다.

DMA 컨트롤러는 byte 단위가 아닌 Block 단위로 로컬 버퍼의 값을 메모리로 읽어들인다. Block 의 용량이 다 찼다면 그제서야 인터럽트를 발생시켜 CPU에게 작업 종료를 알린다. DMA 를 도입함으로써 CPU가 처리해야 하는 인터럽트의 빈도가 줄어들어 CPU 이용률을 개선할 수 있다.



인터럽트 처리

CPU는 명령 하나를 수행할 때마다 인터럽트를 확인한다. CPU는 옆에 인터럽트 라인을 두어 명령 하나를 수행할 때마다 인터럽트 여부를 확인하고, 인터럽트가 존재한다면 인터럽트 벡터를 타고 인터럽트 처리 루틴으로 들어간다. 통상적으로 인터럽트는 하드웨어 인터럽트를 의미하고, 소프트웨어 인터럽트는 트랩이라고도 불린다.

트탭에는 시스템 콜과 Exception 종류가 있다. 시스템 콜이란 사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶은 경우 운영체제에 요청하는 방식의 인터럽트다. 예를들어, 프로세스 A가 운영체제의 코드 영역에 선언된 함수를 호출하기 위해서 운영체제의 데이터 영역에 존재하는 프로세스 A의 PCB에 현재까지의 상태를 저장하고 시스템 콜을 호출하여 커널 모드로 진입할 수 있는것이다.

유저모드와 커널모드를 확실하게 분간하기 위해 하드웨어의 지원을받은 모드 비트를 사용한다. 모드 비트가 0인 경우 커널모드 상태임을 의미한다. 모드 비트가 1인 경우 유저모드 상태임을 의미한다.



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

CPU가 특정 프로세스를 실행하던 도중 I/O 작업이 들어오면 하드웨어 인터럽트가 발생한다. 이때 동기식 입출력은 인터럽트 루틴이 실행되는동안 CPU를 다른 프로세스에게 이전하여 CPU 이용률을 높일 수 있다. 기존의 프로세스는 PCB에 실행중이던 코드의 메모리주소, 레지스터 값 등을 저장하고 Block 상태에 들어간다. 다만 이 과정에서 일어날 수 있는 동기화 문제를 해결하기 위해 장치마다 디바이스 큐를 두어 순서대로 명령을 실행할 수 있도록 한다.

비동기식 입출력의 경우 인터럽트 루틴이 실행되는 동안에도 해당 프로세스의 작업을 계속한다. 당연하게도 입출력 작업의 결과물과는 관련없는 작업을 미리 수행하고, 입출력 작업이 끝난 뒤에야 해당 작업을 수행하는 방식의 작업을 수행해야한다.



프로세스의 주소공간


CODE

프로그램의 코드가 저장되는 곳이다. 텍스트 영역이라고도 불린다. Read-Only 지정공간이다.

DATA

프로그램의 전역변수와 정적변수 등의 데이터가 저장되는 영역이다. 데이터가 변경될 수 있기 때문에 Read-Write 로 설정되어있다.

STACK

프로그램이 자동으로 사용하는 임시 메모리 영역이다. 함수 호출시 복귀 주소 및 지역변수와 매개변수가 저장된다. 함수가 종료되면 스택이 사라진다. 이때 스택 영역에 저장되는 함수의 정보를 스택 프레임 이라고 명칭한다. 재귀 함수가 너무 깊게 호출되거나, 지역변수가 너무 많아서 stack 영역을 초과하면 stack overflow 가 발생한다.

HEAP

사용자가 직접 메모리를 할당하는 공간이다. 프로그래머는 malloc , calloc 등의 함수를 통해 동적으로 힙 메모리를 할당한다. 데이터의 크기가 확실하지 않은 경우 유동적으로 메모리를 할당할 수 있는것이다. 단, 사용 후 반드시 해제를 해야한다. Memmory Leak 이 발생할 수 있기 때문이다.

profile
SSAFY 11th

0개의 댓글