RAM과 하드 디스크의 차이

  • RAM은 CPU가 실행할 프로그램을 저장하는 부품이고 휘발성 저장장치이기 때문에 전원이 꺼지면 저장된 내용을 잃음
    하드 디스크는 비휘발성 저장장치이기 때문에 전원이 꺼져도 보관할 대상을 저장하는 부품

병렬성과 동시성의 차이

  • 병렬성은 작업을 실제로 같은 시각에 동시 처리하는 성질, CPU의 여러 코어가 같은 시각에 명령어를 동시에 처리
    동시성은 작업을 동시에 처리하는 것처럼 보이는 성질, CPU가 여러 작업을 빠르게 번갈아 가며 처리

CPU가 자발적으로 발생시키는 인터럽트와 CPU가 받아들이는 인터럽트의 차이

  • CPU가 자발적으로 발생시키는 인터럽트는 동기적인 인터럽트로, CPU가 프로그래밍 오류와 같은 예상치 못한 상황을 마주했을 때 주로 발생
    CPU가 받아들이는 인터럽트는 비동기적인 인터럽트로, 주로 입출력장치로부터 받아들이는 하드웨어 인터럽트

부동 소수점의 오차가 발생하는 이유

  • 부동 소수점은 2진수로 소수를 표현하는 방식으로, 10진수를 2진수로 표현하여 저장되는 비트 수를 넘길 경우 일부 소수점 자리를 생략하기 때문

아래의 코드가 성능 상의 문제가 있는 이유

vector<vector<int>> v(20000, vector<int>(20000));

for (int i = 0; i < 20000; ++i)
{
	for (int j = 0; j < 20000; ++j)
		v[j][i] = 0;
}
  • v[j][i] = 0; 부분이 벡터가 저장된 메모리에 순차적으로 접근하지 않아 공간 지역성을 만족하지 않기 때문에 캐시 미스가 발생하여 메모리에 접근 횟수가 많아져 속도가 느려질 수 있음

캐시 미스가 프로그램 성능에 어떤 영향을 끼치는지

  • 캐시 미스란 캐시에 데이터가 존재하지 않는 상황을 의미
    실제 데이터가 위치하고 있는 먼 곳인 메모리에 접근해야 하므로 속도가 느려짐

장치 드라이버가 필요한 이유

  • 장치 드라이버는 장치 컨트롤러를 작동시키기 위한 정보를 포함한 프로그램
    CPU는 장치 컨트롤러를 작동하여 정보를 주고받기 위해 장치 드라이버를 사용

파이프라이닝이 CPU의 성능을 향상시키는 이유

  • 파이프라이닝은 명령어 병렬 처리 기법 중 하나로, 하나의 명령어를 처리하는 과정을 클럭 단위로 나눈 뒤 각각의 단계에서 동시에 실행 가능한 단계를 겹쳐서 실행해 CPU의 처리 성능을 높임

CPU와 GPU의 차이

  • GPU는 주로 산술 연산과 같이 단순 연산을 병렬적으로 수행하기 위한 장치로, 코어가 수 천개까지 있지만 CPU처럼 복잡한 연산을 지원하지 않음
    CPU는 범용적인 연산을 수행하기 위한 장치

하드웨어적 스레드와 소프트웨어적 스레드의 차이

  • 하드웨어 스레드는 하나의 코어가 동시에 처리하는 명령어의 단위
    소프트웨어 스레드는 하나의 프로그램에서 독립적으로 실행하는 단위

코딩을 하다가 한글이 깨지면 어떻게 하는지

  • 컴퓨터가 문자를 코드로 표현하는 인코딩 방법을 인식하지 못하기 때문에 다양한 인코딩 방법을 시도해봐야 함

base64 인코딩

  • 문자뿐만 아니라 아스키 코드로 표현할 수 없는 이미지 등의 이진 데이터까지 아스키 형태의 문자로 표현하기 위해 사용하는 인코딩 방식
    이메일에서 첨부파일을 전송하거나 웹에서 이미지 및 파일 데이터를 텍스트 형식으로 포함할 때 사용

유니코드

  • 여러 국가의 언어나 이모티콘 등을 표현할 수 있는 통일된 문자 집합
    문자 집합을 어떻게 코드로 표현하냐에 따라 utf-8, utf-16, utf-32 등 다양한 인코딩 방법으로 구분

