전체 분류 보기 500

[자료 구조] 1. 필요성.

자료 구조의 필요성 필자는 우선 현재 6년차 C언어를 주력으로 하고있는 개발자이다.현 시점에서 대학교 때 배웠던 자료구조를 다시 공부하려고 한다. 1. 나는 왜 자료 구조를 다시 공부하려고 하는가?? 올해 초 회사에서 코딩을 하다 보니, 프로그램의 성능을 향상 시켜야 하는 일을 맏게 되었다. 그래서 성능을 향상 시킬 방법을 고민하기 시작했다. 그런데.. 맙소사.. 방법으 잘 모르겠더라...OTL, 정말 충격이 였다. 여태 껏 프로그래밍을 하면서 내가 생각하는건 다 구현 할수 있는 수준까지 되었으나. 정작 성능 향상시키는 것에서 막힌 것이다. 그래서 어떻게 게하면 프로그램의 성능을 향상 시킬수 있는지 찾아보았다. 여러 가지 방법이 있었다. 그중 대표적인 것으로 multi threading이 존재하고, 전역..

7장. 파이프라인(pipeline)

파이프라인(pipeline) 1. 파이프라인(pipeline) 이란? - 프로세서에서 성능을 높이기 위해서 명령어 처리 과정으로 명령어 처리를 여러 단계로 나누어 단계별로 동시에 수행하여 병렬화를 시키는 것을 말한다. 2. pipeline 동작 방식 - 매 클록마다 여러 명령어를 중복된 단계 없이 실행 킨다. - 아래는 5단계 pipeline의 모습이다 3. 가장 효율인 pipeline 조건 - 각 단계별 처리 시간이 일정해야 한다. - 각 명령어의 처리 단계는 균일해야 한다. * 그러나 실제로는 처리 시간일 일정하지도 않고 처리 단계가 균등하지 않아서 문제가 발생한다. 이를 Hazard라고 한다. 4. 헤저드의 종류(Hazard) 1) 구조 헤저드 - 프로세서의 자원이 부족해서 발생한다. - 아래와 같..

6장. 프로세스 기본 동

프로세스 기본 동작 1. 프로세의 동작 이란? - 명령어를 처리하여 해당 명령어 맞게 레지스터 및 메모리의 상태릐 변화 시키는 것이라고 볼수 있다. 2. 프로세스의 명령어 처리 과정(5단계) 1) 명령어 인출 (Instruction Fetch, IF) 2) 명령어 해독 (Instruction Decoding, ID) 3) 피연산잘 인출 (Operands Fetch, OF) 4) 명령어 실행 ( instruction Execution, EX) 5) 결과 저장 ( Operand Store, OS 또는 write back,WB) 3. 각 명령어 처리 과정 상세 설명 1) 명령어 인출 (Instruction Fetch, IF)- PC(Program counter) 또는 IP(Instruction Pointer ..

[libcurl] libcurl + openssl + multi thread 처리에 대한 고민

*무단으로 퍼가지 마세요.* libcurl + openssl + multi thread에 대한 정리 이번 글은 curl을 multi threading 기반으로사용시 발생하는 문제점을 정리 하려고 한다. 1. curl을 multi thread처리가 되어있는가?? - 내가 생각하는 multi thread라 여러 Thread가 각자의 connection을 만들고 이후 작업을 동시에 수행해야한다. - curl 공식 홈페이지에 가보면 "libcurl is thread safe but has no internal thread synchronization: libcurl은 쓰레드에 안전하다. 그러나 내부 쓰레드 동기화는 없음(이게 뭔 개소리인지.) 결국 사용자가 lock걸로 알아서 동기화 해서 쓰라고함 - 결론 li..

[메모리] share memory 사용법

1. Shared memory 리란? - IPC(Inter-Process Communication) 의 일종으로 프로세스간 통신 할때 사용한다. 2. 데이터 공유 방식 - 커널에 생성된 공유 메모리를 통해서 프로세스간 데이터를 공유한다. - 공유된 메모리 영역을 통해서 통신이 가능하다. - 단순히 공유 메모리를 point 함으로써 프로세스에서 사용되는 메모리가 증가되지는 않는다. 3 . shared memory를 사용하기 위해서 필요한 헤더 및 함수 1)헤더 - #include - #include 2) 함수 - int shmget(key_t key, int size, int shmflg) => shared memory 생성 또는 가져오는 함수 - void *shmat( int shmid, const vo..

3장. 프로세스의 기본 부품과 개념들

1. 컴퓨터 하드웨어 구성 - 큰 그림 2. 마이크로 아키텍쳐란? - 사전 적인 정의 인텔 4004는 최초의 일반용, 상용 마이크로프로세서이다.마이크로프로세서(영어: microprocessor, 문화어: 극소형처리장치(極小型處理裝置), 미크로처리장치(미크로處理裝置)) 또는 초소형 연산 처리 장치(超小型演算處理裝置)는 컴퓨터의 중앙 처리 장치(CPU)를 말한다 - 마이크로프로세서 하나를 만드는데 필요한 알고리즘 및 회로 수준의 구조를 자세히 정의한 것을 마이크로아키텍쳐 라고 한다. - 즉 CPU만드는데 필요한 설계도!!! 3. 프로세서의 내부 구조 1). 산술 논리 장치(Arithmetic Logical Unit) ALU - 프로세스 내에서 계산을 담당하는 장치 - 지원하는 연산 (1). 정수 사칙 연산 ..

[libcurl] 사용법 및 connection 유의 사항

1. libcurl의 openssl 버전 확인 방법 및 업그레이드 방법 [localhost]$ curl --versioncurl 7.49.1 (x86_64-pc-linux-gnu) libcurl/7.49.1 OpenSSL/1.0.1e zlib/1.2.8Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 2. libcurl compile옵션 설정 (1)./Configure ex) ./configure --disable-shared --disable-ldap --without-zlib --with-ssl="openssl 설치 경로" --prefix=/usr/local/c..

[libcurl] post data 전송

1. crul post data보내는 방법 - 전체 코드는 sameple프로그램을 보자. - post데이터 전송시 data 크기를 지정해 주지 않을경우 data부분은 strlen으로 계산 하여 보낸다. - post데이터 전송시 data 크기를 지정해 주었을경우 지정하 크기만큼 본낸다. 이를 이용하여 post data부분에 구조체 정보를 담아 보낼수 있다. if(curl){curl_easy_setopt(curl, CURLOPT_URL, send_query); } if( dsize > 0 ){ //dsize는 보낼 post data의 크기 /* Now specify the POST data */ curl_easy_setopt(curl, CURLOPT_POST,1L); curl_easy_setopt(curl,..

2장. RISC vs CISC 차이점

1. 과거 RISC vs CISC 차이점 [ 코드 ] struct Vector{ int x; int y; int z; }data[10]; data[index].y = 0x87654321; RISC 코드 해석 ldr r1 , [sp, #4] ; r1 = index mov r3 , #0xC ; r3 = sizeof(vector) mul r2 , r1 , r3 ; r2 = index * sizeof(vector) add r3 , sp , #8 ; r3 = data add r3 , r3 , r2 ; r3 = &data[index] add r2 , r3 , #4 ; r2 = &(data[index].y) ldr r3 , [pc, #8] ; r3 = 0x87654321 str r3 , [r2] ; *(r2) = r..