[컴퓨터 공학]기초

🔆 컴퓨터 구조

컴퓨터의 기본 구조

컴퓨터🖥
: 하드웨어와 소프트웨어가 합쳐진 형태

  • 하드웨어
    : 전자 회로 및 기계 장치로 되어 있는, 컴퓨터 시스템이 작동하는 데 필요한 물리적 구성 요소
    • 입출력 장치, 중앙처리장치(CPU), 기억장치 등으로 구성
  • 소프트웨어
    : 하드웨어를 제어하며 작업을 수행하는 프로그램

컴퓨터의 기본 구성 요소

  • 입력 장치
    : 컴퓨터가 처리할 수 있는 형태로 데이터와 명령을 받아들이는 물리적 장치
    • 키보드, 마우스, 스캐너, 타블렛 등
  • 출력 장치
    : 처리된 데이터를 사람이 이해할 수 있는 형태로 내보내는 물리적 장치
    • 모니터 등
  • 중앙처리장치
    • 산술/논리 연산 장치(ALU)
      : 산술연산과 논리연산을 계산하는 디지털 회로로 연산을 수행하여 데이터를 처리하는 장치
    • 제어 장치
      : 프로그램에 따라 명령과 제어 신호를 생성하여 각종 장치의 동작을 제어하는 장치
    • 레지스터
      : CPU 내부에 있는 저장공간으로 CPU에서 사용하는 데이터를 일시적으로 저장하는 장소
  • 저장 장치
    • 주기억장치(메모리)
      : 데이터나 프로그램을 보관하기 위한 기억 장치
      • 종류: RAM(휘발성 메모리), ROM(비휘발성 메모리)
    • 보조 기억 장치
      : 주 기억 장치를 보조하기 위한 기억 장치로 처리 속도는 느리지만 대용량의 기억 가능
      • HDD, SSD, USB 등

CPU와 Memory

💡CPU
: 각종 연산을 수행하고 기억장치에 기억되어 있는 명령어들을 수행하는 컴퓨터 시스템을 이루는 핵심 부품

  • 폰노이만 구조
    : CPU, 메모리, 입출력 장치의 3단계 구조로 이루어진 프로그램 내장형 컴퓨터 구조

CPU의 구조

  • 산술/논리 연산 장치(Arithmetic Logic Unit, ALU)
    : 산술연산과 논리연산을 담당하는 장치로 레지스터에 저장된 데이터를 이용하여 연산을 수행

    • 구성: 가산기, 보수기, 누산기, 기억 레지스터, 데이터 레지스터 등
  • 레지스터(Register)
    : 중앙처리장치 내부의 기억장치로 산술 연산 논리장치에 의해 사용되는 범용 레지스터(General-Purpose Register)와 PC 등 특수 목적에 사용되는 전용 레지스터(Dedicated-Purpose Register)로 구분

    • 레지스터의 종류
      • IR(Instruction Register)
        : 현재 수행 중인 명령어 부호를 저장하고 있는 레지스터
      • PC(Program Counter)
        : 명령이 저장된 메모리의 주소를 가리키는 레지스터
      • AC(Accumulator)
        : 산술 및 논리 연산 결과를 임시로 기억하는 레지스터
  • 제어장치(Control Unit, CU)
    : CPU가 자신 및 주변 기기들을 제어하는 장치

    • 제어장치의 구성

      • 계수기(program counter)
        : 프로그램의 수행 순서를 제어
      • 명령 레지스터(instruction register)
        : 현재 수행중인 명령어의 내용을 임시 기억
      • 명령 해독기(instruction decoder)
        : 명령 레지스터에 수록된 명령을 해독하여 수행될 장치에 제어신호를 전송
    • 제어장치 구현 방식

      HardwiredMicro Program
      논리 회로를 사용하여 프로세서에 필요한 제어 신호 생성하는 HardWare 방식
      (하드웨어의 도움으로 제어 신호 생성)
      발생 가능한 신호들의 조합을 미리 구성하여 ROM에 저장했다가 필요 시 신호를 발생시키는 SoftWare 방식
      고속 처리, 고가하드웨어 방식에 비해 속도↓, 가격↓
      RISC 시스템에 적용CISC 시스템에 적용

