일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- html
- CSS
- 운영체제
- 스택
- REST_API
- web
- 30daysdowoonchallenge
- 백준
- 프로그래머스
- javascript
- 생활코딩
- Til
- React
- 프로토타입
- 코드스테이츠
- 자바스크립트
- mysemester
- 자료구조
- vercel
- UX
- 해시테이블
- 카카오
- useState
- Next.js
- redux
- UI
- superstarjypnation
- 큐
- level1
- 회고
- Today
- Total
데굴데굴
TIL: 2022-11-30 본문
⚙️ 오늘 배운 주제
컴퓨터 구조, 운영체제, 문자열, 그래픽, 가비지 컬렉션
🐹 오늘의 기분
과제 없이 내리 이론만 학습한 하루였다. 상당히 어려운 개념들이 많이 나와서 한 번에 이해할 수는 없었다. 유어클래스 읽으면서 유튜브도 찾아보고 여러 블로그 글을 읽어보며 갈피를 잡아보려 했다. 예전에 읽었던 글에서 운영체제 공부의 중요성을 강조했던 것이 생각나서 제대로 이해하고 싶은 마음이 컸다. 오늘 배운 내용도 마냥 쉬운 건 아니었지만 운영체제 과목의 전체적인 내용에 비하면 정말 빙산의 일각이라는 것을 알고 있기 때문에 괜시리 막막해졌다. 배우면 배울수록 공부할 것 투성이임을 제대로 느끼고 있다. 조급해하지말고 꾸준히 해나가자..! ㅠㅜ
🗝 키워드
CPU, ALU, 레지스터, 입출력장치, 메모리, 주기억장치, RAM, ROM, 보조 기억 장치, 캐시 메모리, 프로세스, 스레드, 싱글 스레드, 멀티 스레드, 프로세서, 가비지 컬렉션, 이벤트 루프, 참조, 레퍼런스 카운팅, 트레이싱
🗣 스스로에게 설명
컴퓨터 = 하드웨어 + 소프트웨어
하드웨어: 입출력 장치, 중앙처리장치(CPU), 기억장치(주기억장치, 보조 기억장치)
소프트웨어: 하드웨어 위에서 하드웨어를 제어하며 작업을 수행하는 프로그램
폰 노이만 구조
입력 장치
컴퓨터가 처리할 수 있는 형태로 데이터와 명령 받아들이는 물리적인 장치
키보드, 마우스, 스캐너, 타블렛, 조이콘 등
출력 장치
처리된 데이터를 사람이 이해할 수 있는 형태로 출력하는 물리적인 장치
프린터, 모니터 등
중앙처리장치
산술/논리 연산 장치(ALU) - 산술, 논리적 연산 수행
레지스터 - CPU의 내부 메모리, CPU에서 사용하는 데이터를 일시적으로 저장
제어 장치 - 프로그램에 따라 명령과 제어 신호 생성, 각종 장치의 동작 제어
CPU
기능
명령어와 데이터에 관련
명령어 인출 및 해독 -> 모든 명령어들에 대하여 공통적으로 수행
데이터 인출 및 처리, 쓰기 -> 명령어에 따라 필요할 때만 수행
명령어는 op-code와 operand로 구성
op-code: 각 명령어의 실행 동작 구분하여 표현
operand: 명령어의 실행에 필요한 자료나 실제 자료의 저장 위치
fetch instruction - decode instruction - execute instruction - write instruction (수행 결과 기록, log)
CISC (Complex Instruction Set Computer): 하나의 기능에 해당하는 하나의 명령, 여러 사이클, 복잡한 마이크로 프로그램 구조
RISC (Reduced Instruction Set Computer): 컴퓨터 내부적으로 사용하는 명령어 세트, 하나의 사이클, 복잡한 컴파일러 구조
*파이프라이닝: 명령어를 순차적으로 처리하는 곳에 적용되는 기능, 하나가 실행되는 도중에 다른 것도 실행
*슈퍼스칼라: cpu 내부에 파이프라인을 여러 개 설치해 동시 처리가 가능하게 한 것 (?)
산술/논리 연산 장치(Arithmetic Logic Unit, ALU)
가산기, 보수기, 누산기, 기억 레지스터, 데이터 레지스터 등으로 구성
읽어온 데이터는 레지스터에 저장
레지스터
CPU 안에 있는 기억 장치
처리 속도가 엄청 빠르다
범용 레지스터 - 산술 연산 논리장치에 의해 사용됨
전용 레지스터 - PC 등 특수 복적에 사용
명령 레지스터 IR (Instruction Register): 현재 수행 중에 있는 명령어 부호 저장
PC (Program Counter): 명령이 저장된 메모리의 주소를 가리킴
AC (Accumulator): 산술 및 논리 연산의 결과를 임시로 기억
제어 장치 (Control Unit, CU)
프로그램 계수기 (program counter) - 프로그램 수행 순서 제어
명령 레지스터 (instruction register)
명령 해독기 (instruction decoder) - 명령 레지스터에 수록된 명령 해독
구현 방식: 고정 배선 제어 (hardwired), micro program
hardwired = 고속 처리, 고가, RISC 시스템에 적용
micro program = 속도 낮고 가격 저렴, CISC에 적용
저장 장치 (Memory)
프로그램 수행에 필요한 정보에 비해 레지스터의 용량이 너무 작음.
주 기억 장치 - 정보를 저장해두었다가 필요할 때 읽어들이는 저장소 RAM, ROM
보조 기억 장치 - 주 기억 장치를 보존하기 위한 것. 자기 디스크, 광 디스크, 플래쉬 메모리
전류를 흐르게도 하고 흐르지 않게도 하는 반도체의 특성 이용
메모리는 시스템이 꺼지게 되면 지워짐.
보조 기억 장치는 휘발되지 않음
읽는 속도도 차이남
레지스터 메모리
캐시 메모리
주기억장치
보조기억장치
메모리의 성능은 속도가 빠를 수록 좋다.
리프레시 시간, 메모리 엑세스 시간, 사이클 시간
주 기억 장치
RAM (Random Access Memory)
RAM의 크기는 프로그램 수행 속도에 영향을 줌
CPU에서 직접 접근이 가능한 유일한 저장 장치
SRAM(리프레쉬 X, 전력 소모 적음, but 비쌈), DRAM(리프레쉬 O, 저가)
ROM (Read-Only Memory)
읽을 수만 있는 장치, 전원이 끊겨도 내용이 보존됨
보조 기억 장치
자기 디스크
FDD, HDD
원판 표면의 철 입자의 방향으로 0과 1을 표현
광 디스크
빛의 반사를 이용하여 자료를 읽어내는 저장 매체
CD, DVD, Blu-Ray
플래시 메모리
전자적으로 데이터를 지우고 쓸 수 있는 비휘발성 메모리
USB, SSD (SSD가 훨씬 빠르다)
Cache Memory
CPU 내외에 존재하는 메모리
주기억장치와 CPU 간의 데이터 속도 향상을 위한 버퍼 역할
레지스터에서 처리가 완료된 데이터를 잠깐 갖고 있는 역할
블록 사이즈, 워드 사이즈
Cache hit
Cache Miss
원하는 데이터가 cache 메모리에 있을 확률 hit ratio
성능 결정 요소
- cache 크기 - hit ratio와 반비례 관계
- 인출 방식 - 요구 인출, 선 인출
- 쓰기 정책 - write-through, write-back
- 교체 알고리즘 - cache miss 발생 시 기존 메모리와 교체하는 방식
- 사상 기법 - 캐시 내의 위치 지정, mapping, direct mapping, associative mapping
운영체제
하드웨어에게 일을 시키는 주체
처리능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축
- 프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원 관리
- 자원의 스케줄링 기능 제공
- 편리한 인터페이스 제공
- 각종 하드웨어와 네트워크 관리 제어
권한과 사용자 관리
응용 프로그램이 운영체제를 통해 컴퓨터에게 일을 시키려면 조작 권한을 부여받아야 함.
시스템 콜: 응용 프로그램이 시스템 자원을 이용할 수 있도록 운영체제 차원에서 다양한 함수를 제공하는 것
프로세스
프로그램이 실행 중인 상태
특정 메모리 공간에 프로그램의 코드가 적재되고 cpu가 해당 명령어를 하나씩 수행하고 있는 상태
- 유저 메모리 영역 관리 (Virtual Address Descriptors)
- 핸들 테이블 (Handle Table) - 커널 객체 포인터 정보를 배열 형태로 갖고 있음
- 독립적인 메모리 공간 - 가상 메모리. 페이징 기법으로 고유한 메모리 사용하도록 함(윈도우)
페이징 기법: 메모리 공간을 블록으로 나눠 차곡차곡 넣어놓음
자원 소유의 단위 - 프로세서 단위로 할당받아 관리되어야 함
디스패칭 단위 - 하나의 프로그램이 운영체제로부터 cpu의 자원을 일정 기간 동안 할당받아 명령어 실행, 스레드
Run, Ready, Waiting (입출력의 사건 기다리는 상태)
processor: 프로그램을 수행하는 하드웨어 유닛, 데이터 포맷을 변환하는 역할을 수행하는 데이터 처리 시스템
process: 작업의 목록 그 자체를 일컬음
스레드
명령어가 CPU를 통해서 수행되는 객체의 단위
같은 프로세스 내에 있는 스레드는 같은 주소 공간에 존재
가상 CPU, 수행 코드, 처리 데이터로 구성
스레드는 다른 스레드와 독립적으로 동작
싱글 스레드와 멀티 스레드
싱글 스레드
프로세스가 단일 스레드로 동작하는 방식
일련의 처리를 단일 스레드로 직렬 처리하는 프로그래밍 방식
장점: 동기화 신경쓰지 않아도 됨. context switch 작업도 요구하지 않음. 프로그래밍 난이도가 쉬움.
단점: 여러 개의 CPU를 활용하지 못함. 부가 인프라가 필요함. 에러 처리를 못하는 경우 멈춰버리게 됨.
멀티 스레드
하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것.
여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행한다.
장점: 작업을 분리해서 수행하므로 실시간 응답 가능, 훨씬 효율적
단점: 주의 깊은 설계 필요, 디버깅 까다로움. 자원 공유의 문제 발생, 한 스레드에서 문제가 발생하면 전체에 영향, 데드락, 뮤텍스, 세마포어
문자열
유니코드: charset(인코딩과 디코딩의 기준)의 국제 표준
ASCII 문자: 7비트로 모든 알파벳 표현. 52개의 영문 알파벳 대소문자, 숫자 10개, 특수문자 32개, 공백문자 하나
UTF-8과 UTF-16의 차이
Universal Coded Character Set + Transformation Format
1. UTF-8: 가변 길이 인코딩
유니코드 한 문자를 나타내기 위해 1 byte에서 4 bytes까지 사용한다
코 = U+CF54(16진수, HEX)
1100-1111-0101-0100
1110xxxx 10xxxxxx 10xxxxxx
11101100 10111101 10010100
let encoder = new TextEncoder();
encoder.encode('코') // Uint8Array(3) [236, 189, 148]
(236).toString(2) // '11101100'
(189).toString(2) // '10111101'
(148).toString(2) // '10010100'
ASCII 코드의 경우에는 1바이트만으로도 표현 가능
네트워크를 통해 전송되는 텍스트는 주로 UTF-8로 인코딩됨.
사용된 문자에 따라 더 작은 크기의 문자열을 표현할 수 있기 때문
영어 외 글자는 2byte, 3byte / 보조 글자는 4byte (ex.이모지)
바이트 순서가 고정되어 있다는 특징 또한 존재
2. UTF-16: 다양한 바이트 순서, 코드 그대로 바이트로 표현 가능
유니코드 대부분을 16bits로 표현함. (2 Bytes)
이진법으로 표현된 문자를 16bits로 그대로 사용. 바이트 순서에 따라 UTF-16의 종류도 달라짐.
여기서 한글은 2바이트를 차지함
그래픽
비트맵과 벡터 - 서로 상반된 방식으로 이미지를 표현.
비트맵 Bitmap
대표 포맷: jpg, gif, png, bmp, psd
웹 상에서 디지털 이미지를 저장하는 데에 가장 많이 쓰이는 이미지 파일 포맷 형식
점 방식, 이미지의 각 점들을 격자형의 픽셀 단위로 구성, 셀은 위치에 따라 다른 값을 갖는다.
확대하면 계단현상, 깨짐 현상이 발생. 경계가 뚜렷하지 않다는 특징
컴퓨터에게 부담을 덜 준다.
픽셀 하나 당 모두 색상 값을 갖고 있어 사이즈가 커질수록 용량 또한 무거워짐.
벡터 Vector
대표 포맷: svg, ai
로고, 일러스트처럼 제품에 적용되는 이미지에 적합
비트맵과는 완전히 다른 방식으로 이미지 표현
이미지를 수학적인 공식으로 표현
점과 점을 연결해 선 표현, 선과 선 연결하여 면 표현.
아무리 확대해도 깨지지 않음.
비트맵에 비해 컴퓨터에게 부담을 가하는 방식.
도형, 글자 등을 그리는 작업에 사용됨
사이즈를 키워도 용량에는 변화 X
가비지 컬렉션
프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것
객체가 생성되었을 때 자동으로 메모리를 할당하고 필요하지 않다면 자동으로 해제
저수준 언어 (C) 같은 경우에는 메모리 할당과 해제를 개발자가 직접 해주어야 함
JavaScript와 같은 고수준 언어에서는 가비지 컬렉션이 있어 이를 신경쓸 필요가 없다.
메모리 생존주기
- 개발자가 필요할 때 할당
- 할당된 메모리를 사용
- 메모리가 더 이상 필요하지 않으면 해제
참조 개념이 사용됨
레퍼런스 카운팅 (참조 횟수 계산)
가장 단순한 형태의 가비지 컬렉션 알고리즘
한 객체를 참조하는 변수의 수를 추적
트레이싱
한 객체에 flag를 두고 사이클마다 flag 표시 후 삭제
mark and sweep
루트에 닿을 수 없는 것들은 가비지로 판단하여 지운다.
'Lesson > TIL' 카테고리의 다른 글
TIL: 2022-12-02 (0) | 2022.12.02 |
---|---|
TIL: 2022-12-01 (0) | 2022.12.01 |
TIL: 2022-11-29 (0) | 2022.11.29 |
TIL: 2022-11-28 (0) | 2022.11.28 |
TIL: 2022-11-25 (0) | 2022.11.25 |