'CS > 컴퓨터구조' 카테고리의 다른 글

컴퓨터구조 보조기억장치, 입출력장치, GPU  (0) 2024.09.11
컴퓨터구조 메모리  (0) 2024.09.10
컴퓨터구조 CPU  (0) 2024.09.09
컴퓨터구조 컴퓨터가 이해하는 정보  (0) 2024.09.09

보조기억장치

하드디스크 : 자기적인 방식으로 데이터를 읽고 쓰는 저장장치

플래시 메모리 : 전기적인 방식으로 데이터를 읽고 쓰는 반도체 기반의 저장장치, USB, SSD

 

전원이 꺼져도 데이터를 안전하게 보관

CPU가 필요로 하는 정보를 빠른 성능으로 메모리에 전달

RAID(Redundant Array of Independent Disks) : 데이터의 안전성 혹은 성능을 확보하기 위해 여러 개의 독립적인 보조기억장치를 하나의 보조기억장치처럼 사용하는 기술

 

입출력기법

CPU는 모든 입출력장치의 작동 방식을 알지 못하므로 장치 컨트롤러를 통해 정보를 주고 받음

 

장치 드라이버 : 장치 컨트롤러의 동작을 알고 장치 컨트롤러가 CPU와 정보를 주고 받을 수 있도록 하는 프로그램

CPU는 장치 드라이버 프로그램을 통해 장치 컨트롤러와 상호작용

 

GPU(Graphic Processing Unit)

그래픽 처리 장치, 대량의 그래픽 연산을 위한 장치

개별 코어의 성능은 CPU보다 떨어지지만 수 천개의 코어가 포함되어 병렬 처리에 좋음

'CS > 컴퓨터구조' 카테고리의 다른 글

컴퓨터 구조 중요 항목  (1) 2024.09.11
컴퓨터구조 메모리  (0) 2024.09.10
컴퓨터구조 CPU  (0) 2024.09.09
컴퓨터구조 컴퓨터가 이해하는 정보  (0) 2024.09.09

모든 프로그램은 메모리에 적재되어야 실행될 수 있음

메모리를 이루는 소자 하나의 크기는 1bit

소자 하나만으로 데이터를 표현할 수 없어 메모리 주소는 바이트 단위로 지정됨

메모리에서 데이터를 읽거나 쓸 때는 워드 단위로 전달됨

 

메모리 보호

메모리를 보호하기 위해 CPU는 현재 진행 중인 작업의 메모리 시작 주소를 경계(bound) 레지스터에 저장

현재 진행 중인 작업이 차지하고 있는 메모리의 크기(마지막 주소까지의 차이)를 한계(limit) 레지스터에 저장

작업이 진행되는 동안 경계, 한계 레지스터의 주소 범위를 벗어나는지 하드웨어를 점검하여 메모리를 보호

만약 두 레지스터의 값을 벗어난다면 메모리 오류와 관련된 인터럽트가 발생하여 해당 작업을 종료

 

RAM(Random Access Memory)

용량이 충분히 크면 보조기억장치로부터 실행할 프로그램을 가지고 오는 일이 적어 실행시간이 줄어들지만 필요 이상으로 커지면 비례하는 것은 아님

임의 접근(Radom Access) : 저장된 요소에 순차적으로 접근할 필요 없이 임의의 위치에 바로 접근 가능한 방식

 

DRAM(Dynamic RAM)

시간이 지나면 저장된 데이터가 점차 사라지므로 데이터 소멸을 막기 위해 일정 주기로 데이터를 다시 저장해야 함

소비 전력이 낮고 저렴하며 집적도가 높아 대용량으로 설계하기 좋음

 

SRAM(Static RAM)

시간이 지나도 저장된 데이터가 사라지지 않음

빠르지만 소비전력이 크고 비싸고 집적도가 낮아 속도가 빨라야하는 저장장치(캐시 메모리)에 사용됨

 

SDRAM(Synchronous Dynamic RAM)

클럭 신호와 동기화되어 클럭 타이밍에 CPU와 정보를 주고 받을 수 있는 RAM

 

DDR SDRAM(Double Data Rate SDRAM)