CPU의 기능
CPU의 기능은 명령어와 데이터에 관련된다

  • 모든 명령어들에 대하여 공통적으로 기억 장치로부터 명령어 인출 및 해독 수행
  • 데이터 인출 및 처리, 쓰기는 명령어에 따라 필요 시 수행
  • 명령어
    : 시스템이 특정 동작을 수행시키는 작은 단위로 코드로 구성
    • 동작코드(Op-code: Operational Code)
      : 각 명령어의 실행 동작을 구분하여 표현
    • 오퍼랜드(Operand)
      : 명령어의 실행에 필요한 자료나 자료의 저장 위치를 의미하는 코드로 실제 연산의 대상이 되는 피연산자
  • 명령어 수행 과정
    • 읽기(Fetch Instruction, FI)
      : 메모리에서 명령 인출
    • 해석(Decode Instruction, DI)
      : 명령 해독
    • 실행(Execute Instruction, EI)
      : 명령 수행
    • 기록(Write Back, WB)
      : 수행한 결과 기록
  • 명령어 처리 방식
    • RISC(Reduced Instruction Set Computer)
      : 컴퓨터 내부적으로 사용하는 명령어 세트를 단순화 시켜서 처리하는 형태의 구조로 단순한 명령을 조합하여 하나의 기능 수행
      • 하나의 사이클로 명령어 처리
      • 메모리 Load/Store 명령만 처리하는 방식
      • 파이프라이닝, 슈퍼스칼라 사용 가능
      • 복잡한 컴파일러 구조
    • CISC(Complex Instruction Set Computer)
      : 하나의 기능에 해당하는 하나의 명령이 있는 처리 방식
      • 여러 사이클로 명령어 처리
      • 많은 명령어가 메모리를 참조하는 처리 방식
      • 파이프라이닝 사용 여려움
      • 복잡한 마이크로 프로그램 구조

💡Memory
: 기억소자(반도체)

  • 반도체는 특성상 전류를 흐르게도 하고 흐르지 않게도 하는 특징
    → 이를 이용하여 임시적인 내용들을 기억하게 만드는 것

메모리 분류별 특성

메모리 성능
: 메모리가 CPU와 데이터를 주고받는 시간으로 액세스라고 함

  • 리프레시 시간
    : 메모리에서 한 번 읽고 난 후 다시 읽을 수 있는 사이 시간
  • 메모리 액세스 시간
    : 명령을 받고 데이터를 읽기 시작하기까지의 시간
  • 사이클 시간(리프레시 + 메모리 액세스)
    : 메모리 작업이 완료와 동시에 대기 신호를 내놓은 후 다음 신호를 받을 준비가 되었다는 신호를 주기까지의 시간

메모리 종류

  • 주기억장치
    • RAM(Random Access Memory)
      : 프로그램 수행 속도에 영향을 주는 휘발성 저장 장치로 CPU에서 직접 접근 가능한 유일한 저장 장치
      • SRAM: 리프레쉬 필요x, 전력 소모 적음, 가격 높음
      • DRAM: 리프레쉬 필요, 저가, 주로 사용
    • ROM(Random Only Memory)
      : 읽기 전용의 비휘발성 저장 장치
  • 보조기억장치
    • 자기 디스크
      • 원판 표면의 철 입자의 방향으로 0과 1을 표현
      • 디스크 드라이브: 자기 디스크로부터 데이터를 읽는 주변 장치
      • 플로피 디스크(FDD)와 하드 디스크(HDD) 존재
    • 광 디스크
      • 빛의 반사를 이용하여 자료를 읽어내는 저장 매체
      • CD(1세대), DVD(2세대), 블루레이 디스크(3세대), 테라 디스크, HVD(차세대) 존재
    • 플래시 메모리
      • 전자적으로 데이터를 지우고 쓸 수 있는 비휘발성 메모리
      • 충격에 강하여 휴대용 기기에 주로 쓰임
      • USB, SSD(특징: 저전력, 저소음, 저중량) 존재

