면접용 CS 이론 정리 - 컴퓨터 구조

Lilac-_-P·2023년 12월 26일
0

면접을 준비하면서 컴퓨터공학관련 이론 내용을 정리하고자 한다.

이론의 모든 내용을 다루지는 않을 것이고, 중요도가 높은 개념과 쉽게 까먹을 수 있는 지엽적인 내용을 위주로 다룰 것이고, 깊은 이론을 요하는 내용의 경우 개선점으로 적어놓고 추후에 내용을 추가할 것이다.


컴퓨터는 크게 하드웨어와 소프트웨어로 나눠지는데, 하드웨어는 말 그대로 컴퓨터를 구성하는 물리적 부품을 이야기하고, 소프트웨어는 하드웨어의 동작을 지시하고 제어하는 명령어의 집합이다.

소프트웨어는 응용 소프트웨어와 시스템 소프트웨어로 분류할 수 있다.

시스템 소프트 웨어는 응용 소프트웨어를 실행하기 위한 플랫폼을 제공하고, 컴퓨터 하드웨어를 동작/접근할 수 있도록 설계된 컴퓨터 소프트웨어이다.

응용 소프트웨어는 넓은 의미로는 운영체제에서 실행되는 모든 소프트웨어, 좁은 의미로는 운영체제 위에서 사용자가 직접 사용하게 되는 소프트웨어를 뜻한다. 일반적으로 사람들이 사용하는 모든 프로그램은 모두 응용 소프트웨어이다.

CPU

CPU는 크게 3가지로 구성되어있는 컴퓨터 장치로, 인터럽트에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행하는 역할을 한다.

CPU를 이루는 3가지 구성요소는 다음과 같다.

  • ALU : 연산장치
  • CU : 제어장치
  • Register : 임시기억장치

프로그래머가 개발한 프로그램은 결국 CPU가 계산해야하는 명령어의 집합이다.
CPU는 프로그램을 실행하기 위해 주기억장치에서 명령어를 순차적으로 인출하여 해독하고 실행하는 과정을 반복한다. CPU가 주기억장치에서 한번에 하나의 명령어를 인출하여 실행하는데 필요한 일련의 활동을 'Instruction Cycle'이라고 한다.

! 현대의 CPU는 과거에 노스브릿지와 사우스브릿지가 담당하던 메모리 컨트롤러, 그래픽 처리 유닛, I/O 컨트롤러 등의 기능을 하는 하드웨어적 요소를 내장하고 있다.

CPU의 Instruction Cycle

Fetch - Decode - Execute - Writeback

Fetch

1. MAR ← PC // PC에 저장된 주소를 MAR로 전달
2. MBR ← M[MAR] // 주기억장치의 해당 주소에서 명령어를 인출하여 MBR에 저장
3. PC ← PC+1 // 다음 명령어를 인출하기 위해 PC값 증가
4. IR ← MBR // MBR에 저장된 내용을 IR에 전달

! 특수한 목적을 지닌 CPU 내부의 레지스터

  • MAR(메모리 주소 레지스터) : 읽기와 쓰기 연산을 수행할 주기억장치 주소 저장
  • PC(프로그램 카운터) : 다음에 수행할 명령어 주소 저장
  • IR(명령어 레지스터) : 현재 실행 중인 명령어 저장
  • MBR(메모리 버퍼 레지스터) : 주기억장치에서 읽어온 데이터 or 저장할 데이터 임시 저장
  • AC(누산기) : 연산 결과 임시 저장

Decode

  • CU이 IR에 저장된 명령어를 해석한다.

    ! CPU 제조사에 따라 opcode가 다를 수 있음

Execute

  • 해석된 명령어에 따라 데이터에 대한 명령을 수행한다.

Writeback

  • 처리가 완료된 캐시에 있는 데이터를 메모리에 기록한다.
  • 결과값을 기다리는 명령어가 있다면 CU이 결과값이 생겼다는 시그널을 전송한다.

인터럽트

인터럽트는 어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키는 것을 말한다. 다양한 종류의 인터럽트가 존재하는데, 인터럽트가 발생되면 CPU에서는 즉각적으로 인터럽트 처리를 위해서 커널 코드를 커널 모드에서 실행한다. 즉, 인터럽트 발생 시 해당 인터럽트를 처리하기 위해 사용자 모드의 프로그램 코드가 사용하던 CPU를 정지시키고 커널 모드로 전환하게 되고, 커널 모드에서 인터럽트 핸들러 함수가 모여있는 인터럽트 벡터로 가서 인터럽트 핸들러 함수가 실행된다. 인터럽트 간에는 우선순위가 있고, 우선순위에 따라 실행된다.

인터럽트의 종류

하드웨어 인터럽트

하드웨어 인터럽트는 키보드를 연결한다거나 마우스를 연결하는 일 등의 IO 디바이스에서 발생하는 인터럽트를 말한다.

운영체제가 하드웨어 인터럽트가 발생하였을 때 이를 처리하는 과정은 다음과 같다.

  1. 하드웨어 인터럽트 발생: 외부의 하드웨어 디바이스, 예를 들어 키보드나 마우스와 같은 IO 디바이스에서 이벤트가 발생하면 하드웨어 인터럽트가 발생한다. 이는 하드웨어에서 CPU로 특정 신호를 보내어 CPU에게 어떤 이벤트가 발생했음을 알리는 것이다.

  2. 인터럽트 라인 활성화: 하드웨어 인터럽트가 발생하면 해당 인터럽트에 대응하는 인터럽트 라인이 활성화된다. 이는 CPU에게 어떤 종류의 인터럽트가 발생했는지를 알려준다.

  3. 인터럽트 서비스 루틴(ISR) 실행: 운영체제는 인터럽트 서비스 루틴(ISR)이라 불리는 특수한 코드를 실행하여 해당 하드웨어 인터럽트에 대한 처리를 수행한다. ISR은 인터럽트에 대응하는 작업을 수행하고, 이를 통해 해당 IO 디바이스의 동작을 관리한다.

  4. 시스템 콜 호출: 이때, 운영체제는 시스템 콜을 호출하여 하드웨어 인터럽트에 대한 처리를 요청한다. 시스템 콜은 커널 내부의 특별한 함수를 호출하는 것이며, 이를 통해 운영체제는 사용자 프로그램이나 애플리케이션과 상호작용할 수 있다.

  5. 디바이스의 로컬 버퍼 접근: 운영체제는 시스템 콜을 통해 디바이스의 로컬 버퍼에 접근하여 이벤트나 데이터를 확인하거나 디바이스와의 통신을 관리한다. 로컬 버퍼는 디바이스에 의해 발생한 이벤트나 데이터를 일시적으로 저장하는 공간이다.

  6. 인터럽트 처리 완료: 운영체제가 해당 하드웨어 인터럽트에 대한 처리를 마치면, 다시 인터럽트 라인이 비활성화되고, 원래 수행되던 작업이나 프로그램으로 돌아간다.

소프트웨어 인터럽트

소프트웨어 인터럽트는 트랩(trap)이라고도 하는데, 프로세스 오류 등으로 프로세스가 시스템콜을 호출할 때 발생한다.

profile
열심히 하자

0개의 댓글