본문 바로가기

IT/Basic

(43)
[Basic] 0.0.0.0 / 127.0.0.1 차이 0.0.0.0 127.0.0.1 차이 매우 자세히! 라우터, 서버, DHCP 서버에서의 0.0.0.0 의미와 127.0.0.1과의 차이점을 자세히 설명한 포스트입니다. mamu2830.blogspot.com '0.0.0.0' 네트워크의 의미는 바로 IP주소를 적어야 하는데, 적을 게 없을 때 쓰는 '지정된 주소 없음' 용도 사실 이미 위에서 0.0.0.0의 용도를 보셔서 느낌이 오시겠지만, 그냥 딱 짚어서 말하자면 '127.0.0.1'은 자기 자신을 가리키는 용도, 그 딱 한개뿐입니다. 하지만 '0.0.0.0'은 위에서 알려드린 것처럼 '특정한 주소를 지정하지 않음, 모든 주소'라는 의미로 다양하게 쓰였죠. IP v4 주소 0.0.0.0의 의미 IP주소는 여러분들이 흔히 아시듯이 인터넷에 접속하기 위해 ..
[Basic] SIMD performance Does rewriting memcpy/memcmp/... with SIMD instructions make sense? Does rewriting memcpy/memcmp/... with SIMD instructions make sense in a large scale software? If so, why doesn't GCC generate SIMD instructions for these library functions by default? Also, are t... stackoverflow.com these functions are much faster with SSE instructions. It would be nice if your runtime library/compiler instrins..
[Basic] Call by value, Call by reference 차이 함수 호출 방법은 크게 두가지가 있다. Call by value(값에 의한 호출) Call by reference(참조에 의한 호출) Call by value(값에 의한 호출)는 인자로 받은 값을 복사하여 처리를 한다. Call by reference(참조에 의한 호출)는 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다. 간단히 말해 값을 복사를 하여 처리를 하느냐, 아니면 직접 참조를 하느냐 차이다. Call by value(값에 의한 호출) 장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존이 된다. 단점 : 복사를 하기 때문에 메모리가 사용량이 늘어난다. Call by reference(참조에 의한 호출) 장점 : 복사하지 않고 직접 참조를 하기에 빠르다. 단점 : 직접 참조를 ..
[Basic] 런타임과 컴파일타임 차이 원문보기 런타임(Runtime)과 컴파일타임(Compiletime)은 소프트웨어 프로그램개발의 서로 다른 두 계층의 차이를 설명하기 위한 용어이다. 프로그램을 생성하기 위해 개발자는 첫째로 소스코드를 작성하고 컴파일이라는 과정을 통해 기계어코드로 변환 되어 실행 가능한 프로그램이 되며, 이러한 편집 과정을 컴파일타임(Compiletime) 이라고 부른다. 컴파일과정을 마친 프로그램은 사용자에 의해 실행되어 지며, 이러한 응용프로그램이 동작되어지는 때를 런타임(Runtime)이라고 부른다. "런타임"과 "컴파일 타임"이라는 용어는 종종 서로다른 두 가지 타입의 에러를 나타내기 위해 사용되어지곤 하는데, 컴파일 타임 에러는 프로그램이 성공적으로 컴파일링되는 것을 방해하는 신택스에러(Syntax error)나..
'undefined reference' with 'not declared' In the first case, you declare a function, but don't define it. It compiles properly, but doesn't link because there is no definition for f. Hence the linker error. 선언만 하고 정의는 하지 않았다. 컴파일은 하지만 링킹은 할 수 없다. In the second case, you attempt to call an undeclared symbol. The compiler doesn't know what f is, so it issues an error. It's a different problem from a different stage of the compilation proc..
비트연산 1반대값 0 0반대값 1 출력하려면 1^1 -> 0 0^1 ->1
Fixed Point Precision(고정 소수점) 과 Floating Point Precision(부동 소수점) 컴퓨터론 숫자표현을 어떻게 할수있을까요? 바로 두가지 방법으로 표현할 수 있답니다. 1. Fixed Point 2. Floating Point 가수부(Mantissa)는 1.xxxx 형태로 정규화를 한 뒤 가장 왼쪽에 있는 1을 제거하고 소수점 이하의 자리 값만 표현한다. 예를 들어, 13.5를 32bit 부동소수점 (float)으로 표현해보자. 13.5 → 1101.12 [진수변환] 1101.12 → 1.10112 x 23 [정규화] 부호비트는 양수이므로 0, 지수부는 3이므로 127 + 3 = 130, 2진수로 표현하면 100000102, 가수부는 1.1011에서 소수점 이하 자리만 표현하면 1011이 된다. 최종 값은 0100 0001 0101 1000 0000 0000 00002 Floating ..
[Basic] cpu, core, processor 3 Processor chip 안에는 다음과 같이 3가지 종류가 있을 수 있겠습니다. single-core processor multi-core processor multi processors 1. multi-core processor 멀티 코어 프로세서란? 전에 포스팅한 멀티 프로세싱과 헷갈릴 수 있는 용어입니다ㅎㅎ 용어 중간에 '코어'만 들어갔을뿐 그게 그거 같죠... 차이를 알아보겠습니다. 멀티 코어 프로세서는 여러 개의 작업을 보다 효율 donghoson.tistory.com 사진에서 E) multi core with shared chche 를 보면 중복되는 부분이 있다. 코어가 두개 있는 cpu이다. cpu = 2개의 코어 + chche 인 것이다. 즉, cpu state, interrupt log..
[Basic] cpu, core, processor 2 1. 컴퓨터 구조와 기능 컴퓨터 구조 컴퓨터 구조는 위에처럼 크게 4가지로 나눠서 볼 수 있습니다. CPU : 중앙처리장치. 데이터를 처리하는 역할 Memory : 데이터를 저장하는 기능을 수행 I/O : 컴퓨터와 외부장치 사이에 데이터를 교환하는 기능을 수행 System Bus : 위의 모든 컴퓨터 시스템 구성요소들을 연결하여 데이터 전송을 수행 컴퓨터 기능 컴퓨터의 기능또한 크게 4가지로 나눠서 생각해볼 수 있습니다. Data Processing : 데이터 연산 Data Storage : 데이터 저장 Data Movement : 데이터 통신, 이동 Control : 제어(명령수행, 리소스 관리 등) 2. CPU 구성 Processor chip 안에는 다음과 같이 3가지 종류가 있을 수 있겠습니다. s..
[Basic] cpu, core, processor 1 CPU(Central Processing Unit, 중앙 처리 장치) 컴퓨터는 크게 CPU, RAM, 하드디스크 정도로 구분할 수 있겠는데요. 이 요소를 사람에 비유하면 RAM은 단기기억, 하드디스크는 장기기억, CPU는 사고를 담당한다고 볼 수 있습니다. CPU의 사고는 중요한 3가지 기능을 말하는 것인데요. 그것은 기억, 연산, 제어를 말합니다. 컴퓨터를 뜯어보면 쿨러 근처에 아주 작은 칩(마이크로프로세서) 모양의 CPU가 있는데요. 그게 전체 컴퓨터의 논리적 사고를 처리합니다. 그 작은게 이 모든 것을 다한다는게 참 대단한 것 같아요. 프로세서(Processor) 컴퓨터 운영을 위해 기본적인 명령어들을 처리하고 반응하기 위한 논리회로를 말합니다. 크게 소프트웨어의 신호를 받아 다른 하드웨어 부분으로..
offset 오프셋 (Offset) offset …을 상쇄하다, 벌충하다, 상쇄하는 것 출발, 최초, 시초(outset) 분가(分家), (종족의) 지족(支族), 분지(分枝); (산의) 지맥; (일반적으로) 파생물 오프셋이란, 두 번째 주소를 만들기 위해 기준 genesis8.tistory.com
Little Endian, Big Endian big endian 가장 중요한 앞자리의 수가 메모리의 앞에서부터 차례로 저장되어 있다. little endian 가장 중요한 앞자리의 수가 메모리의 뒤에서부터 있다. 가장 중요하지 않은 뒷자리 수가 메모리의 앞에서부터 차례로 저장되어 있다.
3rd party란 3rd party, 써드파티 프로그래밍에서의 서드파티란 프로그래밍을 도와주는 plug_in 이나 library 등을 만드는 회사를 말한다. 개인 개발자나 프로젝트 팀, 혹은 업체등에서 개발하는 라이브러리 즉 제 3자 라이브러리 . 제작사에서 만든것이 아니라 다른 업체에서 만든 해당 툴 지원 라이브러리 제조사와 사용자 이외 외부의 생산자를 가리키는 뜻으로 쓰인다. - 위키 편하고 효율적인 개발을 위해, 플러그인이나 라이브러리 또는 프레임워크등을 사용하게 된다. 예로 프로그래밍 개발과 개발자 사이에 플러그인,라이브러리,프레임워크를 서드파티로 볼 수 있다. ... 이처럼 제 3자로써 중간다리 역할을 하는 것을 서드파티라고 합니다.
Memory bound vs Compute bound I/O Bound vs CPU Bound Process I/O bound Process : 연산보다, I/O 에 더 시간이 들어가는 프로세스다. CPU burst 가 작다. CPU bound Process : 연산에 주로 시간이 들어가는 프로세스다. CPU burst 가 크다./ compute bound 빽 투더 기본기 [OS 1편]. 프로세스 이 글에서는 운영체제의 기초가 되는, Process (프로세스)에 대해 정리해본다. 1. Process 란 1.1. Program vs Process Program : 디스크에 저장된 실행가능한 명령어 파일. 수동적인 개체. Process : 메모리에 올.. dailyheumsi.tistory.com Memory-bound function Mem..
volatile 변수 volatile 변수 변수를 선언할 때 앞에 volatile을 붙이면 컴파일러는 해당 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듭니다. volatile로 선언한 변수는 사용할 때 항상 메모리에 접근합니다. 즉, 이 변수는 언제든지 값이 바뀔 수 있으니까 항상 메모리에 접근하라고 컴파일러에게 알려주는 것입니다. 예를 들어 다음과 같은 반복문이 있습니다. 컴파일러는 이 코드를 최적화하여 while 반복문을 없애버리고 i에 그냥 10을 할당해버립니다(Visual Studio의 /O2 옵션, GCC의 -O3 옵션). 대략 이런 모습이 됩니다(어셈블리까지 설명하지 않고 C 코드로 대신 설명했습니다). 여기서 i를 volatile로 선언하면 반복할 때마다 항상 i의 메모리에 접근해야 하므로 컴파일러는 ..
Debug mode, Release mode, Assert Debug mode 와 Release mode -Visual studio에서 Complie 모드로는 debug 모드와 Release 모드로 나눌 수 있다. - debug 모드 : 실행 파일에 디버그와 관련된 디버깅 정보를 삽입하여 디버깅을 효율적으로 할 수 있도록 도와준다. 프로젝 gatsbyv.tistory.com 85.21 assert 사용하기 assert 매크로는 assert.h 헤더 파일에 정의되어 있으며 정해진 조건에 맞지 않을 때 프로그램을 중단합니다. 즉, assert에 지정한 조건식이 거짓(false)일 때 프로그램을 중단하며 참(true)일 때는 프로그램이 계속 실행합니다. assert(표현식) 단, NDEBUG 매크로가 정의되어 있으면 assert는 무시됩니다. 그러므로 Visual S..
크로스 컴파일(cross compile) 크로스 컴파일러(cross compiler)는 컴파일러가 실행되는 플랫폼이 아닌 다른 플랫폼에서 실행 가능한 코드를 생성할 수 있는 컴파일러이다. 크로스 컴파일러 툴은 임베디드 시스템 혹은 여러 플랫폼에서 실행파일을 생성하는데 사용된다. 이것은 운영 체제를 지원하지 않는 마이크로컨트롤러와 같이 컴파일이 실현 불가능한 플랫폼에 컴파일하는데 사용된다. 이것은 시스템이 사용하는데 하나 이상의 플랫폼을 쓰는 반가상화에 이 도구를 사용하는 것이 더 일반적이게 되었다. A 머신(host) 에서 컴파일러를 돌려서 B 머신(target) 에서 동작하는 바이너리를 만드는 것을 크로스 컴파일이라고 합니다. 이때 사용하는 컴파일러가 크로스 컴파일러 입니다. 예를들어, 맥북에 안드로이드 스튜디오를 설치하고 소스코드를 빌드한 ..
라이브러리 .a 파일 .so 파일 정적라이브러리 - 동적(공유)라이브러리에 비해 실행 속도가 빠르고 배포에 제약이 없음 - 다만, 해당 라이브러리를 필요로 하는 모든 경우 같은 정적 라이브러리가 링크되기 때문에 배포 파일들의 사이즈가 커짐 - 그러므로 하드디스크 공간도 더 차지하고 메모리도 더 많이 차지함 - 그러나 유닉스 시스템의 경우 그때그때 필요한 부분만 메모리에 로딩하는 demand paging을 사용하기 때문에 정적인 라이브러리의 메모리 사용률과 공유 라이브러리의 메모리 사용률의 차이가 크지 않음 시스템에서 응급시에 필수로 쓰이는 유틸리티와 실행속도를 극대화해야 하는 몇몇 서버를 제외하고는 대부분 동적 라이브러리를 사용한다. *shared library와 dynamic link library는 다른 개념이다 그러나 대부분의 경우..
동적 라이브러리(shared library)와 Linker/Loader 이해하기 이제는 직접 C 언어를 사용하여 개발을 할 일이 많지 않지만 C 언어로 만들어진 프로그램과 라이브러리는 여전히 서비스 인프라에서 중요한 위치를 차지하고 있습니다. linux 등 운영체제가 C 로 만들어져 있고 편리하게 개발을 할수 있는 생산성 좋은 script(ruby 나 python, PHP 등..) 언어의 엔진들은 대부분 C 로 제작되었고 openssl, database driver 등의 기능은 C 로 작성된 라이브러리를 호출하여 언어의 기능을 확장하고 있습니다. 운영체제에서 프로그램이 어떻게 동작하는지 이해하는 것은 견고한 서비스를 만들고 문제가 생겼을 때 대응을 하는데 도움이 되는 지식이지만 바쁜 시대에서 이런 지식을 체계적으로 학습하기는 쉽지가 않습니다. 그래서 프로그램의 동작 방식을 이해하기 ..
[Basic] DRAM, SRAM 메모리 종류 : 1. 메인(Main) 메모리 : 램(RAM) (D램) 2. 레지스터(Register) : CPU 안에 내장되어 있어서 연산을 위한 저장소 제공 3. 캐쉬(Cache) : S램. CPU와 램사이에서 중간 저장소 역할 4. 하드디스크(Hard Disk)와 이외 장치 : 하드 디스크, I/O 장치 등등 [반도체 8대공정] 메모리 SRAM&DRAM (Feat.엔지닉) 반도체 공부 2일차! 반도체 메모리 소자인 SRAM과 DRAM 에 대해서 공부했다 읽기 쓰기 동작 너무 ... blog.naver.com
aarch64 AArch64 또는 ARM64 는 ARM 아키텍처 의 64 비트 확장입니다 . ARM 아키텍처의 근본적인 변화를 나타냅니다. 64 비트 아키텍처 (예 : Cortex-A32는 32 비트 ARMv8-A CPU [2] 인 반면 대부분의 ARMv8-A CPU는 모든 ARMv8-R과 달리 64 비트를 지원함)를 "AArch64"라는 이름으로 추가합니다. ARM 아키텍처 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 64/32비트 아키텍처발표2011년 (9년 전)(2011)버전Armv8-A, Armv8.1-A, Armv8.2-A, Armv8.3-A, Armv8.4-A, Armv8.5-A, Armv8.6-A인코딩AArch64/A64 및 AArch32/A32는 32비트 명령어를 사용하며, T3..
arm architecture와 x86 architecture 리눅스 시스템 정보 확인하기 리눅스 시스템 정보(CPU, 메모리, 디스크, 네트워크 카드 등)를 확인하는 명령어에 대해 작성한 글입니다 zzsza.github.io ARM (Advanced RISC Machine) 는 RISC 동안 (축소 명령어 세트 컴퓨팅) 아키텍처 x86A는 CISC (복합 명령 집합 컴퓨팅) 하나. ARM 명령어는 레지스터에서 데이터를 로드 및 저장하기 위한 몇 가지 명령어가있는 레지스터에서만 작동하고 x86은 메모리에서 직접 작동 할 수 있다는 것입니다. x86 이라는 뜻은 인텔(INTEL)의 CPU 시리즈 이름이자 그 CPU의 명령체계 아키텍쳐 이름입니다 인텔이 만든 x86은 CPU의 내부 명령어를 처리하는 로직 아키텍쳐를 뜻한다. x86 아키텍처는 계속 진화하면서 16bit,..
Double buffering 버퍼란 어떤 장치에서 다른 장치로 데이터를 송신할 때 일어나는 시간의 차이나 데이터 흐름의 속도 차이를 조정하기 위해 일시적으로 데이터를 기억시키는 장치이다. 싱글버퍼(single buffer)의 경우 채널이 데이터를 버퍼에 저장하면 프로세서가 처리하는 방식으로 진행된다. 이경우 채널이 데이터를 저장하는 동안에는 데이터에 대한 처리가 이루어질 수 없으며, 프로세서가 데이터를 처리하는 동안에는 다른 데이터가 저장될 수 없게된다. 더블버퍼(double buffer)의 경우에는 데이터에 대한 저장과 처리가 동시에 일어날 수 있다. 입력채널이 첫 번째 버퍼에 데이터를 저장하는 동안 프로세서가 두 번째 버퍼의 데이터를 처리할 수 있는 것이다. 이렇게 두개의 버퍼를 서로 교대로 사용하는 것을 플립플롭버퍼링(flip..
Data prefetching 앞으로 연산에 필요한 data들을 미리 가져오는 것 Data Prefetch Data prefetch Data prefetch란 앞으로 연산에 필요한 data들을 미리 가져오는 것을 의미합니다. 미리 가져온다... 미리 가져오면 좋은점이 어떤 것이 있을까요? 바로 Memory latency를 감출 수 있습니다.. wh00300.tistory.com
Batch Processing(배치 프로그램) 일괄 처리(batch processing)란 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식을 뜻한다. 초기의 일괄처리 방식은 사용자와 상호작용하는 것이 불가능했지만, 운영 체제가 발전함에 따라 프로그램 입출력을 통해 상호작용하는 것이 가능해졌다. 일괄 처리는 1950년대 전자 컴퓨팅 초기 시절 이후 메인프레임 컴퓨터와 함께하고 있다. 여기서 중요한 것은 바로 일괄처리 입니다. 개별적으로 어떤 요청이 있을 때마다 실시간으로 통신하는 것이 아닌 한꺼번에 일괄적으로 대량 건을 처리하는 것입니다. 특히 배치는 보통 정해진 특정한 시간에 실행됩니다. 1. 대량건의 데이타를 처리한다. 2. 특정 시간에 실행된다. 3. 일괄적으로 처리한다. S보험회사의 대표인 중앙처리시스템이 대표로 S보험회사가 보유하..
swp(스왑파일) 생성 오류 rm 사용해서 없앤다. [Linux] 리눅스 vi 에디터 스왑파일(swp) 생성시 해결방법 vi 에디터 스왑파일 생성시 해결방법 vi 에디터 또는 vim 에디터를 사용하다가 파일을 실행하는 경우 다음과 같은 경고를 마주하게 될 때가 있습니다. (여기서는 한국어 버전 리눅스를 사용했는데 dololak.tistory.com
삼항연산자
동적, 정적 라이브러리 개념설명과 gcc에서 사용하기 유연성 부족 문제에 의해서 정적라이브러리를 지양(피하는)한다. 유연성을 올리기 위해서 동적 라이브러리를 이용한다 동적링크라이브러리(Dynamic Link Library) - .dll 동적라이브러리는 실행시간에 실행 프로세스 주소 공간으로 로드됩니다. 정적라이브러리처럼 컴파일 시에 함수가 연결되는 방식이 아닌 런타임시에 함수가 실행파일에 연결된다. 실행파일에는 호출할 함수의 정보만 포함되고 실제 함수 코드는 복사되지 않으므로 실행 파일의 크기가 작아진다. 하지만 실행 파일은 함수에 대한 정보만 가지고 있을 뿐 실제 코드를 가지고 있지 않기 때문에 프로그램 실행시에는 dll 파일이 항상 존재해야 한다. 실행 시간에 라이브러리 파일을 찾아 코드를 포함하기 때문에 동적라이브러리라고 부른다 즉 정적 라이브러리는 ..
SIMD, SISD SIMD(Single Instruction Multiple Data)는 병렬 프로세서의 한 종류로, 하나의 명령어로 여러 개의 값을 동시에 계산하는 방식이다. 벡터 프로세서에서 많이 사용되는 방식으로, 비디오 게임 콘솔이나 그래픽 카드와 같은 멀티미디어 분야에 자주 사용된다. CPU에서는 인텔의 MMX, 스트리밍 SIMD 확장(SSE)과 AMD의 3D나우! 등의 기술에서 이를 적용했다. Intel SIMD 아키텍처인 MMX, SSE, AVX 등은 실시간 그래픽 지원을 위해서 만들어졌기 때문에 데이터 타입과 아키텍처에 따라 벡터 길이가 2에서 16 워드 정도인 2,3,4 차원 처리를 위해 고안되었다. SIMD (Single Instruction Multiple Data)에 대한 집중탐구! ​안녕하세요~! ..
[Basic] cpu, core, processor 0 중앙 처리 장치 또는 CPU(영어: central processing unit)는 컴퓨터 시스템을 통제하고 프로그램의 연산을 실행하고 처리하는 가장 핵심적인 컴퓨터의 제어 장치, 혹은 그 기능을 내장한 칩을 말한다. 컴퓨터 안의 중앙 처리 장치(CPU)는 외부에서 정보를 입력 받고, 기억하고, 컴퓨터 프로그램의 명령어를 해석하여 연산하고, 외부로 출력하는 역할을 한다. 따라서 중앙 처리 장치(CPU)는 컴퓨터 부품과 정보를 교환하면서 컴퓨터 시스템 전체를 제어하는 장치로, 모든 컴퓨터의 작동과정이 중앙 처리 장치(CPU)의 제어를 받기 때문에 컴퓨터의 두뇌에 해당한다고 할 수 있다. 실제의 CPU 칩엔 실행 부분뿐만 아니라 캐시 등의 부가 장치가 통합된 경우가 많다. CPU에는 MCU(Micro Cont..