캐시 메모리(Cache Memory)
: CPU 내 또는 외에 존재하는 메모리

  • 메인 메모리와 CPU 간의 데이터 속도 향상을 위한 중간 버퍼 역할 수행
  • 캐시 메모리의 성능 결정 요소

    • Hit Ratio: CPU가 필요한 데이터가 Cache Memory 안에 있을 확률

      요소내용
      Cache 크기Cache Memory의 Size와 Hit Ratio는 반비례 관계
      인출 방식(Fetch Algorithm)요구 인출(Demand Fetch): 필요 시 요구하여 인출하는 방식
      선 인출(Pre-Fetch): 예상되는 데이터를 미리 인출하는 방식
      쓰기 정책(Write Policy)Write-Trough: 주기억 장치와 캐시에 동시에 쓰는 방식, 구성방법 단순
      Write-Back: 데이터 변경만 캐시에 기록하는 방식, 구성방법 복잡
      교체(Replace) 알고리즘Cache Miss 발생 시 기존 메모리와 교체하는 방식
      FIFO, LRU, LFU, Random, Optimal Belady's MIN 등
      사상(Mapping) 기법주기억장치의 블록을 적재할 캐시 내의 위치를 지정하는 방법
      direct mapping, associative mapping, set associative mapping 등

🔆 운영체제

🏷 운영체제

: 하드웨어에게 일을 시키는(시스템 자원을 관리하는) 주체

운영체제의 목적 및 기능

  • 운영체제의 목적
    • 처리능력 향상
    • 사용 가능도 향상
    • 신뢰도 향상
    • 반환 시간 단축
  • 운영체제의 기능
    • 프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원 관리
    • 자원의 효율적 관리를 위한 스케줄링 기능 제공
    • 사용자-시스템 간 편리한 인터페이스 제공
    • 시스템의 각종 하드웨어와 네트워크 관리 및 제어

운영체제의 시스템 자원 관리

  • 프로세스 관리(CPU)
  • 메모리 관리
  • I/O(입출력) 관리(디스크, 네트워크 등)
  • 응용 프로그램 관리
    • 응용 프로그램은 운영체제를 통해 컴퓨터에게 일을 시키는 것
    • 응용 프로그램 실행 시 시스템 자원을 사용할 수 있도록 권한과 사용자 관리
      • API
        : 응용 프로그램이 운영체제와 소통하기 위해 운영체제가 제공하는 인터페이스
      • System Call
        : 응용 프로그램이 시스템 자원을 사용할 수 있도록 다양한 함수를 제공하는 것

💡프로세스
: 실행 중인 하나의 애플리케이션

  • 프로그램이 특정 메모리 공간에 적재되고 CPU가 해당 명령어를 수행하고 있는 상태

프로세스 구성 요소

  1. 유저 메모리 영역 관리(Virtual Address Descriptors)
    • 유저 메모리 공간
      : 프로세스 별 독립된 영역을 가지게 되는 곳
      • VAD: 유저 메모리 영역을 관리하기 위한 테이블
    • 커널 메모리 공간
      : 모든 프로세스가 공유하여 사용
  2. 핸들 테이블(Handle Table)
    • 프로세스에서 사용하는 모든 핸들에 대한 커널 객체 포인터 정보를 배열 형태로 가지고 있는 공간
  3. 독립적인 메모리 공간
    • 페이징 기법을 이용하여 프로세스마다 별도의 고유한 메모리 사용 가능

