Unicode - 전 세계에서 모든 문자를 컴퓨터에서 일관되게 표현할 수 있도록 설계된 산업 표준
같은 글이라도 인코딩 방식이 다를 경우 그 파일을 지원하지 않으면 읽을 수 없다. 따라서 인코딩 방식을 통일하려는 것.
인코딩 - 어떤 문자나 기호를 컴퓨터가 이용할 수 있도록 신호를 만드는 것 (이진법으로 만드는 것)
문자를 인코딩/디코딩 하는 미리 정해진 기준 - 문자열 세트, 문자셋(charset). standard charset - unicode
ASCII - 7비트 문자열 표현 인코딩. (영문 알파벳, 숫자, 특수문자, 공백문자)
UTF-8, UTF-16
Universal Coded Character Set + Transformation Format 8 bit/16bit
// utf-8: UTF-8은 유니코드 한 문자를 나타내기 위해 1byte 에서 4byte 까지 사용한다.
// 1110xxxx 10xxxxxx 10xxxxxx 에 순서대로 채워 넣는다.
// 11101100 10111101 10010100
let encoder = new TextEncoder(); // default: utf-8
// 예) '코'
encoder.endoce('코') // Uint8Array(3) [236, 189, 148] (3byte)
(236).toString(2); // 11101100
(189).toString(2); // 10111101
(148).toString(2); // 10010100
// 예) ASCII 문자 'b'
encoder.encode('b'); // Uint8Array [98]
(98).toString(2); // 1100010 (1byte)
utf-8은 1 byte 에서 4 byte 까지의 가변 인코딩이다.
ASCII 코드 - 1byte
영어 외 글자 - 2, 3byte (한글은 3)
보조 글자 - 4byte (이모지 등)
유니코드 코드 대부분(U+0000 ~ U+FFFF)을 16bit 로 표현
16진수를 있는 그래도 2진법으로 변환하여 사용, 바이트 순서(엔디언)에 따라 UTF-16의 종류도 달라짐.
한글 - 2byte
프로그램 -> 운영체제 -> 하드웨어
컴퓨터가 나오기 전 원래 프로그램의 뜻은 음악회를 말함. 여러 음악들의 집합 = 음악회
컴퓨터에서: 여러 instruction 들의 집합 -> 프로그램
운영체제는 하드웨어에게 일을 시킬 수 있도록 도와줌.
프로세스 관리(CPU), 메모리(RAM)관리, 입출력 관리(disk, network, etc), 권한 관리(컴퓨터의 파일에 마음대로 접근할 수 없도록) 등
프로그램이 시스템 자원을 사용할 수 있도록 운영체제에서 제공하는 함수(API)를 system call 이라고 한다.
Program in execution
운영체제에서 실행 중인 하나의 프로그램
사용자가 앱을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당 받아 코드를 실행. 하나의 앱이 여러개의 프로세스를 가질 수도 있다. (예 - 인터넷 윈도우를 두개 띄우면 두개의 프로세스를 생성)
CPU 하나는 한 시점에 하나의 process 밖에 실행 못함.
Single core 는 multi-process 를 할 수 는 있지만 multi-processing 은 불가
Multi-core 일 경우 multi-processing 이 가능
하나의 코드 실행 흐름
각 스레드마다 call stack 이 존재하고 각 스레드는 독립적으로 작동
두가지 이상의 작업을 동시에 처리
운영체제는 멀티태스킹을 할 수 있도록 cpu 및 메모리 자원을 프로세스마다 적절히 할당해주고 병렬로 실행시킴.
프로세스 내부의 멀티태스킹 - 멀티스레드
운영체제 내부의 멀티태스킹 - 멀티프로세스
메모리 공간과 시스템 자원 소모가 줄어듬
스레드 간의 통신은 heap 메모리를 사용 - 프로세스간 통신 방법(IPC)에 비해 간단
시스템의 throughtput 향상, 프로그램 응답시간 단축
여러 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 스레드로 나누어 수행
멀티 프로세스 - 공유하는 자원 x
멀티 스레딩 - heap 을 공유하기 때문에 동기화 작업이 필요(작업 처리 순서 제어, 자원 접근 제어)
관련 키워드 - 데드락, 뮤텍스, 세마포어
동시에 돌릴 수 있는 스레드의 수는 컴퓨터의 있는 코어 갯수로 제한되므로, OS 는 각 스레드에 시간을 나눠주면서 여러 스레드를 돌아가면서 실행시켜야 한다.(시분할)
병행성
병렬성 - 멀티코어 환경에서 여러개의 스레드가 실제로 동시에 수행 되는것.
프로그램에서 더 이상 쓰지 않는 메모리를 자동으로 찾아 해제하는 기능
Java, C#, Javascript 등
대표적인 가비지 컬렉션의 방법
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
고속의 데이터 임시 저장소.
더 느린 기본 스토리지 계층에 액세스해야 하는 필요를 줄임으로써 연산속도를 빠르게 만든다.
캐시 데이터는 일반적으로 RAM 과 같이 빠르게 액세스할 수 있는 하드웨어에 저장되며 소프트웨어 구성 요소와 함께 사용될 수도 있다.
https://aws.amazon.com/ko/caching/
https://codex.cs.yale.edu/avi/os-book/OS10/regular-exercises/index-exer.html
https://parksb.github.io/article/5.html