Chapter1. 컴퓨터 구조
Chapter1-1. 컴퓨터의 기본 구조
1.컴퓨터의 구조 및 기능에 대해 학습합니다.
Chapter1-2. CPU와 Memory
2.데이터를 처리하는 역할인 CPU의 구조 및 성능에 대해 학습합니다.
3.명령어와 명령어 수행 과정, 처리 방식에 대해 학습합니다.
4.데이터를 저장하는 기능을 수행하는 Memory의 분류별 특성에 대해 학습합니다.
5.메모리의 성능 및 종류, 캐시 메모리에 대해 학습합니다.
Chapter2. 운영체제(OS)
Chapter2-1. 운영체제
6.운영체제의 개념 및 목적, 운영체제의 기능에 대해 학습합니다.
Chapter2-2. 프로세스
7.프로세스의 주요개념 및 특징에 대해 학습합니다.
8.프로세서의 특징 및 프로세스와 프로세서의 차이점에 대해 학습합니다.
Chapter2-3. 스레드
9.스레드의 주요개념 및 특징, 종류에 대해 학습합니다.
10.싱글스레드와 멀티스레드의 특징을 학습하고, 장단점 및 차이점을 학습합니다.
Chapter3. 문자열과 그래픽
11.문자열을 다루는 기본적인 방식을 학습합니다.
12.문자열의 종류 및 특징에 대해 학습합니다.
13.그래픽의 기본적인 개념에 대해 학습합니다.
14.비트맵(래스터)과 벡터 이미지의 특징 및 차이점에 대해 학습합니다.
Chapter4. 가비지 컬렉션과 캐시
15.가비지 컬렉션은 무엇이고, 가비지 컬렉션을 가진 언어가 무엇인지 학습합니다.
16.대표적인 가비지 컬렉션의 방법에 대해 학습합니다.
17.캐시의 개념과 작동 원리에 대해 학습합니다.
18.캐시의 장점과 적용 예제에 대해 학습합니다.
1.컴퓨터는 입출력장치, 중앙처리장치(CPU), 기억장치 등으로 구성된 하드웨어와 하드웨어를 제어하며 작업을 수행하는 소프트웨어가 합쳐진 형태이다.
2.CPU는 산술/논리 연산 장치(ALU), 제어 장치와 레지스터로 구성되어 있다.
산술/논리 연산 장치는 캐시나 메모리로부터 읽어 온 데이터는 레지스터(Register)라는 CPU 전용의 기억장소에 저장되며, ALU는 레지스터에 저장된 데이터를 이용하여 덧셈, 곰셈 등과 같은 산술 연산을 수행한다.
제어 장치는 CPU가 자신 및 주변기기들을 컨트롤하는 장치로, 프로그램의 수행 순서를 제어하는 프로그램 계수기(program counter), 현재 수행중인 명령어의 내용을 임시 기억하는 명령 레지스터(instruction register), 명령 레지스터에 수록된 명령을 해독하여 수행될 장치에 제어신호를 보내는 명령해독기(instruction decoder)로 이루어져있다.
3.명령어는 읽기, 해석, 실행, 기록의 순서로 작동된다.
1.읽기(Fetch Instruction, FI): 메모리에서 명령을 가져온다.
2.해석(Decode Instruction, DI): 명령을 해석.
3.실행(Execute Instruction, EI): 명령을 수행.
4.기록(Write Back, WB): 수행한 결과를 기록.
4.메모리 분류에는 레지스터, 캐시메모리, 주기억장치, 보조기억장치가 있으며 레지스터에서 보조기억장치까지 순서대로 이동할수록 저장 용량은 커지며 속도는 느려지고 가격은 낮아지는 차이점이 있다.
5.메모리의 성능은 엑세스라고 부르는 10억분의1초를 기준으로 메모리 속도를 비교하며 빠를 수록 좋은 성능을 가졌다고 할 수 있다. 메모리의 종류로는 주기억장치(RAM,ROM), 보조기억장치(자기 디스크, 광 디스크, 플래시 메모리), 캐시 메모리가 있으며 캐시 메모리는 메인 메모리의 일정 블록 사이즈의 데이터를 담아 두었다가 CPU에 워드 사이즈 만큼의 데이터를 전송하게 되는데 블록/워드 사이즈의 크기가 클 수록 Cache의 Hit Ratio율이 낮아지기 때문에 성능이 좋아진다.
6.운영체제의 목적은 처리능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축 등 여러가지가 있으며 목적만 봐도 알 수 있는 것 처럼 이용의 전반적인 부분을 다루고 있다. 대표적인 기능은 다음과 같다.
1.프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원을 관리한다.
2.자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능을 제공하는데 스케줄링이란
어떤 자원을 누가, 언제, 어떤 방식으로 사용할지를 결정해주는 것을 뜻한다.
3.사용자와 시스템 간의 편리한 인터페이스를 제공한다.
4.시스템의 각종 하드웨어와 네트워크를 관리하고 제어한다.
7.프로세스는 프로그램이 실행 중인 상태로 특정 메모리 공간에 프로그램의 코드가 적재되고 CPU 가 해당 명령어를 하나씩 수행하고 있는 상태를 의미하는데 하나의 어플리캐이션이 여러개의 프로세스를 만들기도 한다.
8.프로세스는 프로세서에 의해 실행 중인 프로그램을 의미하며 프로세서는 데이터 포맷을 변환하는 역할을 수행하는 데이터 처리 시스템을 의미한다.
9.스레드는 명령어가 CPU 를 통해서 수행되는 객체의 단위로 프로세스에는 1개 이상의 스레드가 존재하며 가상 CPU, 수행 코드, 처리 데이터로 구성된다.
10.싱글스레드는 동기화에 대한 걱정 없이 프로그래밍을 할 수 있어 난이도가 쉽고 메모리를 적게 사용하며 개발에도 편리하지만 하나의 코어밖에 사용하지 못해 최적화가 어렵고 연산량의 높은 작업이 들어온 경우 그 작업이 끝나기 전까지 다른 작업을 수행할 수 없으며 에러 처리를 하지 못한 경우 멈춰버리게 되는 단점이 있으며
멀티스레드는 하나의 작업이 진행중이라도 다른 스레드를 이용해 실시간 응답이 가능하며 작업을 여러 프로세스에서 동시에 수행할 수 있는 장점이 있지만 단일스레드가 아니기 때문에 상호작용을 고려해야 해서 프로그래밍의 난이도가 높으며 디버깅이 까다롭고 자원 공유의 문제, 문맥 교환의 문제등의 처리가 어렵다.
11.문자열은 기본적으로 유니코드를 이용해 사용한다. encoder.encode()로 유니코드 10진법 숫자를 받을 수 있으며 ().toString(2)를 사용해 이진법 값을 받을 수 있다.
12.문자열의 종류는 ASCII, UTF-8, UTF-16가 대표적이며
ASCII는 영문 알파벳을 사용하는 대표적인 문자 인코딩으로 7 비트로 모든 영어 알파벳을 표현할 수 있으며 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자를 포함한다.
UTF-8은 유니코드 한 문자를 나타내기 위해 1 byte(= 8 bits)에서 4 bytes까지 문자의 크기에 따라 가변적으로 사용하기 때문에 네트워크를 통해 전송되는 텍스트는 데이터를 아끼기 위해 주로 UTF-8로 인코딩되며 바이트 순서가 고정된다는 특징이 있다.
UTF-16은 니코드 코드 대부분(U+0000부터 U+FFFF; BMP) 을 16 bits로 표현하므로 UTF-8에서 한글이 3바이트인 것에 비해 2바이트로 더 적은 데이터를 차지한다.
13.그래픽에는 일반적으로 비트맵과 벡터로 표현할까..?(배운게 그래픽 내부에 비트맵과 벡터라 둘 밖에 비교할 수가 없다)
14.비트맵은 하나의 픽셀단위로 색을 지정해 이미지를 만드는 방식이며 벡터는 일정한 형태의 공식으로 표현하는 방식이다. 이를 통해 비트맵은 규모가 커질수록 데이터가 커지는 반면 벡터는 규모와는 상관없이 내부 공식의 크기에 따라 데이터의 크기가 결정된다.
일반적으로 사진과 같은 다채로운 색이 자주 사용되는 경우에는 비트맵이 더 유리하며 로고, 일러스트처럼 특정 색들의 조화로 만들어지는 이미지에는 벡터가 유리하다.
15.가비지 컬렉션은 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것으로 자바, C#, 자바스크립트 등의 언어에서 가비지 컬렉션을 사용한다.
16.가비지 컬렉션은 대표적으로 트레이싱과 레퍼런스 카운팅이 있는데
트레이싱은 모든 객체를 추적해 사용중인지 아닌지를 mark를 통해 확인한 후 마크가 제거된(사용하지 않는) 객체를 삭제해 메모리를 해제하며
레퍼런스 카운팅은 객체를 참조하는 변수를 모두 추적한 후 레퍼런스 카운트가 0(참조하는 변수가 없다면)이 되면 메모리를 정리한다.
17.캐시는 많은 시간이나 연산이 필요한 작업의 결과를 저장해두는 것을 의미하며 일시적인(temporarily) 데이터를 저장하기 위한 목적으로 존재하는 고속의 데이터 저장 공간이다.
일반적으로 RAM처럼 빠르게 접근할 수 있는 하드웨어에 저장되며 느린 작업의 요구를 대체해 데이터 검색의 성능을 높이며 일시적인 저장이라는 특성을 가지기 때문에 영구적인 데이터베이스와는 차이를 보인다.
18.캐시의 장점은 다음과 같으며 일반적으로 클라이언트에서는 HTTP캐시 헤더, 브라우저 / 네트워크에서는 DNS 서버, 캐시 해더 / 서버 및 데이터베이스에서는 키-값 저장소, 로컬 캐시등에 사용된다.
1.애플리케이션 성능 개선
2.데이터베이스 비용 절감
3.백엔드 부하 감소
4.예측 가능한 성능
5.데이터베이스 핫스팟 제거
6.읽기 처리량 증가
점점 하루 수업량에 지나치게 많은걸 때려박는 만행이 반복되고있다..
제발 나눠서 진행해!!!!