프로세스 특징

  • 자원 소유의 단위
    • 각각의 프로세스는 자신의 실행 이미지 로드와 실행에 필요한 추가적인 메모리 공간을 가지고 있어야 함 이것은 각 프로세스마다 구별되어야 하며 해당 프로세스가 접근하고자 하는 파일, I/O 장치들에 대해서 또한 프로세서 단위로 할당 받아 관리되어야 함
  • 디스패칭의 단위
    • 프로세스는 하나의 프로그램이 운영체제로부터 CPU 의 자원을 일정 기간 동안 할당 받아 명령어를 실행하는 것이며, 운영체제는 여러 개의 프로세스가 병렬적으로 실행되게 하기 위해서 CPU 의 사용 시간을 각각의 프로세스에 골고루 나누어 주어야 함 하나의 프로세스에서 여러 개의 디스패칭 단위가 실행될 수 있도록 하고 있으며, 이러한 디스패칭 단위를 스레드라 함

프로세스 상태

  • 실행(Run)
    : 프로세스가 프로세서를 차지하여 서비스를 받고 있는 상태
  • 준비(Ready)
    : 실행될 수 있도록 준비되는 상태
  • 대기(Waiting)
    : CPU의 사용이 아니라 입출력의 사건을 기다리는 상태

프로세서 vs 프로세스

  • 프로세서(Processor)
    • 하드웨어적인 측면
      : 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛으로 중앙처리장치(CPU) 의미
    • 소프트웨어적인 측면
      : 데이터 포맷을 변환하는 역할을 수행하는 데이터 처리 시스템
  • 프로세스(Process)
    • 특정 목적을 수행하기 위해 나열된 작업 목록
    • 메모리에 적재 되어 프로세서에 의해 실행 중인 프로그램

💡스레드
: 명령어가 CPU를 통해서 수행되는 객체의 단위로 프로세스 내에 존재하는 CPU 작업 단위

  • 하나의 프로세스 내에 반드시 1개 이상의 스레드 존재
  • 스레드는 같은 프로세스에 있는 자원과 상태 공유
    • 같은 주소 공간에 존재
    • 동일한 데이터에 접근 가능
  • 프로세스 종료 시 스레드도 함께 종료
  • 스레드의 필요성
    • 여러 개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위해 존재
  • 스레드의 구성요소
    • 가상 CPU
      : 인터프리터, 컴파일러에 의해 내부적으로 처리되는 가상 코드
    • 수행 코드
      : Thread Class에 구현되어 있는 run() Method 코드
    • 처리 데이터
      : Thread에서 처리하는 데이터
  • 스레드의 특징
    • 프로세스 내에서 실행되는 흐름의 단위로 하나의 스레드는 한 번에 하나의 명령 수행
    • 각 스레드마다 call stack이 존재하며 Code, Data, Heap 영역은 스레드끼리 공유
      • 프로세스는 다른 프로세스의 메모리에 직접 접근 불가
    • 스레드는 다른 스레드와 독립적으로 동작하여 두 개 이상의 스레드의 실행 및 종료 순서는 예측 불가

싱글 스레드와 멀티 스레드

  • 싱글 스레드(Single-Thread)
    : 프로세스가 단일 스레드로 동작하는 방식으로 일련의 처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법
    • 하나의 레지스터, 스택으로 표현
    • 자바스크립트가 대표적인 싱글 스레드 언어
  • 싱글 스레드의 장점
    • 자원 접근에 대한 동기화를 신경 쓸 필요 없음
    • 문맥 교환 작업을 요구하지 않음
    • 프로그래밍 난이도가 쉽고, CPU 메모리 적게 사용
  • 싱글 스레드의 단점
    • 여러 개의 CPU를 활용하지 목함
      • 싱글 스레드는 하나의 물리적 코어만 사용
      • 멀리 코어 머신에서 CPU 사용 최적화 어려움
    • 연산량이 많은 작업을 수행하는 경우, 작업 완료 시 다른 작업 수행 가능
    • 에러 처리를 못하는 경우 멈춤
      • 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복 가능
  • 멀티 스레드(Multi-Thread)
    : 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것
    • 멀티 프로세스(multi process)
      : 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것
    • 시스템 자원의 활용 극대화 및 처리량 증대 가능 -> 단일 프로세스 시스템의 효율성을 높일 수 있음
  • 멀티 스레딩의 장점
    • 작업을 분리하여 수행하므로 실시간으로 사용자에게 응답 가능
    • 한 프로세스를 여러 프로세서에서 수행 가능
  • 멀티 스레딩의 문제점
    • 디버깅의 까다로움
    • 단일 프로세스 시스템의 경우, 효과를 기대하기 어렵고 다른 프로세스에서 스레드 제어 불가
    • 자원 공유의 문제 발생
    • 문맥 교환 작업 요구
      • 문맥 교환(Context Switching): CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정으로 다른 테스크(프로세스, 스레드)가 시작할 수 있도록 이미 실행 중인 테스크를 멈추는 것

