[개발자되기: 컴퓨터 공학 기초] Day-53

Kyoorim LEE·2022년 8월 1일
0

컴퓨터 구조

컴퓨터의 기본 구성 요소

입력장치 (Input)

컴퓨터가 처리할 수 있는 형태로 데이터와 명령을 받아들이는 물리적인 장치
ex) 키보드, 마우스, 스캐너, 태블릿 등

출력장치 (Output)

처리된 데이터를 사람이 이해할 수 있는 형태로 출력하는 물리적인 장치
ex) 모니터, 프린터

중앙처리장치 (CPU)

  • 산술/논리 연산 장치: 덧셈 수행
  • 제어장치: 프로그램에 따라 명령과 제어신호 생성하여 각종 장치의 동작 제어
  • 레지스터: CPU 내부 메모리, CPU에서 사용하는 데이터를 일시적으로 저장

저장장치

  • 주 기억 장치(Memory): 데이터, 프로그램을 보관하기 위한 1차 기억 장치, 용량이 작음 => 정보를 저장해두었다가 필요할때 읽어들임
    - RAM
    • ROM
  • 보조 기억 장치: 주 기억 장치 보조. 속도는 느리지만 대용량 기억이 가능함. 현재 사용하지 않는 프로그램은 보조 기억장치에 저장됨 (디스크, CD, USB)

CPU

CPU의 구조

산술/논리 연산 장치 (Arithmetic Logic Unit, ALU)

  • 레지스터에 저장된 데이터로 덧셈, 곱셈과 같은 산술연산 수행
    cf) 레지스터에는 캐시나 메모리로부터 읽어온 데이터가 저장됨

레지스터 (Register)

CPU 내부에 있는 기억장치

  • 범용레지스터 (General-Purpose Register) : 산술 연산 논리장치에 사용됨
  • 전용레지스터 (Dedicated-Purpose Register): PC 등 특수 목적에 사용됨

레지스터 종류

  • IR(Instruction Register): 현재 수행 중인 명령어 부호를 저장
  • PC (Program Counter): 명령이 저장된 메모리 주소를 가리키는 레지스터
  • AC (Accumulator): 산술 및 논리 연산의 결과를 임시로 기억하는 레지스터

제어장치 (Control Unit, CU)

CPU가 자신 및 주변기기들을 컨트롤하는 장치

  • 프로그램 계수기 (program counter)
  • 명령 레지스터 (instruction register)
  • 명령 해독기 (instruction decoder)

제어장치 구현 방식

고정 배선 제어(Hardwired)Micro Program
제어신호가 Hardwired Circuit 에 의해서 생성 되도록 하드웨어 구성하며 상태계수기와 PLA(Programmable Logic Array ) 회로로 구성발생 가능한 제어 신호들의 조합을 미리 구성하여 ROM 에 저장했다가 필요 시 신호를 발생시키는 Software 방식
고속 처리, 고가하드웨어 방식에 비해 속도도 낮고 가격도 저렴
RISC 시스템에 적용CISC에 적용

CPU 기능

명령어

시스템이 특정 동작을 수행시키는 작은 단위

  • 동작 코드(Op-code): 각 명령어의 실행 동작을 구분하여 표현
  • 오퍼랜드(Operand): 명령어의 실행에 필요한 자료나 실제 자료의 저장위치 의미

명령어 수행 과정

  1. 읽기(Fetch Instruction, FI): 메모리에서 명령 가져옴
  2. 해석(Decode Instruction, DI): 명령을 해석
  3. 실행(Execute Instruction, EI): 명령을 수행
  4. 기록(Write Back, WB): 수행한 결과를 기록