대역폭(데이터를 주고 받을 길의 너비)을 넓혀 속도를 빠르게 만든 SDRAM

 

메모리에 바이트를 밀어 넣는 순서 - 빅 엔디안과 리틀 엔디안

메모리는 바이트 단위로 저장하지만 CPU는 워드 단위로 받기 때문에 여러 주소를 저장함

 

빅 엔디안

낮은 번지의 주소에 상위 바이트(큰 값, MSB(Most Significant Bit, 가장 왼쪽에 있는 비트))부터 저장하는 방식
숫자 체계를 읽고 쓰는 순서와 동일하기 때문에 메모리 값을 직접 읽거나 디버깅에 편리

 

리틀 엔디안

낮은 번지의 주소에 하위 바이트(작은 값, LSB(Least Significant Bit, 가장 오른쪽에 있는 비트))부터 저장하는 방식

메모리 값을 직접 읽고 쓰기는 불편하지만 수치 계산(작은 값부터 계산)이 편리

 

캐시 메모리

필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로, CPU가 앞으로 사용할 데이터를 미리 저장

CPU 안에 있으며 CPU 내부 버스의 속도로 작동하고 메모리는 시스템 버스의 속도로 작동하기 때문에 빠른 CPU와 느린 메모리 사이의 속도 차이를 완화

 

CPU는 메모리에 접근해야 할때 먼저 캐시를 확인

캐시 히트 : 저장한 데이터가 CPU에 의해 사용되는 경우

캐시 미스 : 캐시 메모리에 없어 CPU가 메모리에 접근하는 경우

 

참조 지역성의 원리에 따라 메모리로부터 가져올 데이터를 결정

캐시 적중률을 높이기 위해 앞으로 많이 사용될 데이터를 결정

 

시간 지역성 : CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향, 변수

공간 지역성 : CPU는 접근한 메모리 공간의 근처에 접근하려는 경향, 배열

vector<vector<int>> v(20000, vector<int>(20000));

// 공간 지역성 good
for (int i = 0; i < 20000; ++i)
{
	for (int j = 0; j < 20000; ++j)
		v[i][j] = 0;
}

// 공간 지역성 bad
for (int i = 0; i < 20000; ++i)
{
	for (int j = 0; j < 20000; ++j)
		v[j][i] = 0;
}

 

캐시에 저장된 데이터가 변경되는 경우 메모리에 반영해야 하는 문제가 있음

즉시 쓰기

즉시 메모리에 반영

일관성 깨지는 상황을 방지하지만 메모리와의 빈번한 전송으로 성능이 느려짐

 

지연 쓰기

변경된 데이터를 주기적으로 메모리에 반영하는 방법

메모리와의 데이터 전송 횟수가 줄어 시스템의 성능을 향상시킬 수 있지만 메모리와 캐시 메모리 사이, 다른 코어 사이의 일관성이 깨질 수 있음

CPU

명령어를 해석하여 실행하는 장치

산술논리 연산장치, 제어장치, 레지스터로 구성되며, 이것들의 협업으로 작업을 처리

 

산술논리 연산장치

데이터의 덧셈, 뺄셈, 곱셈, 나눗셈 같은 산술 연산과 AND, OR 같은 논리 연산을 수행

 

제어장치

CPU에서 작업을 지시하는 부분

 

레지스터

연산에 필요한 데이터를 CPU 내에 임시 보관하는 곳

 

데이터 레지스터(DR) : 메모리에서 가져온 데이터를 저장

주소 레지스터(AR) : 데이터 또는 명령어가 저장된 메모리의 주소를 저장

 

프로그램 카운터(PC)

메모리에서 다음으로 읽을 명령어의 주소를 저장

일반적으로 1씩 증가 : 다음으로 읽을 메모리 주소가 1씩 증가하는 것과 같음

명령어에 의해 임의의 위치로 변경될 수도 있음

 

명령어 레지스터(IR, Instruction Register)

현재 실행중인 명령어를 저장

CPU의 제어장치가 IR의 명령어를 해석한 뒤 제어신호를 보냄

 

메모리 주소 레지스터(MAR)

메모리에서 데이터를 가져오거나 반대로 메모리로 데이터를 보낼 때 주소를 지정하기 위해 사용

 

메모리 버퍼 레지스터(MBR)