동시성과 병렬성

  • 시분할 방식
    :운영체제가 각 스레드를 시간에 따라 분할하여 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 하는 방식
    - 동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한
  • Concurrency(동시성, 병행성)
    : 싱글 코어 환경에서 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 보이는 것
  • Parallelism(병렬성)
    : 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행되는 것

🔆 문자열과 그래픽

문자열🔠

문자열이 차지하는 바이트❓

  • 프로그래밍 언어마다 문자열을 저장하는 자료형이 다르기 때문에 이 자료형이 차지하는 바이트를 알아야 문자열이 차지하는 바이트를 계산할 수 있음

유니코드
: 유니코드 협회가 제정하는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 사업 표준

  • 유니코드의 목적: 현존하는 문자 인코딩 방법을 모두 유니코드로 교체하는 것
    • 인코딩: 어떤 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것

ASCII문자
: 영문 알파벳을 사용하는 대표적인 문자 인코딩

  • 7비트로 모든 영어 알파벳 표현 가능
  • 52개의 영문 알파벳 대소문자, 10개의 숫자, 32개의 특수 문자, 하나의 공백 문자를 포함

UTF-8과 UTF-16의 차이
: 인코딩 방식의 차이

  1. UTF-8
    • 가변 길이 인코딩
      : 유니코드 한 문자를 나타내기 위해 1byte에서 4bytes까지 사용
      • 네트워크를 통해 전송되는 텍스트에 주로 사용
      • ASCII 코드의 경우 1byte, 영어외 글자는 2-3byte, 보조 글자는 4byte 차지
    • 바이트 순서가 고정
  2. UTF-16
    • 코드 그대로 바이트로 표현 가능
      • 대부분 2byte로 표현
    • 바이트 순서가 다양

그래픽🌄

비트맵
: 웹 상에서 디지털 이미지를 저장하는 데 가장 많이 쓰이는 이미지 파일 포맷 형식으로 래스터 그래픽(점 방식)이라고 함

  • 이미지의 각 점들을 격자형의 픽셀 단위로 구성
  • 한 지역을 차지하는 셀은 위치에 따라 다른 값을 가짐
  • 특징
    • 사각의 픽셀 형태로 모여 있으므로 확대 시 계단현상(깨짐 현상) 발생
    • 경계가 뚜렷하지 않음
    • 컴퓨터에 부담이 덜함
    • 픽셀 당 색상 값을 가지기 때문에 이미지 사이즈가 커질수록 용량도 커짐

벡터
: 이미지를 수학적인 공식으로 표현하는 이미지 파일 포맷 형식

  • 특징
    • 점과 점을 연결해 선, 선과 선을 연결해 면을 표현하는 수학적 원리
      → 계단현상(깨짐 현상) 발생x
    • 비트맵에 비해 컴퓨터에 부담을 가함
    • 사이즈를 키워도 용량에는 변화 없음

비트맵(래스터)과 벡터 이미지의 차이점