명령어 처리 방식

  • RISC (Reduced Instruction Set Computer): 명령어 세트를 단순화 시켜서 처리
    - 하나의 사이클로 명령어 처리
    • 메모리 Load/Sotre 명령만 처리
    • 파이프라이닝, 슈퍼스칼라(CPU내 여러 개의 명령어 파이프라인을 만들어 그 수 만큼 명령어를 실행할 수 있게 만든 구조)의 사용 가능
    • 복잡한 컴파일러 구조
  • CISC (Complex Instruction Set Computer): 하나의 기능에 해당하는 하나의 명령
    - 여러 사이클로 명령어 처리
    • 많은 명령어가 메모리를 참조하는 처리 방식
    • 파이프라이닝 사용이 어려움
    • 복잡한 마이크로 프로그램 구조

cf) 파이프라이닝 : 순차적 명령어를 처리하는 프로세서에 적용되는 기술. 동시에 여러개의 명령어를 실행하는 기법
cf) 슈퍼스칼라: 여러개의 파이프라이닝

메모리

메모리별 특성

휘발성
메모리시스템이 꺼지면 지워짐
보조기억장치시스템이 꺼져도 기억하고 있음

메모리 성능

메모리와 CPU가 데이터를 주고받는 시간에 달림

리프레시 시간

메모리에서 한번 읽고 다시 읽을 수 있는 사이 시간

메모리 액세스 시간

CPU에서 보낸 명령어 주소값을 가져오는데 걸리는 시간

사이클 시간 (리프레시 시간 + 메모리 액세스 시간)

메모리작업 완료와 동시에 다음 신호를 받을 준비가 되었다는 신호를 주기까지의 시간

메모리 종류

주 기억 장치

  • RAM(Random Access Memory): CPU에서 직접 접근이 가능한 유일한 저장장치
  • ROM(Read Only Memory): 전원이 끊겨도 내용이 보존됨

보조 기억 장치

  • 자기 디스크: 플로피디스크(FDD), 하드디스크(HDD)
  • 광디스크
  • 플래시 메모리: USB, SSD

캐시메모리

메인 메모리와 CPU간의 데이터 속도 향상을 위한 중간 버퍼 역할을 함
메인 메모리가 데이터를 받고 전달하는 것이 느려서 캐시 메모리가 중간에 미리 CPU에 전달될 데이터를 들고 서있는 형태

Cache Hit: CPU가 필요한 데이터가 캐시 메모리에 있는 경우
Cache Miss: CPU가 필요한 데이터가 캐시 메모리에 없을 경우


운영체제

운영체제 목적 및 기능

  • 프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원 관리
  • 자원의 효율적 관리를 위한 자원 스케줄링 기능 제공
  • 사용자와 시스템 간 편리한 인터페이스 제공
  • 시스템의 각종 하드웨어와 네트워크 관리 및 제어

운영체제 시스템 자원 관리

응용 프로그램을 실행하려면 운영체제가 있어야함
운영체제는 응용프로그램이 하드웨어에게 일을 시킬 수 있도록 도와줌

응용 프로그램 관리

악의적 목적을 가진 프로그램이 디스크의 모든 민감정보에 접근할 수 없도록 응용프로그램 권한에 대한 관리가 필요함

응용프로그램이 운영체제를 통해 하드웨어에게 일을 시키려면 컴퓨터를 조작할 수 있는 권한을 운영체제로부터 받아야 함

응용프로그램이 운영체제와 소통하려면, 운영체제가 응용프로그램에 API를 제공해야함. 이를 위해 운영체제에서 다양한 함수를 제공하는 것을 시스템 콜이라고 부름

프로세스

프로그램이 실행 중인 상태로 특정 메모리 공간에 프로그램의 코드가 적재되고 CPU가 해당 명령어를 하나씩 수행하고 있는 상태 의미.

실행 중인 하나의 애플리케이션을 프로세스라고 부름

ex) 크롬 브라우저를 2개 실행하면 2개의 프로세스가 생성됨

프로세스 구성 요소

유저 메모리 영역(Virtual Address Descriptors)

  • 유저 메모리 공간: 프로세스 별 독립된 영역

