경일 메타버스 20220421 3주차 4일 수업내용.
https://docs.google.com/document/d/1ecFqrokNqys-9v8mV-8dUVDk130AOqbXXX62YPLMtXU/edit
#1 컴퓨터 동작 원리
- Memory / IO / CPU
- Memory : 데이터 저장 공간
- Little Endian / Big Endian
- Memory Hierarchy
- IO : Input and Output
- Input : User -> Computer
- Output : Computer -> User
- CPU : 계산
- ALU : 계산
- Register : 메모리
- Control Unit : 나머지 부품 제어
- Computer Architecture
- Harvard / Von 노이만 구조
- OS : 컴퓨터 자원을 관리
- Process / Thread
- Code / Data / Heap / Stack
- OSI 7 Layer
- Application : 프로그램 간 데이터 통신
- Presentation : 데이터 암호화 / 복호화
- Session : 세션 연결 및 해제
- Transport : 데이터 전송
- Network : 컴퓨터 식별
- Data Link : 경로 식별
- Physical : 비트 전송 방식
#2 프로그래밍 언어
- 내 생각을 컴퓨터에게 전할 수 있는 도구 => 프로그래밍 언어
- Type / Control Statement / Function
- Core / Library
순차적으로, 아래에서 위로 읽고 위에서 아래로 저장.
CPU register / cache / mainMemory / diskCache / hardDisk
CPU는 레지스터(register)와만 관여(작업)
> - 나눈 이유 : 경제상 이유; 위로 갈수록 비싸다.
> - 소켓 프로그래밍 : 서버 프로그래머들이 사용함.
> - 계층대로만 로드 연산.
산술 논리 유닛 (ALU) : 계산
레지스터 (Register) : 저장
제어장치 (Control Unit) : 나머지 부품 제어
> - 현재 컴퓨터의 한계 : 발열
> - CPU는 지금도 충분한 성능을 가지고 있다. 많은 병목 현상의 이유는 결국 메모리의 한계.
컴퓨터의 여러 구성요소를 배치하는 방법
폰 노이만 구조, 하버드 구조
운영체제(OS)의 역할 - 하드웨어 및 시스템 자원의 관리, 하드웨어 자원을 사용할 수 있도록 관리해주는 것
- 정적 : 한번 정해놓으면 변하지 않고 계속 유지되는 성질
- 동적 : 프로그램 실행 중, 끊임없이 변하는 성질
- 멀티 스레드의 문제 (Race Condition / Data Race)
복수의 스레드가 같은 메모리에 동시 접근 (메모리의 공유), 오류가 발생한다.
스레드 간의 경쟁이 문제이기에, Race Condition 혹은 Data Race라 불린다.
- 해결을 위해 동기화가 필요하다
- ex) mutex를 잠근다 : mutex(상호 배제 영역, mutual Exclusion)
스파게티 코드 : 어셈블리어를 쓰면서 사람들이 JMP(jump)를 남용해서 코드의 순서가 많이 꼬이게 되었다. 그 꼬인 모습을 스파게티 코드라 불렀다.
버그 : 컴퓨터가 매우 컸을 때, 나방이 컴퓨터에 들어가 고장이 났다. 이를 보고 버그로 인해 오류가 났다, 해서 오류를 버그라 부르기 시작했다.
마거릿 헤밀턴 : 최초로 어셈블리어로 우주선을 쏘아 보낸 NASA의 프로그래머. 여성.
데니스 리치 : C언어의 창시자.
기계어
Assembly
C, C++ -<—여기까지 메모리 제어 가능 : Native language
Java, C#
javascript, python
JMP 등으로 인한 스파게티 코드를 막기 위한 언어 - 구조적 프로그래밍
if, for등의 구문
절차지향 프로그래밍 Procedural Programming
함수 / 서브루틴 / 프로시저
C : 드라이버 등에 아직 많이 사용됨
비트 bit : Binary Digit의 준말
바이트 Byte : 8bit
word : 16bit (일반적)
Halfword : 32bit (”)
Longword : 64bit (”)
Type 타입
비트를 해석하는 방법 + 그에 적용할 수 있는 연산
- Primitive Type / Built-in Type : 언어 자체가 기본적으로 제공하는 타입 ex) C++의 int, float 등
- User-defined Type : 구조체 등, 사용자의 필요에 따라 정의하는 타입
Control Statement 제어문
if / else / switch
for / while / do while
ex)
// c, c++, c#
for (int i = 0; i < 5; ++i)
{
}
// python
for i in range(5):
- 함수의 return;
실행의 오류 판별; 문제 없으면 0 반환, 있으면 다른 수를 코드로 반환
ex) int a = 10/0; // 코드 -1242...
int a = 10/1; // 코드 0
Core
언어의 핵심 ⇒ 문법
변수, 조건문, 반복문, 함수,
구조체, 열거형, 배열, 포인터,
공용체, 매크로, 타입 재정의
Library
함수의 모음
언어를 배울 때 가장 먼저 참고할 것 : Reference (영어 추천)
C++ → cppreference.com
언어는 계속 새로운 버전이 나온다.
프로그래머라면 주언어가 필요 - 계속 변화를 트래킹할 필요가 있다.