비트맵(래스터)벡터
기반 기술픽셀 기반수학적으로 계산된 Shape 기반
특징사진과 같이 색상의 조합이 다향한 이미지에 적합로고, 일러스트와 같이 제품에 적용되는 이미지에 적합
확대확대에 적합하지 않음품질 저하 없이 모든 크기로 확대 가능, 해상도의 영향을 받지 않음
크기에 따른 파일 용량큰 크기의 이미지는 큰 파일 사이즈를 가짐큰 크기의 벡터 크래픽은 작은 파일 사이즈 유지 가능
상호 변환이미지의 복잡도에 따라 벡터로 변환하는 것에 오랜 시간이 소요쉽게 래스터 이미지로 변환 가능
대표적인 파일 포맷jpg, gif, png, bmp, psdsvg, ai
웹에서의 사용성jpg, gif, png 등이 널리 쓰임svg 포맷은 현대의 브라우저에서 대부분 지원

🔆 가비지 컬렉션

가비지 컬렉션🗑
: 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것

  • 자바, C#, 자바스크립트
    : 객체 생성시 자동으로 메모리를 할당하고 불필요 시 자동으로 해제하는 가비지 컬렉션이 내장
  • C언어와 같은 저수준 언어
    : 메모리 관리를 위해 malloc()free()를 사용해 개발자가 스스로 메모리를 할당하고 해제
  • 고수준 언어와 저수준 언어
    • 저수준 언어: 기계 친화적인 언어
      • 하드웨어(레지스터 및 메모리)와 직접 상호 작용 가능
        →빠르게 실행되는 응용 프로그램을 빌드하는 데 사용
    • 고수준 언어: 인간 친화적인 언어
      • 하드웨어와 직접 상호 작용x
      • 컴파일러나 인터프리터 필요

메모리 생존 주기

  1. 필요 시 개발자가 할당
  2. 할당된 메모리 사용(Read and Write)
  3. 메모리가 더이상 필요하지 않을 경우 해제
    • 1, 3의 경우 저수준 언어에서는 명시적, 고수준 언어에서는 암묵적으로 작동

대표적인 가비지 컬렉션 방법

  • 가비지 컬렉션 알고리즘이 의존하고 잇는 공통 개념
    : 참조(reference)
    • 메모리 관리 관점에서 어떤 객체가 다른 객체에 접근할 수 있다면 다른 객체를 ‘참조’한다고 말한다
    • 객체 참조에 대한 광의적 개념으로 일반적인 JavaScript 객체 뿐만 아니라 함수 스코프나 글로벌 렉시컬 스코프까지 포함
      • 렉시컬 스코핑(lexical scoping): 변수 이름이 중첩된 함수에서 해석되는 방식을 정의하는 것
  1. 레퍼런스 카운팅(참조 횟수 계산)
    : 한 객체를 참조하는 변수의 수를 추적하는 방법으로 가장 단순한 형태의 가비지 컬렉션 알고리즘
  • 레퍼런스 카운트가 0이 될 경우 가비지 컬렉션의 대상이 됨
  • 순환 참조의 경우 객체가 서로 한 번씩 참조한 것으로 간주되어 스코프를 벗어나 쓸모가 없게 되더라도 가비지 컬렉션 대상에서 제외되는 문제가 발생할 수 있음
  1. 트레이싱
    : 한 객체에 flag를 두고, 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법
  • 객체 필요 여부를 결정하기 위해 닿을 수 있는(reachable) 객체인지 판단
    • 루트(Roots)
      : 코드에서 참조되는 전역 변수로 가비지 컬렉터는 모든 루트의 목록을 생성
    • 모든 루트와 자식을 검사하여 활성화 여부 표시
      • 루트가 닿을 수 없는 객체는 가비지로 표시
    • 가비지 컬렉터는 활성으로 표시되지 않은 모든 메모리를 OS에 반환

메모리 누수
메모리 누수의 주요 원인: 예상치 못한 참조

  • JavaScript에서의 예상치 못한 참조: 더이상 사용되지 않지만 코드 상 어딘가에 유지되어 해제되지 못한 변수들
  • 메모리 누수의 3가지 형태
    • 우발적으로 생성된 전역변수
    • DOM 외부에서의 참조
    • 클로저의 잘못된 사용

0개의 댓글