메모리에서 가져온 데이터나 메모리로 옮겨 갈 데이터를 임시로 저장

항상 MAR과 함께 동작

 

플래그 레지스터

연산 결과, CPU 상태에 대한 부가 정보인 플래그 값을 저장

부호, 제로, 캐리(올림수나 빌림수가 발생했는지 여부), 오버플로우, 인터럽트, 슈퍼바이저(커널/사용자 모드) 플래그

 

스택 포인터

스택 영역의 최상단 스택 데이터 위치를 가리킴

인터럽트

CPU에게 보내는 신호로, CPU는 진행하던 작업을 중단하고 해당 신호를 처리해야 함

 

동기 인터럽트(예외)

CPU에 의해 발생하는 인터럽트로 프로그래밍 오류와 같은 예외적인/예상치 못한 상황에 발생

 

폴트

예외를 처리한 직후에 예외가 발생한 명령어부터 실행(ex. 페이지 폴트)

 

트랩

예외가 발생한 명령어의 다음 명령어부터 실행

디버깅의 브레이크 포인트 : 순간 프로그램을 멈추고 디버깅이 끝나면 다음 명령어부터 실행

 

중단

CPU가 실행중인 프로그램을 강제로 중단시켜야 하는 심각한 오류를 발견했을 때 발생

 

소프트웨어 인터럽트

시스템 콜이 발생했을 때 발생

 

비동기 인터럽트(하드웨어 인터럽트)

입출력장치에 의해 발생

CPU보다 느린 입출력 작업의 결과를 기다리지 않고 다른 일을 수행하여 효율적으로 명령어를 처리하다 입출력 작업이 완료됐을 때 발생

 

CPU는 입출력 관리자에게 여러 개의 입출력 작업을 동시에 시킬 수 있는데, 여러 작업이 동시에 완료될 경우 인터럽트를 여러 번 사용해야 한다면 비효율적이므로 여러 개의 인터럽트를 하나의 배열로 만든 인터럽트 벡터를 사용하여 동시에 한 번만 인터럽트가 발생

  • 인터럽트 서비스 루틴의 시작 주소를 포함

 

DMA(Direct Memory Access)

CPU로부터 명령을 받은 입출력 관리자는 요청한 데이터를 메모리에 적재해야 하는데, 메모리는 CPU만 접근 권한을 가지기 때문에 입출력 관리자가 접근할 수 없음

따라서 입출력 관리자에게 CPU의 허락 없이 메모리에 접근할 수 있는 권한을 DMA라고 함

 

메모리 매핑 입출력

메모리에는 CPU가 사용하는 데이터와 입출력 장치가 사용하는 데이터가 섞여 있는데, DMA를 통해 데이터를 규칙없이 적재한다면 관리하기 어려운 것을 막기 위해 사용

CPU가 사용하는 메모리 공간과 DMA를 위한 메모리 공간을 분리

 

사이클 훔치기

CPU와 입출력장치가 동시에 메모리에 접근하면 보통 입출력장치가 우선 순위인 것을 의미

 

CPU가 비동기 인터럽트를 처리하는 순서

1. 입출력장치는 명령받은 데이터를 메모리/저장장치에 전송한 후 CPU에게 인터럽트 요청 신호를 보냄
CPU는 실행 사이클이 끝나고 명령어를 인출하기 전에 항상 인터럽트 여부를 확인 후 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인

  • 정전이나 하드웨어 고장으로 인한 인터럽트(NMI, Non Maskable Interrupt)는 인터럽트 플래그를 무시함

2. 인터럽트를 받아들일 수 있다면 CPU가 지금까지의 작업을 스택 메모리에 백업

3. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행

  • 인터럽트 서비스 루틴(인터럽트 핸들러) : 어떤 인터럽트가 발생했을 때 어떻게 처리하고 작동해야 할지에 대한 프로그램, 입출력장치마다 다름

4. 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행 재개

 

CPU 성능 향상을 위한 설계

장치 간 속도 차이를 개선하고 시스템의 작업 속도를 올리는 기술

CPU 내부 버스의 속도가 시스템 버스의 속도보다 빠르기 때문에 메모리를 비롯한 주변 장치의 속도가 CPU의 속도를 따라가지 못함

