전체 글 118

1픽셀의 바이트

1. 개요 오늘은 1픽셀의 바이트 크기를 알아보겠습니다. 2. 픽셀? 픽셀은 이미지를 이루는 가장 작은 단위를 말하며, 픽셀은 이미지를 이루는 점과 같습니다. 모니터 해상도에서 보통 1920x1080의 뜻은 가로 1920 로 1080의 픽셀이 모여있다는 뜻입니다. 참고로 1920X1080 = 2,073,600개의 픽셀이 모여있습니다. 그러므로 픽셀은 이진수로 표현하며 그 조합을 통해 흑백, 컬러 영상 및 이미지를 표현합니다. 3. 이진 영상 디지털 이미지 중 간단한 형태를 나타내며 이진 영상은 각 픽셀이 1bit로 이루어져 있으며, 각 픽셀은 오직 밝음(1), 어두음(0) 두 가지만을 표현합니다. 4. 흑백 영상 각 픽셀의 밝기 값을 0~255 사이 값으로 표현한 이미지이며, 8bit = 1byte의 메..

TCB

1. 개요 오늘은 TCB에 대해 알아보도록 하겠습니다. 2. TCB? Thread Control Block의 약자로 쓰레드를 관리해주는 블록이다. 어디서 많이 본것이 있을 것이다. Process Control Block (PCB) 이 생각나는 블록이다. https://chogyujin-study.tistory.com/37 PCB, Context Switching 오늘은 PCB랑 Context Switching 에 대해 공부해보겠습니다. Process Metadata - CPU들은 각 프로세스들이 누군지 알아야 관리가 가능합니다. 프로세스들의 특징을 갖고있는 것이 Process Metadata입니다. Process I chogyujin-study.tistory.com 그럼 TCB는 왜 생겨났을까?, 답은 ..

가상메모리 관리

1. 개요 오늘은 가상메모리와 가상메모리의 관리에 대해 공부하겠습니다. 2. 가상메모리란? 가상메모리는 운영체제에서 크고 느린 장치인 디스크를 어떻게 메모리에 다 담을지 또한 메모리 용량이 부족할지? 그리고 어떻게하면 메모리의 보안을 유지할수있을지 많은 선배 개발자분들이 고민을 하였다. 그 결과 일부 페이지들을 스왑 아웃하는 기능을 사용하여 멀티 프로그래밍과 사용 편의성 등의 이유로 실제 물리 메모리보다 더 많은 용량의 메모리가 필요하다고 판단, 그것이 가상 메모리가 되었다. Non-Contiuous allocation 사용자 프로그램을 block으로 분할하여 적재/실행 paging/segmentation system 가상 메모리 관리의 목적 가상 메모리 시스템 성능을 최적화 cost model, 다양한..

캐시메모리와 지역성 그리고 캐시라인

1. 개요 오늘은 캐시 메모리, 지역성, 캐시라인에 대해서 공부하겠습니다. 2. 캐시? 캐시 메모리란(Cache Memory)? 주기억장치에서 자주 사용하는 프로그램과 데이터를 저장해놓고 속도를 빠르게 하는 메모리 속도가 빠른 장치와 느린 장치간의 병목 현상을 줄여주며, 메인 메모리의 CPU사이에 위치한다. 캐시가 효율적으로 동작하기 위해서는 CPU가 참조할 정보에 대한 예측이 잘 되어있어야 한다. 즉, 캐시의 적중률(Hit-rate)을 극대화 시키는것이 포인트이다. 이때 나오는 개념이 캐시의 지역성(Locality) 3. 캐시의 지역성? 그렇다면 캐시의 지역성(Locality)란? 데이터에 대한 접근이 시간적-공간적으로 가깝게 발생하는 것을 뜻한다. 이때 프로그램은 정보를 균일하게 참조하는 것이아니라,..

Race Condition 경쟁상태