핸들 테이블 (Handle Table)

프로세스에서 사용하는 모든 핸들에 대한 커널 객체 포인터 정보를 배열 형태로 가지고 있는 공간. 프로세스 종료 시 테이블의 정보를 참고하여 이 프로세서에서 사용하고 있는 모든 커널 객체를 자동으로 반환함

cf) 커널(kernel): 컴퓨터 운영 체제의 핵심이 되는 컴퓨터 프로그램으로 시스템의 모든 것을 완전히 통제함

독립적인 메모리 공간

프로세스마다 별도의 고유한 메모리를 사용할 수 있게 하고 있음

가상 메모리: Ram을 더 효율적으로 사용하기 위한 것. Ram에서 사용하지 않는 데이터를 하드디스크에 넣어놓고 사용할 때 꺼내와서 씀. 근데 그 하드디스크 공간까지도 부족할 때 가상메모리가 부족하다는 경고문이 뜸

프로세스 특징

자원 소유의 단위

각각의 프로세스는 자신의 실행 이미지 로드와 실행에 필요한 추가적인 메모리 공간을 가지고 있어야 함. 이는 각 프로세스마다 구별되어야 함. 해당 프로세스가 접근코자 하는 파일, I/O장치들에 대해서도 프로세서 단위로 할당받아 관리되어야함

디스패칭의 단위

프로세스는 하나의 프로그램이 운영체제로부터 CPU 의 자원을 일정 기간 동안 할당 받아 명령어를 실행하는 것.
운영체제는 여러 개의 프로세스가 병렬적으로 실행되게 하기 위해서 CPU 의 사용 시간을 각각의 프로세스에 골고루 나누어 주어야 함.
하나의 프로세스에서 여러 개의 디스패칭 단위가 실행될 수 있도록 하고 있으며, 이러한 디스패칭 단위를 스레드라 부름

프로세스 상태

실행(Run)

프로세스가 프로세서를 차지하여 서비스를 받고 있는 상태

준비(Ready)

실행될 수 있도록 준비되는 상태

대기(Waiting)

CPU의 사용이 아니라 입출력의 사건을 기다리는 상태

프로세서 VS 프로세스

프로세서 (Processor)

  • 하드웨어 측면 : 컴퓨터 내 프로그램을 수행하는 하드웨어 유닛으로 CPU를 의미하며 적어도 하나 이상의 ALU와 레지스터를 내장하고 있음
  • 소프트웨어 측면: 데이터 포맷을 변환하는 역할을 수행하는 데이터처리시스템을 의미. 워드프로세서나 컴파일러 등이 속함

프로세스 (Process)

특정 목적을 수행하기 위해 나열된 작업 목록

스레드

명령어가 CPU를 통해서 수행되는 객체의 단위
하나의 프로세스 내에는 반드시 1개 이상의 스레드가 존재
프로세스 내에 스레드가 존재하므로 서로 자원과 상태를 공유할 수 있음

cf) 8코어 8스레드: 8명의 일꾼이 한 팔로 일하는 것
8코어 16스레드: 8명으 일꾼이 두 팔로 일하는 것

-코드스테이츠 자료-

Why thread?

여러 개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위해서 스레드 사용
ex) 워드 프로세서에서 사용자로부터 키보드 입력받거나, 그래픽 or UI를 그리고 문법 오류를 체크하는 등 여러 요청들을 동시에 처리해야할 때 스레드 필요

스레드의 구성 요소

가상 CPU

인터프리터, 컴파일러에 의해 내부적으로 처리되는 가상 코드

수행 코드

Thread Class에 구현되어 있는 run() 메서드 코드

처리 데이터

스레드에서 처리하는 데이터

스레드의 특징

프로세스 내에서 실행되는 흐름의 단위
하나의 스레드는 시작해서 종료할 때 까지 한번에 하나의 명령을 수행함

  • 각 스레드마다 call stack이 존재함
  • 나머지 Code, Data, Heap 영역은 스레드끼리 공유함
  • 스레드는 다른 스레드와 독립적으로 동작함