버스의 대역폭은 한 번에 전달할 수 있는 데이터의 최대 크기를 말하는데, CPU가 한 번에 처리할 수 있는 데이터의 크기와 같아 워드라고 함

  • 32bit/64bit CPU는 1워드가 32bit/64bit

 

버퍼

속도 차이가 있는 두 장치 사이에서 일정량의 데이터를 모아 한꺼번에 전송하여 속도 차이를 완화하는 장치

프로세스들이 버퍼를 공유

 

스풀

(SPOOL, Simultaneous Peripheral Operation On-Line)

CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼

프로세스들이 버퍼를 공유할수 없음

 

CPU 클럭 속도

클럭 : 컴퓨터의 부품을 동작하는 시간 단위

클럭이 1초에 몇 번 반복되는지 헤르츠(Hz) 단위로 측정

빠를수록 명령어 사이클이 더 빠르게 반복되고 이에 따라 다른 부품들도 빨라짐

 

멀티코어와 멀티스레드

코어

명령어를 읽고 해석하고 실행하는 부품 단위

여러 개의 코어를 포함한 CPU를 멀티코어 CPU / 멀티코어 프로세서라고 부름

 

스레드

하드웨어 스레드(논리 프로세서)

하나의 코어가 동시에 처리하는 명령어의 단위

하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 CPU / 멀티스레드 프로세서라고 부름

병렬성 : 물리적으로 동시에 처리하는 성질

 

소프트웨어 스레드

하나의 프로그램에서 독립적으로 실행되는 단위

동시성 : 동시에 작업을 처리하는 것처럼 보이는 성질, 물리적으로 같은 시점에 처리되는 것은 아님

 

병렬 처리(ILP, Instruction-Level Parallelism)

여러 개의 명령어를 동시에 처리하여 CPU의 성능을 높이는 기법

 

병렬 처리 시 고려 사항

상호 의존성이 없어야 함

각 명령이 서로 독립적이고 앞의 결과가 뒤의 명령에 영향을 미치지 않아야 함

 

각 단계의 시간을 거의 일정하게 맞춰야 함

각 단계의 시간이 다르면 앞의 명령이 끝나더라도 긴 시간이 걸리는 단계에서 병목 현상이 발생하여 병렬 처리의 효과가 떨어질 수 있음

 

전체 작업 시간을 몇 단계로 나눌지 고려해야 함

작업을 N개로 쪼갰을 때 N을 병렬 처리의 깊이라고 함

(위의 사진에서는 N이 3)

이론적으로 N이 커질수록 동시에 작업할 수 있는 작업의 개수가 많아져서 성능이 높아질 것

하지만 작업을 너무 많이 나누면 각 단계마다 작업을 이동하고 새로운 작업을 불러오는 데 시간이 많이 걸려 성능이 떨어질 수 있음

 

명령어 파이프라이닝

출처 : https://huimang2.github.io/etc/computer-instruction-pipeline

명령어가 처리되는 과정(명령어 인출/해석/실행/저장)에서 단계가 겹치지 않도록 명령어 파이프라인에서 각각의 단계를 동시에 실행

슈퍼스칼라 : 여러 명령어 파이프라인을 포함한 구조

 

CISC(Complex Instruction Set Computer)

다양한 기능을 지원하는 복잡한 명령어로 구성된 집합

적은 수의 명령어로 프로그램 실행 가능

하나의 명령어가 여러 클럭이 필요하므로 파이프라이닝에 비효율

 

RISC(Redeuced Instruction Set Computer)

활용 가능한 명령어가 적고 짧고 규격화, 보통 1클럭 내외로 실행

프로그램 실행에 많은 명령어 필요

하나의 명령어가 1클럭 내외로 실행되기 때문에 파이프라이닝에 효율

 

파이프라인 위험

데이터 위험

데이터의 의존성 때문에 발생하는 문제

명령어를 지연하여 해결

 

제어 위험

if/goto/JUMP 등으로 프로그램 실행의 흐름이 바뀌면 미리 인출하거나 해석중인 명령어들이 필요없어지는 상황

분기 예측이나 분기 지연 방법으로 해결

 

구조 위험(자원 위험)

서로 다른 명령어를 동시에 실행하는 과정에서 ALU, 레지스터 등 같은 자원에 접근할 때 발생

해결하기 어려움