1. 개요 오늘은 OS에 경쟁상태 Race Condition에 대해서 공부하도록 하겠습니다. 2. Race Condition(경쟁상태)? 경쟁상태란 두 개 이상의 cocurrent한 프로세스(혹은 스레드)들이 하나의 자원(리소스)에 접근하기 위해 경쟁하는 상태를 말합니다. 3. Critical Section(임계영역) 통장에 돈이 100만원 있습니다. 지난달에 친구에게 빌렸던 50만원을 갚으려고 이체를 하고 있었습니다. 계좌번호와 금액을 입력하고 송금 버튼을 눌렀습니다. 그런데, 오늘 마침 카드값 70만원이 빠져나가는 날입니다. 정말정말 우연히 저의 이체와 카드값 이체가 동시에 일어났습니다. 그런데 두 이체가 통장에 있는 잔액을 확인 했을 때 100만원으로 이체들이 모두 성공해 버렸습니다. 은행에 비상이..

스마트 포인터의 new와 make의 차이

1. 개요 오늘은 C++의 스마트 포인터의 new와 make의 차이를 공부하겠습니다. 2. new VS make 스마트 포인터를 동적 할당하는 방식은 new랑 make_unique 등 입니다. 하지만 스마트포인터를 동적할당할때 new보다는 make를 사용하여 할당을 하는것이 매우 효과적이라고 합니다. make는 C++14부터 나온 기법으로 스마트포인터의 동적할당을 담당하고있습니다. 그럼 new보다 나은점을 알려드리겠습니다. 3. new 보다 나은점 1. 객체의 형식이 되풀이 되지 않는다. class Base { public: Base(){} ~Base(){} }; int main() { auto p1 = make_unique(); unique_ptr p2(new Base); } 중복을 피하라는 소프트웨어..

벡터의 내적으로 라디안 및 디그리 구하기

1. 개요 안녕하세요 오늘은 벡터의 내적으로 라디안 및 디그리를 구하는 방식을 알아 보겠습니다. 2. 내적의 공식 내적의 공식은 벡터 A와 B과 있으면 2D방면에서 (Ax*Bx) + (Ay*By)입니다. 하지만 다른 방식으로 구할수도 있습니다 바로 벡터의 크기 입니다. |A||B|cosΘ 입니다. 벡터크기는 하나당 sqrt(Ax^2+Ay^2)으로 볼수 있습니다. 그리고 cos인의 그래프를 보면 다음과 같습니다. 각도가 0도면 1 90도면 0입니다. 3. 라디언 구하기 그래서 라디언을 구하는 방식은 다음과 같습니다. acos(A+B/|A|*|B|) 입니다. 이것을 C++로 표현하면 다음과 같습니다. double a2 = sqrt(pow(2,2)+pow(5,2)); double b2 = sqrt(pow(-2..

Inline 에 대하여

1. 개요 오늘은 C++에 inline에 대하여 알아봅시다. 2. Inline? 인라인 함수는 C++ 언어에서 코드의 효율성을 고려하여 만들어진 기능입니다. 인라인 함수를 통해 함수 호출 및 오버헤드를 감소하는 결과를 얻을수 있으며 보통 함수에 내용이 짧을 경우 사용을 합니다. 인라인 함수가 호출되면, 인라인 함수의 전체 코드가 인라인 함수 호출 시점에 삽입되거나 대체됩니다. 3. Inline 예시 기본적인 형태로는 아래와 같습니다. inline int sum(int a, int b) { return a + b; } 이 인라인 함수를 어떻게 호출하면 기존 C++처럼 호출하면 됩니다. #include #include using namespace std; inline int sum(int a, int b) ..

C++ 17 variant

1. 개요 오늘은 C++17에 variant에 대해 알아보겠습니다. 2. variant variant는 C++17에 나온 공용체입니다. 기존의 union은 문제가 있습니다. 예를들어 기존의 union을 쓸 때, double버전으로 값을 넣고 int버전으로 사용을 한다 해도 아무런 문제 없이 작동이 되었습니다. #include using namespace std; union Union { int nValue; double dValue; }; 아무런 이상없이 컴파일이 된다. 하지만 출력값이 쓰레기값이들어간건지 이상합니다. C의 공용체는 아무런 타입 검사를 수행하지 않습니다. 이 때문에 C의 공용체는 타입 -safe하지 못한다고 합니다. 저런 출력값이 나온 이유는 아무런 조치 없이 메모리에 존재하는 비트 값을..