티스토리 뷰

컴퓨터 구조

SW(하드웨어 위에서 제어 , 작업을 수행하는 프로그램)+HW(전자회로 및 기계장치로 입출력 장치 , 중앙처리장치(CPU) , 기억장치

입력 장치

컴퓨터가 처리할 수 있는 형태로 데이터와 명령을 받아들이는 물리적인 장치

출력장치

처리된 데이터를 사람이 이해할 수 있는 형태로 출력하는 물리적인 장치를 의미

중앙처리장치

CPU의 내부 구성은 크게 산술/논리 연산 장치(ALU)와 제어 장치, 레지스터(데이터를 일시적으로 저장하는 장소)로 구성

저장 장치

데이터나 프로그램을 보관하기 위한 일차 기억 장치인 주 기억 장치(Memory)와 주 기억 장치를 보조하기 위한 디스크와 씨디 같은 보조 기억 장치가 존재

 

주 기억장치(RAM , ROM)

레지스터 용량이 작아 주로 정보를 저장해두었다가 읽어들이는 저장소로 사용

 

보조 기억 장치는 그런 주 기억 장치를 보조하기 때문에 주 기억 장치에 비해 기억된 내용을 읽는 속도는 느리지만

대용량의 기억이 가능하며 현재 사용하지 않는 프로그램은 보조 기억 장치에 저장

 

자기 디스크 : 플로피 디스트, 하드 디스크

광 디스크 : CD , DVD 

플래쉬 메모리 : USB , SSD

 

CPU

구조

산술/논리 연산 장치(ALU), 제어 장치와 레지스터

 

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

술적인 연산과 논리적인 연산을 담당하는 장치

제어장치(Control Unit, CU)

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

프로그램 계수기(program counter),:

명령 레지스터(instruction register)

명령해독기(instruction decoder)

 

제어 장치 구현의 방식은

Hardwired  : 제어신호가 Hardwired Cirtcuit에 의해 상성되도록 하드웨어 구성(RISC)

Micro Program : 발생가능한 제어신호들의 조합을 미리 구성하여 ROM에 저장했다가 필요할때 신호를 발생 시키는 Software 방식(CISC)

 

레지스터(Register)

중앙처리장치(CPU) 내부에 있는 기억장치

산술 연산 논리장치에 의해 사용되는 범용 레지스터

PC 등 특수 목적에 사용되는 전용 레지스터

 

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

CPU의 기능

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

동작 코드: 각 명령어 실행 동작 구분

오퍼랜드 : 명령어의 실행에 필요한 자료나 실제 자료의 저장 위치 의미 

명령어 수행과정 

FI -> DI -> EI -> WB

  • 읽기(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

기억소자 즉 반도체를 의미

반도체는 전류를 흐르게도 흐르지 않게 한다. =>임시적인 내용을 기억하게 한다.

메모리 분류별 특성

메모리 : 휘발성 O

보조 기억장치 : 휘발성 X

 

 

메모리 성능

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

메모리 액세스 시간:데이터를 읽어오라는 명령을 받고 데이터를 읽기 시작하기까지의 시간

사이클 시간(리프레시 시간 + 메모리 액세스 시간):메모리 작업이 완료와 동시에 대기 신호를 내놓은 후 다음 신호를 받을 준비가 되었다는 신호를 주기까지의 시간을 의미

 

메모리 종류

주기억장치

RAM(Random Access Memory)

컴퓨터의 전원이 끊어지면 내용이 휘발되어 보조 저장 장치가 반드시 필요

ROM(Read Only Memory)

전원이 끊겨도 내용이 보존

보조기억장치

자기 디스크

디스크 드라이브는 자기 디스크로부터 데이터를 읽는 주변 장치

플로피 디스크(FDD)와 하드 디스크(HDD)가 존재

광 디스크

의 반사를 이용하여 자료를 읽어내는 저장 매체

ex) CD , DVD , 블루레이 디스크, 테라 디스크나 HVD

플래시 메모리

전자적으로 데이터를 지우고 쓸 수 있는 비휘발성 메모리

USB와 SSD가 존재

SSD는 저전력, 저소음, 저중량

캐시 메모리(Cache Memory)

CPU 내 또는 외에 존재하는 메모리로써, 메인 메모리와 CPU 간의 데이터 속도 향상을 위한 중간 버퍼 역할

메인 메모리의 일정 블록 사이즈의 데이터를 담아 두었다가 CPU에 워드 사이즈 만큼의 데이터를 전송

사이즈들이 캐시에 영향 -> 블록사이즈나 워드 사이즈가 상대적으로 클수록 Cache의 Hit Ratio율(원하는 데이터가 Cache에 있을 확률)이 높아지기 때문이다.

 

CPU가 필요한 데이터가 캐시메모리내에 있다=> Cache Hit

COU가 필요한 데이터가 캐시메모리내에 없다 => Cache Miss

 

.성능 결정 요소

 

Cache 크기

Cache Memory의 Size의 크기가 크면 Hit Ratio율과 관계

 

인출 방식 (Fetch Algorithm)

요구 인출(Demand Fetch): 필요 시 요구하여 인출하는 방식

선 인출(Pre-Fetch): 예상되는 데이터를 미리 인출하는 방식

 

쓰기 정책 (Write Policy)

Write-Through: 주기억 장치와 캐시에 동시에 쓰는 방식.

Write-Back: 데이터 변경만 캐시에 기록하는 방식.

 

교체(Replace) 알고리즘

Cache Miss 발생시 기존 메모리와 교체하는 방식.

 

사상(Mapping) 기법

주기억장치의 블록을 적재할 캐시 내의 위치를 지정하는 방법

 

운영체제의 목적 및 기능

운영체제의 목적은 처리능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축 등

프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원을 관리

자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능을 제공

사용자와 시스템 간의 편리한 인터페이스를 제공

시스템의 각종 하드웨어와 네트워크를 관리하고 제어

 

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

하드웨어를 구성하는 일을 하는 CPU, 자료를 저장하는 RAM, 디스크 등의 시스템 자원을 관리하는 주체

응용 프로그램: 운영체제를 통해 컴퓨터에게 일을 시키는 것

,=>운영체제에서 다양한 함수를 제공하는 것을 시스템 콜(System call)이라고 부른다.

 

운영 체제에서는 프로세스(실행 중인 하나의 애플리케이션)를 사용하여 프로그램을 수행

 

프로세스 구성 요소

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

프로세스 별로 독립된 영역을 가지게 되는 곳은 유저 메모리 공간

VAD(Virtual Address Descriptors)라는 관리 테이블이 존재

 

핸들 테이블(Handle Table)

프로세스에서 사용하는 모든 핸들에 대한 커널 객체 포인터 정보를 배열 형태로 가지고 있는 공간

테이블의 정보를 참고하여 사용하고 있는모든 커널 객체를 자동으로 반환

 

독립적인 메모리 공간

가상 메모리로 페이징 기법을 이용하여 프로세스마다 별도의 고유한 메모리를 사용할 수 있게 하고 있다(윈도우의 경우).

 

프로세스 특징

자원 소유의 단위

각각의 프로세스는 자신의 실행 이미지 로드와 실행에 필요한 추가적인 메모리 공간을 가지고 있어야한다.

디스패칭의 단위

프로세스는 하나의 프로그램이 운영체제로부터 CPU 의 자원을 일정 기간 동안 할당 받아 명령어를 실행하는 것

 

하나의 프로세스에서 여러 개의 디스패칭 단위가 실행될 수 있도록 하고 있으며, 이러한 디스패칭 단위를 스레드라고 한다.

 

프로세스 상태

실행(Run) ,준비(Ready) , 대기(Waiting)

 

프로세서 

  • 하드웨어적인 측면 : 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛으로, 중앙처리장치(CPU)를 의미하며 적어도 하나 이상의 ALU와 레지스터를 내장
  • 소프트웨어적인 측면 : 데이터 포맷을 변환하는 역할을 수행하는 데이터 처리 시스템을 의미

프로세스(Process)

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

 

 

프로세스 끼리 메모리 공유 X 

프로세스 안에 스레드가 하나 이상이다.

 

스레드란?

명령어가 CPU 를 통해서 수행되는 객체의 단위

스레드는 같은 프로세스에 있는 자원과 상태를 공유

같은 프로세스 내에 있는 스레드는 같은 주소 공간에 존재하게 되며 동일한 데이터에 접근

 

즉 여러 개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위해서 스레드를 사용

 

구성요소

  • 가상 CPU : 인터프리터, 컴파일러에 의해 내부적으로 처리되는 가상 코드입니다.
  • 수행 코드 : Thread Class에 구현되어 있는 run() Method 코드입니다.
  • 처리 데이터 : Thread에서 처리하는 데이터

 

특징

  • 프로세스 내에서 실행되는 흐름의 단위로 한번에 하나씩 명령 수행
  • 각 스레드마다 call stack(실행 중인 서브루틴을 저장하는 자료구조)이 존재 - 나머지 Code, Data, Heap 영역은 스레드 끼리 공유
  • 스레드는 다른 스레드와 독립적으로 동작

싱글 스레드와 멀티 스레드

싱글 스레드 :일련의 처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법

하나의 레지스터, 스택으로 표현

 

장점: 자원 접근에 대한 동기화 X =>스레드들이 동시에 같은 자원에 접근하지 못하도록 제어 안해도 된다.

문맥 교환 (여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업) 요구X => 많은 비용X

프로그래밍 난이도가 쉽고, CPU 메모리를 적게 사용

 

단점: 여러 개의 CPU를 활용하지 못함

연산량이 많은 작업 완료해야 다른 작업 수행

에러처리 못하면 멈춘다.=> 새로운 스레드 생성하여 극복

 

멀티 스레드 (Multi-Thread)

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

 

멀티 프로세스 :여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미

 

장점

작업을 분리해서 수행하므로 실시간으로 사용자에게 응답

한 프로세스를 여러 프로세서에서 수행

 

문제점

주의 깊은 설계가 필요하며, 디버깅이 까다롭다.

 

자원 공유의 문제 발생

문맥 교환 작업(CPU에서 여러 프로세스를 돌아가면서 작업을 처리)을 요구

 

 

데드락(Deadlock)은 멀티스레드 프로그래밍에서 두 개 이상의 스레드가 서로 자원을 요청하고 대기하는 상태에서 발생할 수 있는 문제

각 스레드는 상대방이 점유한 자원을 해제하지 않으면 다음 단계로 진행할 수 없기 때문에, 서로 대기하며 무한정 기다리게 되는 상황

 

뮤텍스(Mutex)는 공유 자원에 대한 동시 접근을 막기 위한 기술로, 여러 스레드가 동시에 접근할 수 있는 자원에 대해 상호 배제를 위해 사용

뮤텍스는 특정 자원에 대한 접근을 허용하거나 막는 토큰으로, 한 스레드가 뮤텍스를 획득하면 다른 스레드는 해당 자원에 대한 접근을 할 수 없다.

 

세마포어(Semaphore)는 뮤텍스와 비슷한 역할을 하지만, 보다 복잡한 동기화 작업을 수행

세마포어는 접근 가능한 자원의 수를 나타내는 값을 가지고 있으며, 이 값이 0일 경우 다른 스레드가 자원에 접근할 수 없다. 스레드는 세마포어를 획득하여 자원에 접근하고, 사용이 끝나면 세마포어를 반환하여 다른 스레드가 자원에 접근할 수 있도록 한다 이러한 방식으로 세마포어를 사용하여 스레드 간의 상호 배제와 동기화를 수행할 수 있다.

 

동기화(Synchronization)는 멀티스레드 환경에서 발생할 수 있는 문제를 해결하기 위한 기술로,

여러 개의 스레드가 공유 자원을 안전하게 사용하고, 서로의 작업이 올바르게 진행될 수 있도록 조율하는 것을 말한다.

 

동시성과 병렬성의 차이

각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 합니다. 이런 방식을 시분할이라고 한다.

  • Concurrency(동시성, 병행성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴
  • Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨

유니코드

유니코드의 목적은 현존하는 문자 인코딩 방법을 모두 유니코드로 교체

 

인코딩(부호화)이란?

인코딩이란 어떤 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것

 

ASCII 문자

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

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

ASCII 문자는 1 바이트만으로 표현 가능

 

UTF-8과 UTF-16의 차이점

UTF-8 특징: 가변 길이 인코딩

바이트 순서가 고정됨

네트워크를 통해 전송되는 텍스트는 주로 UTF-8로 인코딩된다.

 

UTF-16 특징: 코드 그대로 바이트로 표현 가능

바이트 순서가 다양함

 

그래픽

비트맵(Bitmap)과 벡터(Vector)는 디지털 이미지의 종류

 

비트맵

웹 상에서 디지털 이미지를 저장하는 데에 가장 많이 쓰이는 이미지 파일 포맷 형식

래스터 그래픽(점 방식),픽셀 단위로 구성,한 지역을 차지하는 셀은 위치에 따라 다른 값을 갖는다.

 

셀 형태로 모여 있기 때문에 확대를 하면 ‘계단현상’ 또는 ‘깨짐 현상’이 발생

픽셀 하나당 색상을 가지고 있는데  이미지의 사이즈가 커질수록 용량 또한 무거워진다

ex) jpg,gif , png

벡터

이미지를 수학적인 공식으로 표현

ex) svg

 