CPU는 0과 1만 이해할 수 있음

비트는 0과 1을 나타내는 가장 작은 단위

워드는 CPU가 한 번에 처리할 수 있는 데이터의 크기, 보통 32/64 bit

 

부동 소수점

float a = 0.1;
float b = 0.2;
float c = 0.3;

c == a + b가 false가 될 수 있는 이유는 부동 소수점 표현 방식으로 오차 발생

  • C++17에서는 true가 되지만 높은 정밀도에서는 차이가 있음

 

부동소수점은 소수점이 고정되지 않은 소수점 표현 방식

123.123을 1.23123 x 10^2, 1231.23 x 10^(-1)로 다양하게 표현할 수 있음

제곱으로 표현된 2를 지수, 123.123, 1231.23, 1.23123을 가수라고 함

가수의 정수부를 1로 통일된 정규화한 수(예, 1.23123 x 10^2)가 저장되므로 가수에는 1을 제외한 소수 부분만 저장됨

 

지수를 부호 없는 정수로 저장하기 위해 음수 값을 양수 값으로 변환하기 위해 바이어스 값(2^(k-1)-1, k는 지수의 비트 수)을 더하여 저장

 

10진수 소수를 2진수로 표현할 때 오차 발생 가능

  • 0.1은 2진수로 표현하면 무한 소수이므로 모든 수를 저장할 수 없어 일부 생략하기 때문

IEEE 754 : 부동 소수점 저장 방식

인코딩 방식

아스키 코드

아스키 문자에 대응되는 고유한 수

영어 알파벳, 아라비아 숫자, 일부 특수문자 포함

1바이트 중 1비트는 패리티 비트로 오류 검출에 사용

 

EUC-KR

한글 인코딩 가능, 아스키 문자를 표현할 때 1바이트, 하나의 한글 글자를 표현할 때 2바이트(16진수)

일부 한글 글자(쀓)를 표현할 수 없음

 

유니코드

한글, 외국어, 특수문자, 화살표, 이모티콘까지 코드로 표현할 수 있는 통일된 문자 집합

EUC-KR로 일부 한글 조합을 표현할 수 없는 문제 해결

다른 언어별로 인코딩 방식을 준비할 필요가 없어짐

인코딩 방식에 UTF-8, UTF-16, UTF-32 등이 있고, 가변 길이 인코딩 방식

인코딩 방식에 따라 하나의 글자가 다른 인코딩 결과를 발생

 

base64

문자 뿐만 아니라 이진 데이터까지 변환 가능

 

명령어

수행할 대상(operand) : 데이터 / 데이터가 저장된 위치

수행할 동작(연산 코드) : 데이터 전송(STORE 등), 산술/논리 연산(ADD 등), 제어 흐름 변경(JUMP 등), 입출력 제어(READ 등)

 

하나의 명령어는 연산 코드와 0개 이상의 operand로 구성

 

연산 코드가 담기는 영역은 코드 필드, operand가 담기는 영역은 operand 필드

데이터보다는 데이터가 저장된 위치(메모리 주소나 레지스터 이름)이 명시되기도 하므로 operand 필드를 주소 필드로 부르기도 함

operand에 메모리 주소가 명시되면 메모리 접근이 필요

 

기계어 : CPU가 이해할 수 있도록 0과 1로 표현된 정보를 있는 그대로 표현한 언어

어셈블리어 : 기계어를 읽기 편한 형태로 단순 번역한 언어

 

명령어 사이클

CPU가 명령어를 처리하는 과정에서 반복적으로 실행되는 주기

인출 사이클 : 메모리에 있는 명령어를 CPU로 가져오는 단계

실행 사이클 : CPU로 가져온 명령어를 실행하는 단계

간접 사이클 : operand 필드가 메모리 주소일 경우 메모리에 접근하는 단계

인터럽트 사이클 : 인터럽트를 처리하는 사이클

'CS > 컴퓨터구조' 카테고리의 다른 글

컴퓨터 구조 중요 항목  (1) 2024.09.11
컴퓨터구조 보조기억장치, 입출력장치, GPU  (0) 2024.09.11
컴퓨터구조 메모리  (0) 2024.09.10
컴퓨터구조 CPU  (0) 2024.09.09

+ Recent posts

목차