싱글 스레드와 멀티 스레드

-코드스테이츠 자료-

싱글 스레드

프로세스가 단일 스레드로 동작하는 경우
하나의 레지스터, 스택으로 표현함
자바스크립트가 가장 대표적인 싱글 스레드 언어

자바스크립트가 싱글 스레드를 쓰는 이유는 동시성 문제때문!

싱글 스레드 장점

  • 모든 스레드가 일정 자원에 동시 접근하거나 똑같은 작업을 실행하려는 경우 에러 발생이 생길 수 있음
  • 자원 접근에 대한 동기화를 신경쓰지 않아도 되므로 문맥 교환(context switch) 작업 또한 요구하지 않음. 문맥 교환은 여러개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 비용이 많이 듦
  • 프로그래밍 난이도가 쉽고 CPU 메모리 적게 사용

싱글 스레드 단점

  • 여러개의 CPU 활용하지 못함. 멀티코어머신에서 CPU 사용을 최적화 할 수 없음. 최적화 하려면 Cluster 모듈 및 Redis와 같은 부가 인프라가 필요함
  • 연산량이 많은 작업 할 경우, 그 작업이 완료되어야 다른 작업을 수행할 수 있음
  • 에러처리를 못하는 경우 멈춰버림

멀티 스레드

하나의 프로세스 내에서 2개 이상의 스레드가 동시에 작업을 수행하는 것

멀티 스레드의 장점

  • 싱글 스레드의 경우 작업이 끝나기 전까지 사용자에게 응답하지 않지만, 멀티 스레드는 작업을 분리해서 하므로 실시간 사용자에게 응답이 가능함
  • 한 프로세스를 여러 프로세서에서 수행할 수 있으므로 효율적

멀티 스레드의 단점

  • 동시성 문제를 해결해야함
  • 주의 깊은 설계가 필요. 디버깅이 까다로움
  • 프로세스 밖에서는 스레드를 제어할 수 없음 (단일 프로세스 시스템의 경우 멀티 스레드의 효과를 기대할 수 없음)
  • 자원 공유의 문제 발생. 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음
  • 문맥 교환 작업이 필요함. 문맥교환이란 다른 작업(프로세스, 스레드)가 시작할 수 있도록 이미 실행중인 작업(프로세스, 스레드)를 멈추는 것

동시성과 병렬성의 차이

-코드스테이츠 자료-

동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한 됨. 운영체제는 각 스레드를 시간에 따라 분할하여 일정 시간마다 돌아가면서 실행되도록 함 => 이를 시분할이라고 함

동시성, 병행성(concurrency)

여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것 같은 착각을 불러일으킴

병렬성(parallelism)

멀티코어 환경에서 여러개의 스레드가 실제로 수행됨


문자열과 그래픽

문자열

유니코드

유니코드(Unicode)는 유니코드 협회(Unicode Consortium)가 제정하는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준. 이 표준에는 ISO 10646 문자 집합, 문자 인코딩, 문자 정보 데이터베이스, 문자를 다루기 위한 알고리즘 등을 포함하고 있음.

  • 인코딩(부호화) : 어떤 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것. 미리 정해진 기준으로 입력과 해독처리가 되어야함.

ASCII 문자

영문 알파벳을 사용하는 대표적인 문자 인코딩
7비트로 모든 영어 알파벳을 표현
52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자를 포함

유니코드는 ASCII를 확장한 형태

UTF-8 VS UTF-16

인코딩 방식의 차이
UTF-8에서 한글은 3바이트, UTF-16에서 2바이트 차지함

UTF-8 특징
1. 유니코드 한 문자를 나타내기 위해 1byte(8bits)에서 4bytes까지 사용