가비지 컬렉션

프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것

JavaScript 언어는 고수준의 언어로 자동으로 해제하는 가비지 컬렉션이 내장

고수준 언어는 인간 친화적인 언어로, 인간이 이해하기 쉽고 다양한 작업을 수행하는 프로그램을 개발

컴파일러 또는 인터프리터를 사용하여 컴퓨터가 읽을 수 있는 기계어 코드로 변환

 

저수준의 언어(C 언어)

기계 친화적인 언어로 레지스터 및 메모리와 직접 상호 작용을 할 수 있기 때문에 전반적으로 빠르게 실행되는 응용 프로그램을 빌드하는 데에 사용

컴파일러 또는 인터프리러를 사용x

 

메모리 할당

JavaScript는 프로그래머 대신, 값을 선언할 때 자동으로 메모리를 할당

 

할당된 메모리 사용 (값 사용)

기본적으로 할당된 메모리를 읽고 쓰는 것을 의미

 

메모리 해제

언어 스스로 메모리가 여전히 필요한지 필요하지 않은지 판단하는 것은 비결정적인 영역이므로 

고수준 언어에 내장된 가비지 컬렉터들은 제한적인 해결책을 구현

 

가비지 컬렉션 알고리즘은 이하 2가지 알고리즘

2가지 알고리즘이 의존하고 있는 개념 => 참조

