컴퓨터가 이해하는 정보에는 데이터와 명령어가 존재한다. 컴퓨터 과학에서 데이터와 명령어가 어떻게 정의되는지, 주요 특징 및 기능은 무엇인지, 컴퓨터가 어떤식으로 정보를 해석 및 처리하는지 알아보자.
1. 데이터
(1) 데이터의 정의
프로그램에 부속된 파일, 사용자가 해석 불가능한 이진 파일형태
컴퓨터에서의 데이터는 0 과 1로 이루어져있다. 데이터는 컴퓨터에 의해 해석 및 처리되어 전기 신호의 형태로 전송되거나, 여러 저장매체에 저장된다.
데이터의 최소 구분 단위는 bit 이지만, 입출력을 위한 최소 단위는 8개의 bit 가 모인 byte 다. 이러한 데이터들이 모여서 컴퓨터가 해석하고 실행할 수 있는 명령의 집합체인 프로그램이 만들어진다.
(2) 인코딩과 디코딩
인코딩(Encoding) : 데이터를 특정한 형식으로 변환하는 과정
인코딩은 주로 데이터를 효율적으로 저장, 전송, 처리하기 위해 사용한다. 앞서 언급했듯이, CS에서 의미하는 데이터는 컴퓨터만 해석할 수 있다. 즉, 컴퓨터가 데이터를 처리하기 위해서는 인간이 입력하는 데이터를 컴퓨터가 이해할 수 있도록 변환해주어야 한다.
예를 들어, 컴퓨터에 문자열 데이터를 전송하기 위해서는 UTF-8, ASCII 등을 사용해 이진 데이터로 변환해야 한다. 이러한 과정을 인코딩이라고 하며, 문자 외에 여러 형태의 데이터를 인코딩할 수 있다.
Base64는데이터를 6bit 씩 끊어서 문자로 변환하는 방식이다. Base64 인코딩을 적용하면 바이너리 데이터를 텍스트의 형태로 안전하게 변환할 수 있다.
※ ASCII Code 는 아래 사이트에서 확인할 수 있다.
디코딩(Decoding) : 인코딩된 데이터를 원래의 형식으로 복구하는 과정
디코딩은 사람이 이해할 수 있는 형태로 복원하거나, 원래의 형태로 되돌리는 과정을 말한다. 위에서 언급한 문자열 인코딩을 거친 데이터를 다시 사람이 해석할 수 있는 문자열로 바꾸는 것을 디코딩이라고 한다.
데이터는 인코딩되어 컴퓨터에 저장 및 전송되고, 이는 다시 디코딩되어 원본으로 돌아오는 과정을 거친다. 아래 예시를 통해 이해해보자.
예) 문자열 "Hello, World!" 를 [ Base64 인코딩 - 서버에 전송 - 디코딩 - 원본 복원 ] 과정으로 처리
원본 데이터 | 사용자가 "Hello, World!" 라는 문자열을 입력한다. |
인코딩 과정 | Base64 인코딩 / Hello, World! => SGVsbG8sIFdvcmxkIQ== |
데이터 전송 | 인코딩된 문자열을 서버로 전송 |
디코딩 과정 | 서버가 수신한 데이터를 Base64 디코딩 => Hello, World! |
결과 | 디코딩된 데이터를 DB에 저장하거나, 클라이언트에게 응답으로 전송 |
이렇게 데이터는 인코딩부터 디코딩까지 일련의 과정을 거쳐 전송 및 처리된다.
2. 명령어
(1) 명령어의 정의
컴퓨터가 수행해야 할 작업을 지정하는 단위
명령어는 CPU가 해석하고 실행할 수 있는 기계어 또는 어셈블리 코드의 형태로 존재한다. 이는 특정 연산을 수행하는 역할을 한다.
(2) 명령어의 특징
CPU가 실행하는 기본 단위
컴퓨터 프로그램은 여러 개의 명령어로 구성된다.
연산과 오퍼랜드를 포함
연산은 컴퓨터가 수행할 작업을 말하고, 오퍼랜드는 연산할 대상을 의미한다.
(3) 명령어의 구조
[연산 코드] [Operand1] [Operand2] ...
일반적으로 명령어는 위와 같은 형식으로 구성된다. x86 어셈블리 언어를 통해 예시를 들면 아래와 같다.
MOV AX, 5 ; AX레지스터에 5라는 값을 저장
ADD AX, BX ; AX = AX + BX (합연산)
(4) 명령어의 종류
- 데이터 이동 명령어
데이터를 레지스터, 메모리 간에 이동시키는 명령어. MOV, LOAD, STORE 등
- 산술/논리 연산 명령어
수학적 연산과 논리 연산을 수행하는 명령어. ADD, SUB, MUL, AND, OR 등
- 제어 흐름 명령어
프로그램 실행의 순서를 변경하는 명령어. JMP, CALL, RET, CMP, JE 등
- 입출력 명령어
키보드나 네트워크와 같은 외부장치와 데이터를 교환하는 명령어. IN, OUT 등
- 시스템 명령어
CPU 상태를 변경하거나, 운영체제와 상호작용하는 명령어. HLT, INT 등
(5) 명령어 사이클
CPU 내부에서 명령어를 처리하는 과정
Fetch (가져오기) | 명령어를 메모리에서 가져온다 |
Decode (해석하기) | 명령어를 분석하고 필요한 연산과 오퍼랜드를 확인한다. |
Execute (실행하기) | 각종 연산을 수행한다. |
Write Back (결과 저장) | 결과를 레지스터나 메모리에 저장한다. |
CPU는 위 사이클을 반복하며 프로그램을 실행한다. 하지만, 중간에 문제가 생기면 어떻게 될까?
Interrput
CPU가 실행중인 작업을 중단하고, 입출력 및 오류 등 더 중요한 작업을 처리한 후 원래 작업으로 복귀하는 메커니즘을 말한다. Interrput 는 운영체제와 CPU가 효율적으로 자원을 관리하는 데 필수적인 개념이다.
명령어 사이클의 Execute 단계 이후 Interrput Check 가 이루어지는데, 이 때 인터럽트 발생 여부를 확인한다. 만약 인터럽트가 발생했다면 작업을 중단하고 처리한다.
그렇다면 Interrput 발생 시 CPU가 이를 어떻게 처리하는지 알아보자.
작업 중단 및 상태 저장 | 실행 중이던 명령어의 레지스터 상태를 저장한다. 인터럽트 발생 시점을 추적하기 위해 프로그램 카운터(PC)를 저장한다. |
인터럽트 서비스 루틴 | 운영체제가 미리 정한 인터럽트 핸들러를 실행한다. 예) 키보드 입력을 처리하는 인터럽트 발생 시 해당 루틴을 실행 |
인터럽트 처리 후 작업 복귀 | 저장된 레지스터 값을 복원한다. 원래 실행 중이던 명령어부터 다시 실행한다. |
위 과정을 통해 인터럽트가 처리된다.
이제 발생하는 인터럽트의 종류를 확인해보자.
하드웨어 인터럽트 | 키보드, 마우스 등 외부 장치에서 발생 예1) 키보드를 누르면 CPU가 입력을 처리 (입출력) 예2) 하드디스크에서 데이터를 읽으면 인터럽트 발생 |
소프트웨어 인터럽트 | 프로그램 내에서 명령어 실행 도중 발생 예1) INT 0x80 (리눅스 시스템 호출) 예2) divide by zero (0으로 나누기 오류) |
타이머 인터럽트 | 일정 시간이 지나면 발생하는 인터럽트 예) CPU스케줄링 (운영체제가 프로세스를 전환할 때 사용) |
인터럽트 처리는 다음과 같은 장점을 가진다.
- CPU 효율성 증가 : 특정 이벤트를 기다리지 않고 다른 작업을 수행 가능
- 실시간 반응 가능 : 즉시 중요한 작업을 처리 가능 (사용자의 입력, 네트워크 데이터 수신)
- 운영체제에서 필수적 : 멀티태스킹, 프로세스 관리, 장치 드라이버 구현 등에 필수
(6) 프로그래밍 언어와의 관계
고수준 언어 (Java, python 등) : 명령어를 직접 사용하지 않고 컴파일러가 변환하는 언어
저수준 언어 (어셈블리, 기계어) : CPU에서 직접 실행 가능한 명령어를 사용
고수준 언어에 해당하는 프로그래밍 언어에서 작성한 코드는 컴파일러나 인터프리터를 거쳐 컴퓨터가 해석 가능한 기계 명령어로 변환되어 실행된다.
'CS' 카테고리의 다른 글
3. 자료구조 (1) - 자료구조의 종류와 특징 (0) | 2025.03.31 |
---|---|
2.운영체제 (2) - 운영체제의 관리 작업 (0) | 2025.03.07 |
2. 운영체제 (1) - 운영체제의 구성과 역할 (0) | 2025.03.04 |
1. 컴퓨터 구조 (2) - CPU / 메모리 / 보조기억장치 / 입출력 장치 (0) | 2025.02.27 |
CS 학습 로드맵 (0) | 2025.02.25 |