//UTF-8로 표현된 '코'
1110xxxx 10xxxxxx 10xxxxxx # x 안에 순서대로 값을 채워넣습니다.
11101100 10111101 10010100
//UTF-8로 표현된 'b'
0xxxxxxx
01100010
//
encoder.encode('b') // Uint8Array [98]
(98).toString(2) // "1100010"
  1. UTF-16에 비해 바이트 순서를 따지지 않고 순서가 정해져 있음

UTF-16 특징
1. 코드 그대로 바이트로 표현 가증
2. 바이트 순서가 다양함

그래픽

비트맵(Bitmap)

비트맵 특징

  • 웹 상에서 디지털이비지를 저장하는데 가장 많이 쓰이는 이미지 파일 포맷 형식
  • 일반적으로 래스터 그래픽(점 방식)
  • 각 점들은 픽셀 단위로 구성되며 셀은 위치에 따라 다른 값을 가짐
  • 컴퓨터에 부담을 덜 주는 구조
  • jpg, png, gif, bmp

비트맵 단점

  • 사각 픽셀 형태이므로 확대하면 "계단현상", "깨짐현상"등이 발생하고 경계가 뚜렷하지 않을 수 있음
  • 픽셀 하나당 모두 색상 값을 가지고 있음.이미지 사이즈가 커질수록 용량이 무거워짐

벡터(Vector)

벡터 특징

  • 점과 점, 선과 선을 연결하여 이미지 표현하는 수학적 원리 이용
  • 아무리 확대해도 "계단 현상", "깨짐 현상"이 발생하지 않음
  • 사이즈를 키워도 용량에는 변화가 없음
  • 비트맵에 비해 컴퓨터에 부담을 주는 방식
  • svg, ai


가비지 컬렉션

프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 기능. 보수적인 추정을 따름

=> 자바, C#, 자바스크립트

가비지 컬렉션 방법

트레이싱

한 객체에 flag를 두고 가비지 컬렉션 사이클마다 flag에 표시 삭제하는 mark and sweep 방법

Mark and sweep

GC root(시작점)에서 출발하여 reachable 한 애들은 활성화를 시키고 reachable하지 않은 닿지 않는 스코프에 있는 애들은 쓰지 않는다고 판단하여 비활성화 시키고 운영체제에게 돌려줌.

레퍼런스 카운팅

한 객체를 참조하는 변수의 수를 추적하는 방법

캐시

일시적인 데이터를 저장하기 위해 존재하는 고속의 데이터 저장 공간
첫 작업 이후 해당 데이터에 대한 재요청이 있을 경우, 데이터의 기본 저장공간에 접근할 때보다 더 빠르게 요청을 처리할 수 있음

캐시 작동원리

캐시의 데이터는 RAM과 같이 빠르게 액세스할 수 있는 하드웨어에 저장됨. 데이터 검색의 성능을 높임

캐시는 속도를 위해 용량을 절충함. 일반적으로 데이터의 하위 집합을 일시적으로 저장함
<-> 완전하고 영구적인 데이터가 있는 데이터베이스와 정반대

캐시의 장점

  • 애플리케이션 성능 개선
  • 데이터베이스 비용 절감
  • 백엔드 부하 감소
  • 예측 가능한 성능
  • 데이터베이스 핫스팟 제거
  • 읽기 처리량 증가
    - 읽기 처리량: IOPS; Input/output operations per second. HDD, SSD 등의 컴퓨터 저장 장치의 성능 측정 단위

실제 캐시 적용 사례

  • 클라이언트: HTTP 캐시 헤더, 브라우저
  • 네트워크: DNS 서버, HTTP 캐시 헤더, CDN, 리버스 프록시
  • 서버 및 데이터베이스: 키-값 데이터 스토어(e.g. Redis), 로컬 캐시(인-메모리, 디스크)

참고자료: https://aws.amazon.com/ko/caching/

profile
oneThing

0개의 댓글