참조(reference) : 명시적이든, 암묵적이든 관계없이 메모리 관리 관점에서 어떤 객체가 다른 객체에 접근할 수 있다면 다른 객체를 참조한다고 말한다.

 

객체를 참조 => JavaScript 객체 의미 

함수 스코프(function scope)나 글로벌 렉시컬 스코프(global lexical scope)까지도 포함

 

레퍼런스 카운팅(참조 횟수 계산)

한 객체를 참조하는 변수의 수를 추적하는 방법으로 가장 단순한 형태의 가비지 컬렉션 알고리즘

 

트레이싱

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

 

mark and sweep 알고리즘

1. 루트(Roots): 일반적으로 루트는 코드에서 참조되는 전역 변수이다.

가비지컬렉터는 모든 루트의 완전한 목록을 만들어낸다.

 

2. 그런 다음 모든 루트와 그 자식들을 검사해서 활성화 여부를 표시

 

3. 마지막으로 가비지컬렉터는 활성으로 표시되지 않은 모든 메모리를 OS에 반환

 

메모리 누수

Garbage collected 언어에서 메모리 누수의 주요 원인은 예상치 못한 참조

  • 우발적으로 생성된 전역변수
  • DOM 외부에서의 참조
  • 클로저의 잘못된 사용

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'codestates > section4' 카테고리의 다른 글

Github GraphQL API로 Live Data 받아오기  (0) 2023.03.28
Unit6 - [API] GraphQL  (0) 2023.03.28
custom hook실습  (0) 2023.03.23
Unit4 - [React] 심화  (0) 2023.03.22
조 발표 순서 계산 알고리즘  (0) 2023.03.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함